Pentesting VoIP
Основна інформація про VoIP
Щоб почати вивчати, як працює VoIP, перевірте:
pageBasic VoIP ProtocolsПерелік VoIP
Телефонні номери
Один з перших кроків, який може зробити Червоний Тім, - це пошук доступних телефонних номерів для зв'язку з компанією за допомогою інструментів OSINT, пошуку в Google або парсингу веб-сторінок.
Після того, як у вас є телефонні номери, ви можете скористатися онлайн-сервісами для ідентифікації оператора:
Знаючи, чи надає оператор послуги VoIP, ви можете визначити, чи компанія використовує VoIP... Більше того, можливо, компанія не наймала послуги VoIP, а використовує PSTN-карти для підключення власної VoIP АТС до традиційної телефонної мережі.
Речі, такі як автоматичні відповіді або музика, зазвичай свідчать про використання VoIP.
Google Dorks
Інформація OSINT
Будь-яка інша OSINT енумерація, яка допомагає визначити використовуване програмне забезпечення VoIP, буде корисною для Червоної Команди.
Енумерація мережі
nmap
може сканувати служби UDP, але через велику кількість сканованих служб UDP він працює дуже повільно і може бути не дуже точним для цього типу служб.svmap
від SIPVicious (sudo apt install sipvicious
): Знайде SIP-служби в вказаній мережі.svmap
легко блокується, оскільки він використовує User-Agentfriendly-scanner
, але ви можете змінити код з/usr/share/sipvicious/sipvicious
і змінити його.
sipscan.py
з sippts: Sipscan - це дуже швидкий сканер для SIP-сервісів через UDP, TCP або TLS. Він використовує багатопотоковість і може сканувати великі діапазони мереж. Це дозволяє легко вказати діапазон портів, сканувати як TCP, так і UDP, використовувати інший метод (за замовчуванням він використовуватиме OPTIONS) та вказати інший User-Agent (і більше).
metasploit:
Metasploit - це потужний інструмент для розробки та використання експлоітів.
Додаткова мережева перелічення
PBX також може викладати інші мережеві служби, такі як:
69/UDP (TFTP): Оновлення прошивки
80 (HTTP) / 443 (HTTPS): Управління пристроєм через веб-інтерфейс
389 (LDAP): Альтернатива для зберігання інформації про користувачів
3306 (MySQL): База даних MySQL
5038 (Manager): Дозволяє використовувати Asterisk з інших платформ
5222 (XMPP): Передача повідомлень через Jabber
5432 (PostgreSQL): База даних PostgreSQL
Та інші...
Перелічення методів
Можливо виявити які методи доступні для використання в PBX за допомогою sipenumerate.py
з sippts
Перелік розширень
Розширення в системі PBX (Private Branch Exchange) вказують на унікальні внутрішні ідентифікатори, призначені для окремих ліній телефонів, пристроїв або користувачів у межах організації або бізнесу. Розширення дозволяють ефективно маршрутизувати дзвінки в межах організації, без необхідності окремих зовнішніх номерів телефонів для кожного користувача або пристрою.
svwar
від SIPVicious (sudo apt install sipvicious
):svwar
- це безкоштовний сканер ліній розширень SIP PBX. У концепції він працює аналогічно традиційним wardialers, вгадуючи діапазон розширень або заданий список розширень.
sipextend.py
з sippts: Sipexten ідентифікує розширення на сервері SIP. Sipexten може перевіряти великі мережі та діапазони портів.
metasploit: Ви також можете вибирати розширення/імена користувачів за допомогою metasploit:
enumiax
(apt install enumiax
): enumIAX - це інструмент для перебору імен користувачів протоколу Inter Asterisk Exchange (IAX). enumIAX може працювати в двох різних режимах; послідовне вгадування імен користувачів або атака за допомогою словника.
Атаки на VoIP
Брутфорс пароля
Виявивши PBX та деякі розширення/імена користувачів, Червона Команда може спробувати аутентифікуватися через метод REGISTER
до розширення, використовуючи словник загальних паролів для брутфорсу аутентифікації.
Зверніть увагу, що ім'я користувача може бути таким самим, як розширення, але ця практика може відрізнятися в залежності від системи PBX, її конфігурації та вподобань організації...
Якщо ім'я користувача не співпадає з розширенням, вам потрібно визначити ім'я користувача для брутфорсу.
svcrack
з SIPVicious (sudo apt install sipvicious
): SVCrack дозволяє вам взламати пароль для певного імені користувача/розширення на PBX.
sipcrack.py
з sippts: SIP Digest Crack - це інструмент для взлому аутентифікації digest в протоколі SIP.
Metasploit:
Прослуховування VoIP
Якщо ви знаходите обладнання VoIP в відкритій бездротовій мережі, ви можете прослуховувати всю інформацію. Більше того, якщо ви знаходитесь в більш закритій мережі (підключені через Ethernet або захищену Wifi), ви можете виконати атаки MitM, такі як ARPspoofing між PBX та шлюзом, щоб прослуховувати інформацію.
Серед інформації мережі ви можете знайти веб-паролі для управління обладнанням, користувацькі розширення, ім'я користувача, IP-адреси, навіть хешовані паролі та пакети RTP, які ви можете відтворити, щоб прослухати розмову, та інше.
Для отримання цієї інформації ви можете використовувати такі інструменти, як Wireshark, tcpdump... але спеціально створений інструмент для прослуховування розмов VoIP - ucsniff.
Зверніть увагу, що якщо в SIP-комунікації використовується TLS, ви не зможете бачити SIP-комунікацію чітко. Те ж саме стосується використання SRTP та ZRTP, пакети RTP не будуть в чистому тексті.
SIP-паролі
Перевірте цей приклад, щоб краще зрозуміти комунікацію SIP REGISTER, щоб дізнатися, як передаються облікові дані.
sipdump
таsipcrack
, частина sipcrack (apt-get install sipcrack
): Ці інструменти можуть видобувати з pcap дайджести-аутентифікації в межах протоколу SIP та проводити брутфорс їх.
siptshar.py
,sipdump.py
,sipcrack.py
з sippts:SipTshark витягує дані протоколу SIP з файлу PCAP.
SipDump Витягує аутентифікації SIP Digest з файлу PCAP.
SIP Digest Crack - це інструмент для взлому аутентифікації в межах протоколу SIP.
Коди DTMF
Не тільки облікові дані SIP можна знайти в мережевому трафіку, також можна знайти коди DTMF, які використовуються, наприклад, для доступу до голосової пошти. Можна відправляти ці коди в SIP-повідомленнях INFO, у аудіо або всередині пакетів RTP. Якщо коди знаходяться всередині пакетів RTP, ви можете відрізати цю частину розмови та використовувати інструмент multimo для їх видобутку:
Безкоштовні дзвінки / Неправильна конфігурація підключень Asterisks
У Asterisk можливо дозволити підключення з конкретної IP-адреси або з будь-якої IP-адреси:
Якщо вказано IP-адресу, хост не буде потрібно відправляти запити REGISTER час від часу (у пакеті REGISTER відправляється час життя, зазвичай 30 хвилин, що означає, що в іншому випадку телефону потрібно буде РЕЄСТРУВАТИСЯ кожні 30 хвилин). Однак йому потрібно мати відкриті порти, що дозволяють підключення від сервера VoIP для прийому дзвінків.
Для визначення користувачів їх можна визначити як:
type=user
: Користувач може лише приймати дзвінки як користувач.type=friend
: Можливо виконувати дзвінки як рівні та приймати їх як користувач (використовується з розширеннями)type=peer
: Можливо надсилати та приймати дзвінки як рівні (SIP-транки)
Також можливо встановити довіру з небезпечною змінною:
insecure=port
: Дозволяє підключення рівні, підтверджені IP-адресою.insecure=invite
: Не потрібна аутентифікація для повідомлень INVITEinsecure=port,invite
: Обидва
Коли використовується type=friend
, значення змінної host не буде використано, тому якщо адміністратор неправильно налаштує SIP-транк з використанням цього значення, будь-хто зможе підключитися до нього.
Наприклад, ця конфігурація буде вразливою:
host=10.10.10.10
insecure=port,invite
type=friend
Безкоштовні дзвінки / Неправильна конфігурація контексту Asterisks
У Asterisk контекст - це ім'яований контейнер або розділ у плані набору, який групує разом пов'язані розширення, дії та правила. План набору є основним компонентом системи Asterisk, оскільки він визначає, як обробляються та маршрутизуються вхідні та вихідні дзвінки. Контексти використовуються для організації плану набору, управління контролем доступу та забезпечення розділення між різними частинами системи.
Кожен контекст визначається в файлі конфігурації, зазвичай в файлі extensions.conf
. Контексти позначаються квадратними дужками, з ім'ям контексту, що знаходиться всередині них. Наприклад:
У контексті ви визначаєте розширення (шаблони набраних номерів) і пов'язуєте їх з низкою дій або додатків. Ці дії визначають спосіб обробки дзвінка. Наприклад:
Цей приклад демонструє простий контекст під назвою "my_context" з розширенням "100". Коли хтось набирає 100, виклик буде прийнятий, буде відтворено вітальне повідомлення, після чого виклик буде завершено.
Це інший контекст, який дозволяє здійснювати виклик на будь-який інший номер:
Якщо адміністратор визначає контекст за замовчуванням як:
Будь-хто зможе використовувати сервер для дзвінків на будь-який інший номер (і адміністратор сервера оплатить дзвінок).
Більше того, за замовчуванням файл sip.conf
містить allowguest=true
, тоді будь-який зловмисник без аутентифікації зможе здійснювати дзвінки на будь-який інший номер.
sipinvite.py
з sippts: Sipinvite перевіряє, чи дозволяє нам PBX сервер робити дзвінки без аутентифікації. Якщо SIP сервер має неправильну конфігурацію, він дозволить нам здійснювати дзвінки на зовнішні номери. Також може дозволити нам передати дзвінок на другий зовнішній номер.
Наприклад, якщо ваш сервер Asterisk має погану конфігурацію контексту, ви можете приймати запити INVITE без авторизації. У цьому випадку зловмисник може здійснювати дзвінки, не знаючи жодного ім'я користувача/пароля.
Безкоштовні дзвінки / Неправильно налаштовані IVRS
IVRS означає Інтерактивна система голосової відповіді, технологія телефонії, яка дозволяє користувачам взаємодіяти з комп'ютерною системою за допомогою голосу або клавішних введень. IVRS використовується для створення автоматизованих систем обробки дзвінків, які пропонують різноманітні функціональні можливості, такі як надання інформації, маршрутизація дзвінків та збір введеної користувачем інформації.
IVRS у системах VoIP зазвичай складається з:
Голосових промптів: Попередньо записаних аудіо-повідомлень, які керують користувачами через меню IVR та інструкції.
DTMF (двоканальна багаточастотна сигналізація): Клавішні введення, генеровані натисканням клавіш на телефоні, які використовуються для навігації через меню IVR та введення інформації.
Маршрутизація дзвінків: Направлення дзвінків на відповідний призначення, такі як конкретні відділи, агенти або розширення на основі введеної користувачем інформації.
Збір введеної користувачем інформації: Збір інформації від дзвінків, такої як номери рахунків, ідентифікатори справ або будь-які інші відповідні дані.
Інтеграція з зовнішніми системами: Підключення системи IVR до баз даних або інших програмних систем для доступу або оновлення інформації, виконання дій або спрацювання подій.
У системі VoIP Asterisk ви можете створити IVR за допомогою плану набору (файл extensions.conf
) та різних додатків, таких як Background()
, Playback()
, Read()
та інші. Ці додатки допомагають відтворювати голосові промпти, збирати введення користувача та керувати потоком дзвінка.
Приклад вразливої конфігурації
Попередній приклад, де користувача просять натиснути 1, щоб зателефонувати відділ, 2, щоб зателефонувати в інший, або введіть повний номер розширення, якщо він його знає. Вразливість полягає в тому, що вказана довжина розширення не перевіряється, тому користувач може ввести повний номер під час тайм-ауту 5 секунд, і його буде викликано.
Впровадження розширення
Використання розширення, такого як:
Де ${EXTEN}
- це розширення, яке буде викликане, коли буде введено ext 101, це те, що станеться:
Проте, якщо ${EXTEN}
дозволяє вводити більше, ніж цифри (як у старих версіях Asterisk), зловмисник може ввести 101&SIP123123123
для того, щоб зателефонувати за номером 123123123. І це буде результатом:
Отже, виклик на розширення 101
та 123123123
буде відправлений, і тільки перший отримає виклик... але якщо зловмисник використовує розширення, яке обходить будь-яке збіг, яке виконується, але не існує, він може впровадити виклик лише на бажаний номер.
Витік SIPDigest
Витік SIP Digest - це вразливість, яка впливає на велику кількість SIP-телефонів, включаючи як апаратні, так і програмні IP-телефони, а також адаптери телефонів (VoIP на аналогові). Ця вразливість дозволяє витік відповіді аутентифікації Digest, яка обчислюється з пароля. Після цього стає можливим офлайн атака на пароль і можливе відновлення більшості паролів на основі відповіді на виклик.
**Сценарій вразливості звідси**:
IP-телефон (жертва) слухає порт 5060, приймаючи телефонні дзвінки
Зловмисник відправляє INVITE на IP-телефон
Телефон жертви починає дзвонити, і хтось піднімає трубку і повішає (тому що ніхто не відповідає на телефон на іншому кінці)
Коли телефон повішений, телефон жертви відправляє BYE зловмиснику
Зловмисник видає відповідь 407, яка просить аутентифікації та видає виклик аутентифікації
Телефон жертви надає відповідь на виклик аутентифікації у другому BYE
Зловмисник може тоді виконати атаку методом брутфорс на відповідь на виклик аутентифікації на своїй локальній машині (або розподіленій мережі тощо) та вгадати пароль
sipdigestleak.py з sippts: SipDigestLeak використовує цю вразливість.
Click2Call
Click2Call дозволяє користувачеві веб-сайту (який, наприклад, може бути зацікавлений у продукті) ввести свій телефонний номер, щоб його зателефонували. Потім буде здійснено дзвінок на комерційний номер, і коли він відповість на дзвінок, користувач буде проініційовано і підключено до агента.
Загальний профіль Asterisk для цього виглядає так:
Попередній профіль дозволяє БУДЬ-ЯКІЙ IP-адресі підключатися (якщо відомий пароль).
Для організації дзвінка, як вже зазначено, не потрібні права на читання, і потрібно лише originate в write.
З такими дозволами будь-яка IP-адреса, яка знає пароль, може підключитися та витягнути занадто багато інформації, наприклад:
Більше інформації або дій може бути запитано.
Прослуховування
У Asterisk можна використовувати команду ChanSpy
, вказуючи розширення(я) для моніторингу (або всіх), щоб прослуховувати розмови, які відбуваються. Цю команду потрібно призначити для розширення.
Наприклад, exten => 333,1,ChanSpy('all',qb)
вказує, що якщо ви подзвоните на розширення 333, воно буде моніторити всі
розширення, почне прослуховувати кожну нову розмову (b
) у тихому режимі (q
), оскільки ми не хочемо взаємодіяти з нею. Ви можете переходити від однієї розмови до іншої, натискаючи *
, або позначаючи номер розширення.
Також можна використовувати ExtenSpy
, щоб моніторити лише одне розширення.
Замість прослуховування розмов, можна записувати їх у файли за допомогою розширення, такого як:
Виклики будуть збережені в /tmp
.
Ви також можете навіть зробити Asterisk виконати скрипт, який витікає виклик, коли він закритий.
RTCPBleed
RTCPBleed - це серйозна проблема безпеки, яка впливає на сервери VoIP на основі Asterisk (опубліковано в 2017 році). Уразливість дозволяє трафіку RTP (протокол реального часу), який переносить розмови VoIP, бути перехопленим та перенаправленим ким завгодно в Інтернеті. Це відбувається через те, що трафік RTP обходить аутентифікацію при проходженні через брандмауери NAT (переклад адрес мережі).
Проксі RTP намагаються вирішити обмеження NAT, що впливають на системи RTC, проксіюючи потоки RTP між двома або більше сторін. Коли використовується NAT, програмне забезпечення проксі RTP часто не може покладатися на інформацію про IP та порт RTP, отриману через сигналізацію (наприклад, SIP). Тому декілька проксі RTP реалізували механізм, де такий кортеж IP та порту вивчається автоматично. Це часто робиться шляхом інспектування вхідного трафіку RTP та позначення джерела IP та порту для будь-якого вхідного трафіку RTP як того, на який слід відповісти. Цей механізм, який може називатися "режимом навчання", не використовує жодної форми аутентифікації. Тому зловмисники можуть надсилати трафік RTP на проксі RTP та отримувати проксійований трафік RTP, призначений для дзвінка або отримувача поточного потоку RTP. Ми називаємо цю уразливість RTP Bleed, оскільки вона дозволяє зловмисникам отримувати потоки медіа RTP, які мали бути відправлені законним користувачам.
Ще однією цікавою особливістю проксі RTP та стеків RTP є те, що іноді, навіть якщо вони не вразливі на RTP Bleed, вони будуть приймати, пересилати та/або обробляти пакети RTP з будь-якого джерела. Тому зловмисники можуть надсилати пакети RTP, які можуть дозволити їм впроваджувати свої медіа замість законного. Ми називаємо цей атаку RTP injection, оскільки вона дозволяє впровадження нелегітимних пакетів RTP в існуючі потоки RTP. Ця уразливість може бути виявлена як у проксі RTP, так і в кінцевих точках.
Asterisk та FreePBX традиційно використовували налаштування NAT=yes
, яке дозволяє трафіку RTP обходити аутентифікацію, що потенційно може призвести до відсутності аудіо або однобічного аудіо під час дзвінків.
Для отримання додаткової інформації перегляньте https://www.rtpbleed.com/
rtpbleed.py
від sippts: Виявляє уразливість RTP Bleed, надсилаючи потоки RTP
rtcpbleed.py
з sippts: Виявляє уразливість RTP Bleed, надсилаючи потоки RTP
rtpbleedflood.py
з sippts: Зловживання уразливістю RTP Bleed, надсилаючи потоки RTP
rtpbleedinject.py
з sippts: Зловживання вразливістю RTP Bleed, надсилаючи потоки RTP (з аудіофайлу)
RCE
У Asterisk вам якось вдається додавати правила розширень та перезавантажувати їх (наприклад, вразивши вразливий веб-сервер управління), можливо отримати RCE, використовуючи команду System
.
Існує команда під назвою Shell
, яку можна використовувати замість System
для виконання системних команд у разі необхідності.
Якщо сервер забороняє використання певних символів у команді System
(як у Elastix), перевірте, чи дозволяє веб-сервер створювати файли яким-небудь чином всередині системи (як у Elastix або trixbox), і використовуйте це для створення скрипту задніх воріт, а потім використовуйте System
для виконання цього скрипту.
Цікаві локальні файли та дозволи
sip.conf
-> Містить пароль користувачів SIP.Якщо сервер Asterisk працює від імені root, ви можете скомпрометувати root
Користувач root mysql може не мати жодного пароля.
це може бути використано для створення нового користувача mysql як задніх воріт
FreePBX
amportal.conf
-> Містить пароль адміністратора веб-панелі (FreePBX)FreePBX.conf
-> Містить пароль користувача FreePBXuser, який використовується для доступу до бази данихце може бути використано для створення нового користувача mysql як задніх воріт
Elastix
Elastix.conf
-> Містить кілька паролів у відкритому вигляді, таких як пароль root mysql, пароль IMAPd, пароль веб-адміністратораКілька папок будуть належати скомпрометованому користувачеві asterisk (якщо не працює як root). Цей користувач може читати попередні файли і також керує конфігурацією, тому він може змусити Asterisk завантажувати інші файли з задніми воротами при виконанні.
Впровадження RTP
Можливо вставити .wav
у розмови за допомогою таких інструментів, як rtpinsertsound
(sudo apt install rtpinsertsound
) та rtpmixsound
(sudo apt install rtpmixsound
).
Або ви можете використовувати скрипти з http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ для сканування розмов (rtpscan.pl
), відправки .wav
у розмову (rtpsend.pl
) та вставки шуму у розмову (rtpflood.pl
).
DoS
Є кілька способів спробувати досягти DoS на серверах VoIP.
sipflood.py
з sippts: _SipFlood_ відправляє необмежену кількість повідомлень на цільpython3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
IAXFlooder: DoS протоколу IAX, який використовується Asterisk
inviteflood: Інструмент для здійснення затоплення SIP/SDP INVITE через UDP/IP.
rtpflood: Відправлення кількох добре сформованих пакетів RTP. Потрібно знати порти RTP, які використовуються (спочатку відловлюйте).
SIPp: Дозволяє аналізувати та генерувати трафік SIP. Також може бути використаний для DoS.
SIPsak: SIP швейцарський ніж. Також може бути використаний для здійснення атак SIP.
Fuzzers: protos-sip, voiper.
sipsend.py
з sippts: SIPSend дозволяє нам відправляти призначене SIP повідомлення та аналізувати відповідь.wssend.py
з sippts: WsSend дозволяє нам відправляти призначене SIP повідомлення через WebSockets та аналізувати відповідь.
Вразливості ОС
Найпростіший спосіб встановити програмне забезпечення, таке як Asterisk, - це завантажити розподіл ОС, в якому воно вже встановлено, такий як: FreePBX, Elastix, Trixbox... Проблема полягає в тому, що після того, як вони працюють, системні адміністратори можуть не оновлювати їх знову, і з часом будуть виявлені вразливості.
Посилання
Last updated