امنیت در voip

یکی از مشکلات موجود در voip نسبت به سیستم تلفن ستنی امنیت در voip می‌باشد که بی توجهی نسبت به آن، باعث بالا رفتن هزینه‌ها می‌شود. از این رو قصد داریم تا با بررسی یک سری از حفره‌های امنیتی رایج در voip به راه های مقابله با آن بپردازیم.

نکته: قطعا در مقاله امنیت در voip نمی‌توانیم تمام مشکلات امنیتی موجود در voip را بیان کنیم ولی امید است که شخص با خواندن مقاله امنیت در voip تا حد زیادی از این حملات جلوگیری کند.

امنیت در voip

لازم است قبل از این که به بررسی پروتکل‌های موجود در voip و لایه application بپردازیم حملات رایج در شبکه را بشناسیم و با طراحی درست شبکه از حملات در لایه های بالایی جلوگیری کنیم.

ARP POISONING

با استفاده از روش arp poisoning هکر می تواند خود را به عنوان یک شخص میانی در مسیر دو دستگاه قرار گیرد و به راحتی تمامی اطلاعات رد وبدل بین دو دستگاه را با استفاده از نرم افزارهایی مانند Cain و ettercap گوش کند.

امنیت در voip

man_in_the_middle

در این روش هکر آدرس mac خود را به عنوان آدرس mac سرور در شبکه ارسال می‌کند و از این به بعد هر شخصی که می‌خواهد به سرور وصل شود در واقع به سیستم هکر وصل شده است و می‌تواند اطلاعات مورد نیاز خود را بردارد و خود اطلاعات را به سرور ارسال کند.

برای جلوگیری از arp poisoning در شبکه راه های زیادی وجود دارد

استفاده از static arp

استفاده از نرم افزارهای ArpON، AntiARP، ArpWatch

استفاده از سوئیچ های manage برای مثال استفاده از port security در سوئیچ های cisco

در voip شما می‌توانید با جدا کردن voip از data و تعریف تمام IPphone ها در یک vlan مجزا از این نوع حملات جلوگیری کنید.

SIP

برای مقابله با مشکلات امنیتی در پروتکل SIP نیاز به داشتن امنیت درلایه های Application و Network می باشد. SIP از پروتکلهای  UDP, TCP برای signalling استفاده می کند و در نتیجه تمام مشکلات موجود در این پروتکل ها را نیز شامل میشود. text-based بودن پروتکل SIP باعث بالا بردن دسترسی افراد غیر مجاز به اطلاعات تبادل شده در پروتکل SIP میشود.

به همین دلیل است که راه کار های امنیتی از قبیل (فایروال، encryption و authentication ) مورد استفاده قرار می گیرد. در ضمن استفاده از پروتکل های TLSو  IPSec می‌تواند باعث افزایش سطح امنیتی در SIP شود.

بعضی تنظیمات موجود در asterisk:

بسیاری از هکرها برای پیدا کردن username و password در asterisk از روش brute force استفاده میکنند، چنانچه username ارسالی توسط هکر در سیستم باشد asterisk جواب ۴۰۱ “UNAUTHORIZED”  یا ۴۰۷ “PROXY AUTHENTICATION REQUIRED”  را بر می گرداند و اگر username ارسالی توسط هکر در سیستم یافت نشود asterisk جواب ۴۰۴ “NOT FOUND”  را بر می گرداند و این به هکر کمک می کند تا براحتی username های موجود در سیستم را پیدا کند. برای این منظور alwaysauthreject را در تنظیمات sip.conf خود برابر با yes قرار دهید تا asterisk به تمامی درخواست ها جواب ۴۰۱ یا ۴۰۷ را برگرداند.

استفاده نکردن از شماره به عنوان username

راه اندازی tls

محدود کردن IP های مجاز برای یک داخلی

پروتکل sip به صورت پیش فرض از روش HTTP Digest برای احرازهویت کاربران خود استفاده می کند

احراز هویت در SIP:

ابتدا client یک در خواست REGISTER به sip سرور ارسال می کند

سپس sip سرور پاسخ ۴۰۱ یا ۴۰۷ را بر میگرداند

سپس client درخواست REGISTER خود را به همراه secret خود را ارسال میکند

۱-

REGISTER sip:192.168.1.138;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-84186a35f1e76cd2-1—d8754z-

Max-Forwards: 70

Contact: <sip:200@192.168.1.138:5061;rinstance=991c8af008b63d90;transport=UDP>

To: <sip:200@192.168.1.138;transport=UDP>

From: <sip:200@192.168.1.138;transport=UDP>;tag=2059497e

.Call-ID: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U

CSeq: 1 REGISTER

Expires: 3600

Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE

Supported: replaces, norefersub, extended-refer, X-cisco-serviceuri

User-Agent: Zoiper rev.11619

Allow-Events: presence, kpml

Content-Length: 0

۲-

SIP/2.0 401 Unauthorized

Via: SIP/2.0/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-84186a35f1e76cd2-1—d8754z-;received=192.168.1.138;rport=5061

From: <sip:200@192.168.1.138;transport=UDP>;tag=2059497e

To: <sip:200@192.168.1.138;transport=UDP>;tag=as503e8ab6

.Call-ID: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U

CSeq: 1 REGISTER

Server: Asterisk PBX 10.0.0

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH

Supported: replaces, timer

“WWW-Authenticate: Digest algorithm=MD5, realm=”abdi“, nonce=”۴۶۷۴f014

Content-Length: 0

۳-

REGISTER sip:192.168.1.138;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.1.138:5061;branch=z9hG4bK-d8754z-f372cbe708a324d0-1—d8754z-

Max-Forwards: 70

Contact: <sip:200@192.168.1.138:5061;rinstance=991c8af008b63d90;transport=UDP>

To: <sip:200@192.168.1.138;transport=UDP>

From: <sip:200@192.168.1.138;transport=UDP>;tag=2059497e

.Call-ID: OTBkOGJhMmYwNTQ4M2U0ODBmOTU0YmQzODViOWVmM2U

CSeq: 2 REGISTER

Expires: 3600

Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE

Supported: replaces, norefersub, extended-refer, X-cisco-serviceuri

User-Agent: Zoiper rev.11619

Authorization: Digest username=”۲۰۰“,realm=”abdi“,nonce=”۴۶۷۴f014“,uri=”sip:192.168.1.138;transport=UDP“,response=”۰b84db8e33d6f961b8f8e17c5a2bf420“,algorithm=MD5

Allow-Events: presence, kpml

Content-Length: 0

محاسبه response توسط client :

string1 = md5(username+”:”+realm+”:”+secret)

string2 = md5(method+”:”+req_uri)

response = md5(string1+”:”+nonce+”:”+string2)

همانطور که می‌بینید در SIP هیچگاه secret ارسال نمی‌شود، در واقع client با استفاده از realm و nonce که از سرور دریافت می‌کند(مرحله ۲) مقدار response را با استفاده از فرمول بالا به دست می‌آورد و آن را ارسال می‌کند و سرور نیز به همین روش مقدار response را محاسبه می‌کند و اگر response خود و client یکی بود authentication با موفقیت انجام می‌شود.

با توجه به یک طرفه بودن الگوریتم MD5 با داشتن response، رسیدن به secret تقریبا غیر ممکن است اما اگر پسورد انتخاب شده به سادگی قابل حدس زدن باشد هکر به راحتی میتواند response خود را تولید کند و آن را با response فرستاده شده از سوی client مقایسه کند و پسورد را به دست آورد.

Encryption  در media :

به دلیل وجود نداشتن هیچ مکانزیم امنیتی در rtp payload، امکان استراق سمع و حتی فهمیدن dtmf های ارسالی توسط شخص ارسال کننده بسیار راحت خواهد بود، اگر شبکه مورد نظر مسائل امنیتی را رعایت نکرده باشد.

SRTP مشخصات RTP تعریف شده در RFC3711 را فراهم می کند که رمزنگاری و احراز هویت‌های صوتی  داده ها را در یک جریان RTP مشخص می کند. کلید رمزگذاری و گزینه ها در پیام های  INVITE رد و بدل شده، به این منظور ترجیحا از SIPS استفاده شود

برای encryption و decryption در SRTP از AES استفاده می شود.

Asterisk Dialplan Injection

یکی از رایج ترین مشکلات امنیت در voip و asterisk قبول کردن wildcard در {EXTEN}$ است. با داشتن wildcard در dialplan ممکن است شخص با تزریق کردن string، اجازه گرفتن تماس های ناخواسته از نظر سیستم، مورد قبول قرار گیرد.

مانند زیر:

exten => _X.,1,Dial(SIP/${EXTEN})

در این حالت شخص با تماس گرفتن به

۳۰۰&DAHDI/g1/00146165551212

می تواند یک تماس بین اللملی ایجاد در حالی که در Dialplan قصد ما فقط اجازه گرفتن تماس داخلی بوده است.

البته این مشکل امنیت در voip فقط در تکنولوژی هایی  قابل اجرا است که قابلیت ارسال 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)

same => n,Dial(SIP/${SAFE_EXTEN})

exten => error_match,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did not match.)

same => n,Verbose(2,EXTEN: “${EXTEN}” — SAFE_EXTEN: “${SAFE_EXTEN}”)

same => n,Playback(silence/1&invalid)

same => n,Hangup()

یکی دیگر از مسائلی که باید مورد توجه قرار گیرد استفاده از فایروال و محدود کردن دسترسی ها می باشد.

هنگامی که تمامی داخلی قرار است از درون شبکه داخلی به سرور متصل شوند نیازی نیست پورت های مانند SIP و IAX در در اینترنت باز گذاشت.

در صورت نیاز به استفاده از پروتکل SIP و IAX از اینترنت استفاده از VPN می تواند گزینه مناسبی باشد، البته به دلیل داشتن overhead بر روی شبکه و تاثیر بر روی کیفیت مکالمه، امکان اجرای VPN نباشد که در این صورت باید راه کارهای امنیتی مناسب به کار گرفته شود.

برای مثال در asterisk با نگاه به فایل var/log/asterisk/messages/ میتوانید با نوشتن یک اسکریپت، ip هایی را که چند بار برای register شدن failed شده اند را برای مدتی یا برای همیشه block کنید.

در زیر نمونه ای از این فایل را مشاهده می کنید.

[Jun 19 13:59:54] NOTICE[24287] chan_sip.c: Registration from ‘<sip:vahid@192.168.1.138;transport=UDP>’ failed for ’۱۹۲٫۱۶۸٫۱٫۱۳۸:۵۰۶۱′ – Wrong password

[Jul 29 17:19:11] NOTICE[4646] chan_sip.c: Registration from ‘”۲۰۰″<sip:200@192.168.1.138:5060>’ failed for ’۱۹۲٫۱۶۸٫۸۸٫۱۰۰:۵۰۶۰′ – Username/auth name mismatch 

[Jul 29 17:19:11] NOTICE[4646] chan_sip.c: Registration from ‘”۵۰۰″<sip:500@192.168.1.138:5060>’ failed for ’۱۹۲٫۱۶۸٫۸۸٫۱۰۰:۵۰۶۰′ – No matching peer found

ما را در اینستاگرام دنبال کنید: @mashhadit_group

به نقل از سایت (voip-blog) – باز نشر گروه فناوری اطلاعات مشهد آی تی

ارسال پاسخ