يكي از مشكلات موجود در voip نسبت به سيستم تلفن ستني موارد امنيتي ميباشد كه بي توجهي نسبت به آن، باعث بالا رفتن هزينهها ميشود. از اين رو قصد داريم تا با بررسي يك سري از حفرههاي امنيتي رايج در voip به راه هاي مقابله با آن بپردازيم.
نكته: قطعا در اين مقاله نميتوانيم براي مطالعه بيشتر در زمينه لايه هاي امنيتي VoIP اينجا را كليك كنيد تمام مشكلات امنيتي موجود در voip را بيان كنيم ولي اميد است كه شخص با خواندن اين مقاله تا حد زيادي از اين حملات جلوگيري كند.
لازم است قبل از اين كه به بررسي پروتكلهاي موجود در voip و لايه utility بپردازيم حملات رايج در شبكه را بشناسيم و با طراحي درست شبكه از حملات در لايه هاي بالايي جلوگيري كنيم.
ARP POISONING
با استفاده از روش arp poisoning هكر مي تواند خود را به عنوان يك شخص مياني در مسير دو دستگاه قرار گيرد و به راحتي تمامي اطلاعات رد وبدل بين دو دستگاه را با استفاده از نرم افزارهايي مانند Cain و ettercap گوش كند.
Man_in_the_middle
در اين روش هكر آدرس mac خود را به عنوان آدرس mac سرور در شبكه ارسال ميكند و از اين به بعد هر شخصي كه ميخواهد به سرور وصل شود در واقع به سيستم هكر وصل شده است و ميتواند اطلاعات مورد نياز خود را بردارد و خود اطلاعات را به سرور ارسال كند.
براي جلوگيري از arp poisoning در شبكه راه هاي زيادي وجود دارد
استفاده از static arpاستفاده از نرم افزارهاي ArpON، AntiARP، ArpWatch
استفاده از سوئيچ هاي control براي مثال استفاده از port protection در سوئيچ هاي cisco
در voip شما ميتوانيد با جدا كردن voip از facts و تعريف تمام IPphone ها در يك vlan مجزا از اين نوع حملات جلوگيري كنيد.
SIP
براي مقابله با مشكلات امنيتي در پروتكل SIP نياز به داشتن امنيت درلايه هاي utility و community مي باشد.SIP از پروتكلهاي UDP, TCP براي signalling استفاده مي كند و در نتيجه تمام مشكلات موجود در اين پروتكل ها را نيز شامل ميشود. Textual content-based بودن پروتكل SIP باعث بالا بردن دسترسي افراد عير مجاز به اطلاعات تبادل شده در پروتكل SIP ميشود.
به همين دليل است كه راه كار هاي امنيتي از قبيل (فايروال، encryption و authentication ) مورد استفاده قرار مي گيرد. در ضمن استفاده از پروتكل هاي TLSو IPSec ميتواند باعث افزايش سطح امنيتي در SIP شود.
بعضي تنظيمات موجود در asterisk:
بسياري از هكرها براي پيدا كردن username و password در asterisk از روش brute force استفاده ميكنند، چنانچه username ارسالي توسط هكر در سيستم باشد asterisk جواب ۴۰۱ “UNAUTHORIZED” يا ۴۰۷ “غير مجاز مي باشد AUTHENTICATION REQUIRED” را بر مي گرداند و اگر username ارسالي توسط هكر در سيستم يافت نشود asterisk جواب ۴۰۴ “no longer found” را بر مي گرداند و اين به هكر كمك مي كند تا براحتي username هاي موجود در سيستم را پيدا كند. براي اين منظور alwaysauthreject را در تنظيمات sip.Conf خود برابر با sure قرار دهيد تا asterisk به تمامي درخواست ها جواب ۴۰۱ يا ۴۰۷ را برگرداند.استفاده نكردن از شماره به عنوان usernameراه اندازي tlsمحدود كردن IP هاي مجاز براي يك داخلي
پروتكل sip به صورت پيش فرض از روش HTTP Digest براي احرازهويت كاربران خود استفاده مي كند
احراز هويت در SIP:
ابتدا purchaser يك در خواست sign up به sip سرور ارسال مي كند
سپس sip سرور پاسخ ۴۰۱ يا ۴۰۷ را بر ميگرداند
سپس client درخواست sign up خود را به همراه mystery خود را ارسال ميكند
1-Register sip:192.168.1.138;delivery=UDP SIP/2.ZeroThrough: SIP/2.Zero/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-84186a35f1e76cd2-1—d8754z-Max-Forwards: 70Contact: To: From: ;tag=2059497eCall-id: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U.CSeq: 1 sign upExpires: 3600Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, alternatives, data, SUBSCRIBESupported: replaces, norefersub, extended-refer, X-cisco-serviceuriConsumer-Agent: Zoiper rev.11619Permit-events: presence, kpmlContent-length: 0
2-SIP/2.Zero 401 UnauthorizedVia: SIP/2.0/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-84186a35f1e76cd2-1—d8754z-;obtained=192.168.1.138;rport=5061From: ;tag=2059497eTo: ;tag=as503e8ab6Name-identity: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U.CSeq: 1 registerServer: Asterisk PBX 10.Zero.0Allow: INVITE, ACK, CANCEL, alternatives, BYE, REFER, SUBSCRIBE, NOTIFY, data, publishSupported: replaces, timerWWW-Authenticate: Digest set of rules=MD5, realm=”abdi“, nonce=”4674f014“Content material-length: 0
3-Register sip:192.168.1.138;delivery=UDP SIP/2.ZeroThrough: SIP/2.Zero/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-f372cbe708a324d0-1—d8754z-Max-Forwards: 70Contact: To: From: ;tag=2059497eName-identity: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U.CSeq: 2 check inExpires: 3600Permit: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, options, information, SUBSCRIBESupported: replaces, norefersub, extended-refer, X-cisco-serviceuriUser-Agent: Zoiper rev.11619Authorization: Digest username=”200“,realm=”abdi“,nonce=”4674f014“,uri=”sip:192.168.1.138;transport=UDP“,response=”0b84db8e33d6f961b8f8e17c5a2bf420“,set of rules=MD5Permit-occasions: presence, kpmlContent material-duration: 0
محاسبه response توسط consumer :
String1 = md5(username+”:”+realm+”:”+mystery)String2 = md5(approach+”:”+req_uri)Response = md5(string1+”:”+nonce+”:”+string2)
همانطور كه ميبينيد در SIP هيچگاه secret ارسال نميشود، در واقع customer با استفاده از realm و nonce كه از سرور دريافت ميكند(مرحله ۲) مقدار response را با استفاده از فرمول بالا به دست ميآورد و آن را ارسال ميكند و سرور نيز به همين روش مقدار reaction را محاسبه ميكند و اگر reaction خود و client يكي بود authentication با موفقيت انجام ميشود.
با توجه به يك طرفه بودن الگوريتم MD5 با داشتن reaction، رسيدن به secret تقريبا غير ممكن است اما اگر پسورد انتخاب شده به سادگي قابل حدس زدن باشد هكر به راحتي ميتواند response خود را توليد كند و آن را با reaction فرستاده شده از سوي patron مقايسه كند و پسورد را به دست آورد.
Encryption در media :
به دليل وجود نداشتن هيچ مكانزيم امنيتي در rtp payload، امكان استراق سمع و حتي فهميدن dtmf هاي ارسالي توسط شخص ارسال كننده بسيار راحت خواهد بود، اگر شبكه مورد نظر مسائل امنيتي را رعايت نكرده باشد.
SRTP مشخصات RTP تعريف شده در RFC3711 را فراهم مي كند كه رمزنگاري و احراز هويتهاي صوتي داده ها را در يك جريان RTP مشخص مي كند. كليد رمزگذاري و گزينه ها در پيام هاي INVITE رد و بدل شده، به اين منظور ترجيحا از SIPS استفاده شود
براي encryption و decryption در SRTP از AES استفاده مي شود.
Asterisk Dialplan Injection
يكي از رايج ترين از مشكلات امنيتي در asterisk قبول كردن wildcard در EXTEN$ است. با داشتن wildcard در dialplan ممكن است شخص با تزريق كردن string، اجازه گرفتن تماس هاي ناخواسته از نظر سيستم، مورد قبول قرار گيرد.
مانند زير:
Exten => _X.,1,Dial(SIP/$EXTEN)
در اين حالت شخص با تماس گرفتن به
۳۰۰&DAHDI/g1/00146165551212
مي تواند يك تماس بين اللملي ايجاد در حالي كه در Dialplan قصد ما فقط اجازه گرفتن تماس داخلي بوده است.
البته اين مشكل امنيتي فقط در تكنولوژي هايي قابل اجرا است كه قابليت ارسال string را داشته باشند مانند SIP.
براي جلوگيري از اين گونه تماس ها استفاده از تابع filter در Dialplan است به مثال زير توجه كنيد:
Exten => _X.,1,Set(SAFE_EXTEN=$filter(0-9,$EXTEN:1))Same => n,GotoIf($[$EXTEN:1 != $SAFE_EXTEN]?Error_match,1)Identical => n,Dial(SIP/$SAFE_EXTEN)
Exten => error_match,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did no longer in shape.)Same => n,Verbose(2,EXTEN: “$EXTEN” — SAFE_EXTEN: “$SAFE_EXTEN”)Equal => n,Playback(silence/1&invalid)Identical => n,Hangup()
يكي ديگر از مسائلي كه بايد مورد توجه قرار گيرد استفاده از فايروال و محدود كردن دسترسي ها مي باشد.
هنگامي كه تمامي داخلي قرار است از درون شبكه داخلي به سرور متصل شوند نيازي نيست پورت هاي مانند SIP و IAX در در اينترنت باز گذاشت.
در صورت نياز به استفاده از پروتكل SIP و IAX از اينترنت استفاده از اين نام مجاز نمي باشد مي تواند گزينه مناسبي باشد، البته به دليل داشتن overhead بر روي شبكه و تاثير بر روي كيفيت مكالمه، امكان اجراي اين نام مجاز نمي باشد نباشد كه در اين صورت بايد راه كارهاي امنيتي مناسب به كار گرفته شود.
براي مثال در asterisk با نگاه به فايل var/log/asterisk/messages/ ميتوانيد با نوشتن يك اسكريپت، ip هايي را كه چند بار براي register شدن failed شده اند را براي مدتي يا براي هميشه block كنيد.
در زير نمونه اي از اين فايل را مشاهده مي كنيد.
[Jun 19 13:59:54] notice[24287] chan_sip.C: Registration from ‘’ failed for ’192.168.1.138:5061′ – wrong password[Jul 29 17:19:11] observe[4646] chan_sip.C: Registration from ‘”2 hundred″’ failed for ’192.168.88.A hundred:5060′ – Username/auth call mismatch [Jul 29 17:19:11] notice[4646] chan_sip.C: Registration from ‘”500″’ failed for ’192.168.88.100:5060′ – No matching peer found