در این مطلب می خواهیم یک نمونه از روش هایی که توسط مهاجمان برای نفوذ به زیرساخت VoIP مورد استفاده قرار می گیرد را با هم بررسی کنیم. در ادامه می بینیم که چطور یک مهاجم می تواند پس از شناسایی SIP server در شبکه، به شمارش extension ها و secret های موجود در آن بپردازد و در نهایت چگونه یک مکالمه ی بر بستر VoIP را شنود نماید. اما قبل از این که وارد جزئیات و نحوه اجرای این دسته از حملات بشویم، ابتدا به بررسی پروتکل VoIP می پردازیم.
آشنایی با protocol: VoIP
VoIP مخفف عبارت Voice over Internet Protocol هست که با نام IP Telephony هم شناخته میشود و از این پروتکل برای برقراری تماس های تلفنی و یا ارسال multimedia بر بستر اینترنت استفاده میشود. VoIP به صورت پیش فرض از port: 5060 به عنوان port مربوط به SIP signaling استفاده میکند. از پروتکل SIP (Session Initiation Protocol) برای برقراری ارتباط، اتمام و یا تغییر یک تماس تلفنی یا ویدئویی استفاده می شود. SIP یک پروتکل لایه Application است که به صورت پیش فرض از port 5060 TCP/UDP برای ترافیک های رمز گذاری نشده و از port 5061 برای ترافیک هایی که با TLS رمز شده اند استفاده می کند.
در زیر ساخت VoIP، ترافیک صوت و یا ویدئو از طریق پروتکل RTP (Real-Time Protocol) انتقال مییابد. از پروتکل RTP در سیستم های ارتباطی و سرگرمی استفاده می شود که شامل اصطلاحاً streaming media هایی مثل ویدئو، تلفن و ... است. به صورت پیش فرض RTP از portهای شماره 16384 تا 32767 استفاده می کند که از آنها برای برقراری تماس های SIP استفاده می شود.
برای آشنایی با حمله ای که در این مطلب به آن می پردازیم، ابتدا سناریوی زیر را مطالعه بفرمایید که بر روی یک شبکه فرضی و ساختگی پیاده سازی خواهد شد.
سناریوی مورد نظر:
سناریویی را در نظر بگیرید که در آن مهاجم ابتدا به شناسایی SIP server در شبکه می پردازد و سپس با استفاده از ابزارهایی که در اختیار دارد، extension های تعریف شده در آن را enumerate می کند. در این مرحله پس از کشف secretهای متناظر با هر extension، سیستم خود را در SIP server ثبت نام کرده و پس از آن به برقراری تماس تلفنی با یکی از کاربران موجود در شبکه می پردازد. در انتها نیز مهاجم با اجرای یک حمله MitM، ترافیک VoIP عبوری میان دو قربانی در شبکه را sniff کرده و به فایل صوتی ارتباط آن دو دست می یابد.
مراحل اجرای حمله:
مرحله 1: نصب پیش نیازات بر روی سیستم مهاجم
برای این که حمله مذکور را پیاده سازی کنیم، از ابزار viproy-voipkit استفاده می کنیم که در واقع یک VoIP pentest kit هست که برای Metasploit نوشته شده است.
برای نصب این ابزار باید ابتدا پیش نیازات زیر بر روی سیستم نصب شده باشد:
git , autoconf , build-essential , libcap-dev , zlib1g-dev , libpq-dev , libsqlite3-dev , libcap-dev
بعد از نصب پیش نیازات فوق، می توان با مراجعه به اینجا، این ابزار قدرتمند را دانلود کرد و سپس ماژول ها و فایل های lib موجود در این pentest kit را به lib ها و ماژول های Metasploit اضافه کرد. در انتها هم باید سه خط زیر به فایل “/usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb” اضافه بشوند تا بتوانیم از script های این ابزار در Metasploit استفاده بکنیم:
- require 'msf/core/auxiliary/sip'
- require 'msf/core/auxiliary/skinny'
- require 'msf/core/auxiliary/msrp'
اگر با اجرای مراحلی که گفته شد و مطابق با توضیحات نویسنده این ابزار عمل کردید اما برای نصب آن با error مواجه شده اید، توصیه می شود که از نسخه pre-installed این ابزار که توسط خود نویسنده آن تهیه شده و از آدرس اینجا در دسترس هست، استفاده کنید.
مرحله دوم: شناسایی SIP server در شبکه
اولین اقدامی که مهاجمان برای حمله به protocol: VoIP انجام می دهند، شناسایی SIP server در شبکه قربانی هست. برای این کار می توان از ماژول نام برده زیر در Metasploit بهره برد:
auxiliary/scanner/sip/options
برای شناسایی SIP server در شبکه، کافی است مهاجم IP range شبکه قربانی را به ماژول نام برده معرفی نماید تا عملیات شناسایی آغاز شود، در شبکه ساختگی که برای پیاده سازی این حمله مورد استفاده قرار میگیرد، دامنه آدرس IP های شبکه قربانی 192.168.0.0/24 است:
set rhosts 192.168.0.0/24
همان طور که در تصویر ملاحظه نمودید، پس از اجرای این ماژول مهاجم قادر است SIP server موجود در شبکه قربانی را با آدرس 192.168.0.222 شناسایی نماید.
مرحله دوم: به دست آوردن extension ها و secret ها
در این مرحله، مهاجم می تواند extension ها و secret هایی که بر روی SIP server تعریف شدند را brute force بکند. برای این منظور کافی است از ماژول زیر استفاده شود:
auxiliary/voip/viproy_sip_bruteforce
برای استفاده از این ماژول، باید آدرس SIP server ای که در مرحله قبل شناسایی شده است را به عنوان پارامتر RHOSTS مقداردهی کرد، هم چنین اگر درباره شبکه قربانی و extension هایی که در زیرساخت VoIP استفاده می شود اطلاعاتی وجود دارد، می توان مقادیر پارامترهای numeric_min و numeric_max را متناظر با آنها مقداردهی کرد تا مدت زمان اجرای این ماژول کوتاه تر شود. بعلاوه برای brute force کردن extensionها و secret ها به کمک این ماژول، می توان از روش های مختلفی استفاده کرد، به عنوان نمونه می توان از یک username یا password خاصی برای brute force استفاده کرد و یا این که می توان از دو wordlist برای این کار استفاده کرد.
بعد از اجرای این ماژول، همان طور که در تصویر زیر مشاهده می کنید، مهاجم قادر است چندین extension و secret متناظر با آنان را از شبکه قربانی به دست آورد:
مرحله سوم: ثبت نام یک extension برای مهاجم
بعد از این که مهاجم توانست از SIP server چندین extension به همراه secret های هر کدام به دست آورد، برای این که بتواند از سیستم خود برای برقراری تماس با سایر station ها استفاده کند، کافی است تا خود را با یکی از extension/secret هایی که در مرحله قبل کشف کرده است، بر روی SIP server ثبت نام کند. برای این منظور می توان از ماژول زیر بهره برد:
auxiliary/voip/viproy_sip_register
همان طور که در تصویر زیر مشاهده می کنید، مهاجم از extension:65656565 و secret:22112211 که در مرحله قبل شناسایی کرده بود، استفاده می کند و خود را در SIP server با موفقیت ثبت نام میکند:
مرحله چهارم: برقراری یک تماس تلفنی از طرف مهاجم
اکنون مهاجم می تواند با سایر کاربران و تلفن های موجود در شبکه قربانی، تماس تلفنی برقرار کند. برای این کار کافی است مهاجم از ماژول زیر استفاده کند:
auxiliary/voip/viproy_sip_invite
برای استفاده از این ماژول، ضمن معرفی SIP server با پارامتر Rhosts، مهاجم می بایست از اطلاعات extension و secret ای که در مرحله قبل خود را با آنها در SIP server ثبت نام کرده بود، استفاده کند و پارامترهای From، Password و Username را مقداردهی نموده و سپس شماره تماس قربانی را به عنوان پارامتر “to” مقداردهی کند. بدین ترتیب پس از اجرای این ماژول، چنان چه پیغام “Server Response: 180 Ringing” دریافت شود، به معنای موفقیت آمیز بودن برقراری تماس با قربانی است.
پس از اجرای این ماژول، تماس تلفنی با قربانی برقرار می شود.
شنود تماس تلفنی میان قربانیان:
همان طور که ملاحظه نمودید، مهاجم توانست با اجرای حمله ای که توضیح داده شد، خود را بر روی روی SIP server ثبت نام کند و از این طریق با سایر extension های موجود در شبکه قربانی تماس بگیرد. در این قسمت، یکی دیگر از حملات رایجی که بر روی protocol: VoIP اتفاق می افتد عنوان می شود.
یکی دیگر از مباحثی که در دسته بندی حملات VoIP مورد توجه قرار می گیرد، شنود ترافیک SIP است. به عبارتی مهاجم با اجرای یک حمله MitM ترافیک عبوری میان قربانیان را در اختیار می گیرد و سپس میتواند با استفاده از انواع ابزارهایی که وجود دارند مثل قابلیت Telephony در wireshark، ترافیک capture شده را گوش دهد. به عنوان نمونه، مهاجم می تواند با اجرای حمله ARP Spoof، ترافیک رد و بدل شده میان قربانیان را به سمت خود کشانده و به sniff ترافیک بپردازد و پس از این که مهاجم ترافیک مربوط به SIP را بر روی کارت شبکه خود capture کرد، اکنون می تواند با استفاده از tab: Telephony موجود در Wireshark، با انتخاب گزینه VoIP Calls، اطلاعات مربوط به تماس های تلفنی که capture کرده است را مشاهده نماید. در این مرحله کافی است مهاجم مکالمه مورد نظر خود را از منویی که به وی نمایش داده شده است انتخاب کرده و با گزینه Play Streams، مکالمه را بشنود که در زیر نمونه ای از یک مکالمه capture شده را می توان مشاهده نمود: