Pentesting VoIP
VoIP Основна Інформація
Щоб почати вивчати, як працює VoIP, перегляньте:
Basic VoIP ProtocolsОсновні Повідомлення
Response Codes
1xx—Проміжні відповіді
2xx—Успішні відповіді
3xx—Відповіді на перенаправлення
4xx—Відповіді про помилки клієнта
5xx—Відповіді про збій сервера
6xx—Глобальні відповіді на помилки
VoIP Enumeration
Telephone Numbers
Одним з перших кроків, які може зробити Red Team, є пошук доступних телефонних номерів для зв'язку з компанією, використовуючи інструменти OSINT, пошук в Google або сканування веб-сторінок.
Коли у вас є телефонні номери, ви можете використовувати онлайн-сервіси для ідентифікації оператора:
Знаючи, чи надає оператор послуги VoIP, ви можете визначити, чи використовує компанія VoIP... Більше того, можливо, що компанія не наймала послуги VoIP, але використовує PSTN карти для підключення свого VoIP PBX до традиційної телефонної мережі.
Такі речі, як автоматизовані відповіді з музикою, зазвичай вказують на те, що використовується VoIP.
Google Dorks
OSINT інформація
Будь-яка інша OSINT-енумерація, яка допомагає визначити використовуване VoIP програмне забезпечення, буде корисною для Red Team.
Перерахування мережі
nmap
здатний сканувати UDP-сервіси, але через велику кількість UDP-сервісів, які скануються, це дуже повільно і може бути не дуже точним для такого роду сервісів.
svmap
з SIPVicious (sudo apt install sipvicious
): Знайде SIP-сервіси в зазначеній мережі.svmap
легко заблокувати, оскільки він використовує User-Agentfriendly-scanner
, але ви можете змінити код з/usr/share/sipvicious/sipvicious
і змінити його.
SIPPTS scan
з sippts: SIPPTS сканер - це дуже швидкий сканер для SIP сервісів через UDP, TCP або TLS. Він використовує багатопоточність і може сканувати великі діапазони мереж. Дозволяє легко вказати діапазон портів, сканувати як TCP, так і UDP, використовувати інший метод (за замовчуванням буде використовувати OPTIONS) та вказувати інший User-Agent (і не тільки).
metasploit:
Додаткова Перевірка Мережі
PBX також може відкривати інші мережеві сервіси, такі як:
69/UDP (TFTP): Оновлення прошивки
80 (HTTP) / 443 (HTTPS): Для управління пристроєм з вебу
389 (LDAP): Альтернатива для зберігання інформації про користувачів
3306 (MySQL): База даних MySQL
5038 (Manager): Дозволяє використовувати Asterisk з інших платформ
5222 (XMPP): Повідомлення за допомогою Jabber
5432 (PostgreSQL): База даних PostgreSQL
І інші...
Перевірка Методів
Можливо знайти які методи доступні для використання в PBX, використовуючи SIPPTS enumerate
з sippts
Аналіз відповідей сервера
Дуже важливо аналізувати заголовки, які сервер відправляє нам у відповідь, залежно від типу повідомлення та заголовків, які ми відправляємо. З SIPPTS send
з sippts ми можемо надсилати персоналізовані повідомлення, маніпулюючи всіма заголовками, та аналізувати відповідь.
Також можливо отримати дані, якщо сервер використовує веб-сокети. З SIPPTS wssend
з sippts ми можемо надсилати персоналізовані WS повідомлення.
Extension Enumeration
Розширення в системі PBX (Приватна Автоматична Обмінна Станція) відносяться до унікальних внутрішніх ідентифікаторів, призначених окремим телефонним лініям, пристроям або користувачам в організації чи бізнесі. Розширення дозволяють ефективно маршрутизувати дзвінки в межах організації, без необхідності в окремих зовнішніх телефонних номерах для кожного користувача або пристрою.
svwar
з SIPVicious (sudo apt install sipvicious
):svwar
є безкоштовним сканером ліній розширення SIP PBX. За своєю суттю він працює подібно до традиційних вордрайверів, вгадуючи діапазон розширень або заданий список розширень.
SIPPTS exten
з sippts: SIPPTS exten ідентифікує розширення на SIP сервері. Sipexten може перевіряти великі мережі та діапазони портів.
metasploit: Ви також можете перерахувати розширення/імена користувачів за допомогою metasploit:
enumiax
(apt install enumiax
): enumIAX є перебірником імен користувачів протоколу Inter Asterisk Exchange. enumIAX може працювати в двох різних режимах: послідовне вгадування імен користувачів або атака за словником.
VoIP Атаки
Password Brute-Force - онлайн
Виявивши PBX та деякі розширення/імена користувачів, Червона команда може спробувати автентифікуватися через метод REGISTER
до розширення, використовуючи словник загальних паролів для брутфорсу автентифікації.
Зверніть увагу, що ім'я користувача може бути таким же, як і розширення, але ця практика може варіюватися в залежності від системи PBX, її конфігурації та уподобань організації...
Якщо ім'я користувача не таке ж, як і розширення, вам потрібно буде з'ясувати ім'я користувача для брутфорсу.
svcrack
з SIPVicious (sudo apt install sipvicious
): SVCrack дозволяє зламати пароль для конкретного імені користувача/розширення на PBX.
SIPPTS rcrack
з sippts: SIPPTS rcrack - це віддалений зломувач паролів для SIP-сервісів. Rcrack може перевіряти паролі для кількох користувачів на різних IP-адресах і діапазонах портів.
Metasploit:
VoIP Sniffing
Якщо ви знайдете VoIP обладнання всередині Open Wifi network, ви зможете перехопити всю інформацію. Більше того, якщо ви знаходитесь у більш закритій мережі (підключеній через Ethernet або захищений Wifi), ви зможете виконати MitM атаки, такі як ARPspoofing між PBX та шлюзом, щоб перехопити інформацію.
Серед мережевої інформації ви можете знайти веб-дані для управління обладнанням, розширення користувачів, ім'я користувача, IP адреси, навіть хешовані паролі та RTP пакети, які ви можете відтворити, щоб почути розмову, і більше.
Щоб отримати цю інформацію, ви можете використовувати інструменти, такі як Wireshark, tcpdump... але спеціально створений інструмент для перехоплення VoIP розмов - це ucsniff.
Зверніть увагу, що якщо TLS використовується в SIP комунікації, ви не зможете бачити SIP комунікацію в чистому вигляді. Те ж саме станеться, якщо використовується SRTP та ZRTP, RTP пакети не будуть у відкритому тексті.
SIP credentials (Password Brute-Force - offline)
Перегляньте цей приклад, щоб краще зрозуміти SIP REGISTER комунікацію, щоб дізнатися, як надсилаються облікові дані.
sipdump
&sipcrack
, частина sipcrack (apt-get install sipcrack
): Ці інструменти можуть екстрагувати з pcap digest аутентифікації в рамках SIP протоколу та зламувати їх.
SIPPTS dump
з sippts: SIPPTS dump може витягувати аутентифікації digest з файлу pcap.
SIPPTS dcrack
з sippts: SIPPTS dcrack - це інструмент для злому автентифікацій digest, отриманих за допомогою SIPPTS dump.
SIPPTS tshark
з sippts: SIPPTS tshark витягує дані протоколу SIP з файлу PCAP.
DTMF коди
Не тільки SIP облікові дані можна знайти в мережевому трафіку, також можливо знайти DTMF коди, які використовуються, наприклад, для доступу до голосової пошти. Ці коди можна відправляти в INFO SIP повідомленнях, в аудіо або всередині RTP пакетів. Якщо коди знаходяться всередині RTP пакетів, ви можете вирізати цю частину розмови і використовувати інструмент multimo для їх витягнення:
Безкоштовні дзвінки / Неправильні налаштування з'єднань Asterisk
В Asterisk можливо дозволити з'єднання з конкретної IP-адреси або з будь-якої IP-адреси:
Якщо вказана IP-адреса, хост не потрібно буде надсилати REGISTER запити час від часу (в пакеті REGISTER надсилається час життя, зазвичай 30 хвилин, що означає, що в іншому випадку телефон повинен буде РЕГІСТРУВАТИСЯ кожні 30 хвилин). Однак, йому потрібно мати відкриті порти, що дозволяють з'єднання з VoIP сервером для прийому дзвінків.
Щоб визначити користувачів, їх можна визначити як:
type=user
: Користувач може отримувати дзвінки лише як користувач.type=friend
: Можливо здійснювати дзвінки як партнер і отримувати їх як користувач (використовується з розширеннями)type=peer
: Можливо надсилати та отримувати дзвінки як партнер (SIP-транки)
Також можливо встановити довіру з використанням змінної insecure:
insecure=port
: Дозволяє з'єднання партнерів, перевірених за IP.insecure=invite
: Не вимагає аутентифікації для INVITE повідомленьinsecure=port,invite
: Обидва
Коли використовується type=friend
, значення змінної host не буде використано, тому якщо адміністратор неправильно налаштує SIP-транк, будь-хто зможе підключитися до нього.
Наприклад, ця конфігурація буде вразливою:
host=10.10.10.10
insecure=port,invite
type=friend
Безкоштовні дзвінки / Неправильні налаштування контексту Asterisk
У Asterisk контекст - це іменований контейнер або секція в плані набору, яка групує пов'язані розширення, дії та правила. План набору є основним компонентом системи Asterisk, оскільки він визначає як обробляються та маршрутизуються вхідні та вихідні дзвінки. Контексти використовуються для організації плану набору, управління контролем доступу та забезпечення розділення між різними частинами системи.
Кожен контекст визначається в конфігураційному файлі, зазвичай у файлі extensions.conf
. Контексти позначаються квадратними дужками, з іменем контексту, що міститься всередині них. Наприклад:
Всередині контексту ви визначаєте розширення (шаблони набраних номерів) та асоціюєте їх з серією дій або додатків. Ці дії визначають, як обробляється дзвінок. Наприклад:
Цей приклад демонструє простий контекст під назвою "my_context" з розширенням "100". Коли хтось набирає 100, дзвінок буде прийнято, буде програно вітальне повідомлення, а потім дзвінок буде завершено.
Це інший контекст, який дозволяє дзвонити на будь-який інший номер:
Якщо адміністратор визначає default context як:
Будь-хто зможе використовувати сервер для дзвінків на будь-який інший номер (і адміністратор сервера заплатить за дзвінок).
Більше того, за замовчуванням файл sip.conf
містить allowguest=true
, тоді будь-який атакуючий без автентифікації зможе дзвонити на будь-який інший номер.
SIPPTS invite
з sippts: SIPPTS invite перевіряє, чи PBX сервер дозволяє нам здійснювати дзвінки без автентифікації. Якщо SIP сервер має неправильну конфігурацію, він дозволить нам здійснювати дзвінки на зовнішні номери. Це також може дозволити нам переадресувати дзвінок на другий зовнішній номер.
Наприклад, якщо ваш сервер Asterisk має погану конфігурацію контексту, ви можете приймати запит INVITE без авторизації. У цьому випадку атакуючий може здійснювати дзвінки, не знаючи жодного користувача/пароля.
Безкоштовні дзвінки / Неправильно налаштовані IVRS
IVRS означає Систему інтерактивної голосової відповіді, технологію телефонії, яка дозволяє користувачам взаємодіяти з комп'ютеризованою системою через голосові або тональні введення. IVRS використовується для створення автоматизованих систем обробки дзвінків, які пропонують ряд функцій, таких як надання інформації, маршрутизація дзвінків та захоплення введення користувача.
IVRS у VoIP системах зазвичай складається з:
Голосових підказок: Попередньо записані аудіоповідомлення, які направляють користувачів через варіанти меню IVR та інструкції.
DTMF (Dual-Tone Multi-Frequency) сигналізація: Тональні введення, що генеруються натисканням клавіш на телефоні, які використовуються для навігації через меню IVR та надання введення.
Маршрутизація дзвінків: Направлення дзвінків до відповідного призначення, такого як конкретні відділи, агенти або розширення на основі введення користувача.
Захоплення введення користувача: Збір інформації від абонентів, такої як номери рахунків, ID справ або будь-які інші відповідні дані.
Інтеграція з зовнішніми системами: Підключення системи IVR до баз даних або інших програмних систем для доступу або оновлення інформації, виконання дій або ініціювання подій.
У системі VoIP Asterisk ви можете створити IVR, використовуючи план набору (extensions.conf
файл) та різні програми, такі як Background()
, Playback()
, Read()
та інші. Ці програми допомагають вам відтворювати голосові підказки, захоплювати введення користувача та контролювати потік дзвінків.
Приклад вразливої конфігурації
Попередній приклад, де користувача просять натиснути 1, щоб зателефонувати в відділ, 2, щоб зателефонувати в інший, або повний номер, якщо він його знає. Вразливість полягає в тому, що вказана довжина номера не перевіряється, тому користувач може ввести 5-секундний тайм-аут повного номера, і він буде набраний.
Впровадження номера
Використовуючи номер, такий як:
Де ${EXTEN}
є внутрішнім номером, який буде викликаний, коли введено ext 101, це те, що станеться:
Однак, якщо ${EXTEN}
дозволяє вводити більше ніж цифри (як у старіших версіях Asterisk), зловмисник може ввести 101&SIP123123123
, щоб зателефонувати на номер 123123123. І це буде результат:
Тому дзвінок на розширення 101
та 123123123
буде надіслано, і лише перший, хто отримав дзвінок, буде встановлено... але якщо зловмисник використовує розширення, яке обходить будь-яке зіставлення, яке виконується, але не існує, він може впровадити дзвінок лише на бажаний номер.
Уразливість SIPDigestLeak
Уразливість SIP Digest Leak впливає на велику кількість SIP телефонів, включаючи як апаратні, так і програмні IP телефони, а також телефонні адаптери (VoIP до аналогових). Уразливість дозволяє витоку відповіді на аутентифікацію Digest, яка обчислюється з пароля. Офлайн-атака на пароль стає можливою і може відновити більшість паролів на основі відповіді на виклик.
**Сценарій уразливості звідси**:
IP телефон (жертва) слухає на будь-якому порту (наприклад: 5060), приймаючи телефонні дзвінки
Зловмисник надсилає INVITE на IP телефон
Телефон жертви починає дзвонити, і хтось піднімає слухавку і кладе трубку (оскільки ніхто не відповідає на телефон на іншому кінці)
Коли телефон кладе трубку, телефон жертви надсилає BYE зловмиснику
Зловмисник видає відповідь 407, яка питає про аутентифікацію і видає виклик на аутентифікацію
Телефон жертви надає відповідь на виклик аутентифікації в другому BYE
Зловмисник може тоді здійснити атаку методом грубої сили на відповідь на виклик на своєму локальному комп'ютері (або розподіленій мережі тощо) і вгадати пароль
SIPPTS leak з sippts: SIPPTS leak експлуатує уразливість SIP Digest Leak, яка впливає на велику кількість SIP телефонів. Вихідні дані можна зберегти у форматі SipCrack для брутфорсу за допомогою SIPPTS dcrack або інструменту SipCrack.
Click2Call
Click2Call дозволяє веб-користувачу (який, наприклад, може бути зацікавлений у продукті) ввести свій номер телефону, щоб отримати дзвінок. Потім буде здійснено дзвінок на комерційний номер, і коли він підніме слухавку, користувач буде зателефонований і з'єднаний з агентом.
Звичайний профіль Asterisk для цього виглядає так:
Попередній профіль дозволяє будь-якій IP-адресі підключатися (якщо відома пароль).
Для організації дзвінка, як зазначено раніше, необхідні права на читання і тільки originate в запису.
З цими правами будь-яка IP-адреса, що знає пароль, може підключитися і витягнути занадто багато інформації, як:
Більше інформації або дій може бути запитано.
Прослуховування
В Asterisk можливо використовувати команду ChanSpy
, вказуючи розширення(я) для моніторингу (або всі з них), щоб чути розмови, які відбуваються. Цю команду потрібно призначити розширенню.
Наприклад, exten => 333,1,ChanSpy('all',qb)
вказує, що якщо ви зателефонуєте на розширення 333, воно буде моніторити всі
розширення, почне слухати щоразу, коли починається нова розмова (b
) в тихому режимі (q
), оскільки ми не хочемо взаємодіяти з нею. Ви можете переходити від однієї розмови до іншої, натискаючи *
, або набираючи номер розширення.
Також можливо використовувати ExtenSpy
для моніторингу лише одного розширення.
Замість того, щоб слухати розмови, можливо записувати їх у файли, використовуючи таке розширення:
Дзвінки будуть збережені в /tmp
.
Ви також можете змусити Asterisk виконати скрипт, який витече дзвінок після його закриття.
Уразливість RTCPBleed
RTCPBleed є серйозною проблемою безпеки, що впливає на VoIP-сервери на базі Asterisk (опубліковано в 2017 році). Уразливість дозволяє RTP (Real Time Protocol) трафіку, який несе VoIP-розмови, перехоплюватися та перенаправлятися будь-ким в Інтернеті. Це відбувається тому, що RTP-трафік обходить аутентифікацію при навігації через NAT (Network Address Translation) брандмауери.
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/
SIPPTS rtpbleed
з sippts: SIPPTS rtpbleed виявляє уразливість RTP Bleed, надсилаючи RTP-потоки.
SIPPTS rtcpbleed
з sippts: SIPPTS rtcpbleed виявляє вразливість RTP Bleed, надсилаючи RTCP потоки.
SIPPTS rtpbleedflood
з sippts: SIPPTS rtpbleedflood експлуатує вразливість RTP Bleed, надсилаючи RTP потоки.
SIPPTS rtpbleedinject
з sippts: SIPPTS rtpbleedinject експлуатує вразливість RTP Bleed, інжектуючи аудіофайл (формат WAV).
RCE
В Asterisk ви якимось чином можете додати правила розширення та перезавантажити їх (наприклад, зламавши вразливий веб-менеджер сервер), можливо отримати RCE, використовуючи команду System
.
There is command called Shell
that could be used instead of System
to execute system commands if necessary.
Якщо сервер не дозволяє використання певних символів у команді System
(як у Elastix), перевірте, чи дозволяє веб-сервер якось створювати файли всередині системи (як у Elastix або trixbox), і використайте це, щоб створити скрипт з бекдором, а потім використайте System
для виконання цього скрипту.
Цікаві локальні файли та дозволи
sip.conf
-> Містить пароль користувачів SIP.Якщо сервер Asterisk працює під root, ви можете скомпрометувати root.
mysql root user може не мати жодного пароля.
це може бути використано для створення нового користувача mysql як бекдор.
FreePBX
amportal.conf
-> Містить пароль адміністратора веб-панелі (FreePBX).FreePBX.conf
-> Містить пароль користувача FreePBXuser, який використовується для доступу до бази даних.це може бути використано для створення нового користувача mysql як бекдор.
Elastix
Elastix.conf
-> Містить кілька паролів у відкритому тексті, таких як пароль mysql root, пароль IMAPd, пароль веб-адміністратора.Кілька папок належатимуть скомпрометованому користувачу asterisk (якщо не працює під root). Цей користувач може читати попередні файли та також контролює конфігурацію, тому він може змусити Asterisk завантажувати інші скомпрометовані бінарні файли під час виконання.
RTP Injection
Можливо вставити .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 серверах.
SIPPTS flood
з sippts**: SIPPTS flood надсилає необмежену кількість повідомлень до цілі.sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
з sippts**: SIPPTS ping робить SIP ping, щоб перевірити час відповіді сервера.sippts ping -i 10.10.0.10
IAXFlooder: DoS IAX протокол, що використовується Asterisk.
inviteflood: Інструмент для виконання SIP/SDP INVITE повідомлень на UDP/IP.
rtpflood: Надсилає кілька добре сформованих RTP пакетів. Потрібно знати RTP порти, які використовуються (спочатку прослухайте).
SIPp: Дозволяє аналізувати та генерувати SIP трафік, тому його також можна використовувати для DoS.
SIPsak: SIP швейцарський ніж. Також може бути використаний для виконання SIP атак.
Fuzzers: protos-sip, voiper.
OS Vulnerabilities
Найпростіший спосіб встановити програмне забезпечення, таке як Asterisk, - це завантажити дистрибутив ОС, який вже має його встановленим, наприклад: FreePBX, Elastix, Trixbox... Проблема з цими дистрибутивами полягає в тому, що, як тільки вони запрацюють, системні адміністратори можуть більше не оновлювати їх, і вразливості будуть виявлені з часом.