Pentesting VoIP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Отримайте перспективу хакера щодо ваших веб-додатків, мережі та хмари
Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Щоб почати вивчати, як працює VoIP, перегляньте:
1xx—Проміжні відповіді
2xx—Успішні відповіді
3xx—Відповіді на перенаправлення
4xx—Відповіді про помилки клієнта
5xx—Відповіді про збій сервера
6xx—Глобальні відповіді на помилки
Одним з перших кроків, які може зробити Red Team, є пошук доступних телефонних номерів для зв'язку з компанією, використовуючи інструменти OSINT, пошук в Google або сканування веб-сторінок.
Коли у вас є телефонні номери, ви можете використовувати онлайн-сервіси для ідентифікації оператора:
Знаючи, чи надає оператор послуги VoIP, ви можете визначити, чи використовує компанія VoIP... Більше того, можливо, що компанія не наймала послуги VoIP, але використовує PSTN карти для підключення свого власного VoIP PBX до традиційної телефонної мережі.
Такі речі, як автоматизовані відповіді з музикою, зазвичай вказують на те, що використовується VoIP.
Будь-яка інша OSINT-енумерація, яка допомагає визначити використовуване програмне забезпечення VoIP, буде корисною для Red Team.
nmap
здатний сканувати UDP-сервіси, але через велику кількість UDP-сервісів, які скануються, це дуже повільно і може бути не дуже точним для такого роду сервісів.
svmap
з SIPVicious (sudo apt install sipvicious
): Знайде SIP-сервіси в зазначеній мережі.
svmap
легко заблокувати, оскільки він використовує User-Agent friendly-scanner
, але ви можете змінити код з /usr/share/sipvicious/sipvicious
і змінити його.
SIPPTS scan
from 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 повідомлення.
Розширення в системі 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 може працювати в двох різних режимах: послідовне вгадування імен користувачів або атака за словником.
Виявивши PBX та деякі розширення/імена користувачів, Червона команда може спробувати автентифікуватися через метод REGISTER
до розширення, використовуючи словник загальних паролів для брутфорсу автентифікації.
Зверніть увагу, що ім'я користувача може бути таким же, як і розширення, але ця практика може варіюватися в залежності від системи PBX, її конфігурації та уподобань організації...
Якщо ім'я користувача не таке ж, як і розширення, вам потрібно буде з'ясувати ім'я користувача для брутфорсу.
svcrack
з SIPVicious (sudo apt install sipvicious
): SVCrack дозволяє зламати пароль для конкретного імені користувача/розширення на PBX.
SIPPTS rcrack
з sippts: SIPPTS rcrack - це віддалений злому паролів для SIP-сервісів. Rcrack може перевіряти паролі для кількох користувачів на різних IP-адресах і діапазонах портів.
Metasploit:
Якщо ви знайдете VoIP обладнання всередині Open Wifi network, ви зможете перехопити всю інформацію. Більше того, якщо ви знаходитесь у більш закритій мережі (підключеній через Ethernet або захищений Wifi), ви зможете виконати MitM атаки, такі як ARPspoofing між PBX та шлюзом, щоб перехопити інформацію.
Серед мережевої інформації ви можете знайти веб-облікові дані для управління обладнанням, розширення користувачів, ім'я користувача, IP адреси, навіть хешовані паролі та RTP пакети, які ви можете відтворити, щоб почути розмову, і більше.
Щоб отримати цю інформацію, ви можете використовувати інструменти, такі як Wireshark, tcpdump... але спеціально створений інструмент для перехоплення VoIP розмов - це ucsniff.
Зверніть увагу, що якщо TLS використовується в SIP комунікації, ви не зможете бачити SIP комунікацію в чистому вигляді. Те ж саме станеться, якщо використовується SRTP та ZRTP, RTP пакети не будуть у відкритому тексті.
Перегляньте цей приклад, щоб краще зрозуміти 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.
Не тільки SIP облікові дані можна знайти в мережевому трафіку, також можливо знайти DTMF коди, які використовуються, наприклад, для доступу до голосової пошти. Ці коди можна відправляти в INFO SIP повідомленнях, в аудіо або всередині RTP пакетів. Якщо коди знаходяться всередині RTP пакетів, ви можете вирізати цю частину розмови і використовувати інструмент multimo для їх витягнення:
В 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, оскільки він визначає як обробляються та маршрутизуються вхідні та вихідні дзвінки. Контексти використовуються для організації плану набору, управління контролем доступу та забезпечення розділення між різними частинами системи.
Кожен контекст визначається в конфігураційному файлі, зазвичай у файлі extensions.conf
. Контексти позначаються квадратними дужками, з іменем контексту, що міститься всередині них. Наприклад:
Всередині контексту ви визначаєте розширення (шаблони набраних номерів) та асоціюєте їх з серією дій або додатків. Ці дії визначають, як обробляється дзвінок. Наприклад:
Цей приклад демонструє простий контекст під назвою "my_context" з розширенням "100". Коли хтось набирає 100, дзвінок буде прийнято, буде програно вітальне повідомлення, а потім дзвінок буде завершено.
Це інший контекст, який дозволяє дзвонити на будь-який інший номер:
Якщо адміністратор визначає default context як:
Будь-хто зможе використовувати сервер для дзвінків на будь-який інший номер (і адміністратор сервера заплатить за дзвінок).
Більше того, за замовчуванням файл sip.conf
містить allowguest=true
, тоді будь-який атакуючий без автентифікації зможе дзвонити на будь-який інший номер.
SIPPTS invite
з sippts: SIPPTS invite перевіряє, чи PBX сервер дозволяє нам здійснювати дзвінки без автентифікації. Якщо SIP сервер має неправильну конфігурацію, він дозволить нам здійснювати дзвінки на зовнішні номери. Це також може дозволити нам переадресувати дзвінок на другий зовнішній номер.
Наприклад, якщо ваш сервер Asterisk має погану конфігурацію контексту, ви можете приймати запит INVITE без авторизації. У цьому випадку атакуючий може здійснювати дзвінки, не знаючи жодного логіна/пароля.
IVRS означає Систему інтерактивної голосової відповіді, технологію телефонії, яка дозволяє користувачам взаємодіяти з комп'ютеризованою системою через голосові або тональні введення. IVRS використовується для створення автоматизованих систем обробки дзвінків, які пропонують ряд функцій, таких як надання інформації, маршрутизація дзвінків та захоплення введення користувача.
IVRS у VoIP системах зазвичай складається з:
Голосових підказок: Попередньо записані аудіоповідомлення, які направляють користувачів через меню IVR та інструкції.
DTMF (Двотональне багаточастотне) сигналізування: Тональні введення, що генеруються натисканням клавіш на телефоні, які використовуються для навігації через меню IVR та надання введення.
Маршрутизація дзвінків: Направлення дзвінків до відповідного призначення, такого як конкретні відділи, агенти або розширення на основі введення користувача.
Захоплення введення користувача: Збір інформації від абонентів, такої як номери рахунків, ідентифікатори справ або будь-які інші відповідні дані.
Інтеграція з зовнішніми системами: Підключення системи IVR до баз даних або інших програмних систем для доступу або оновлення інформації, виконання дій або ініціювання подій.
У системі Asterisk VoIP ви можете створити IVR, використовуючи план набору (extensions.conf
файл) та різні програми, такі як Background()
, Playback()
, Read()
та інші. Ці програми допомагають вам відтворювати голосові підказки, захоплювати введення користувача та контролювати потік дзвінків.
Попередній приклад, де користувача просять натиснути 1, щоб зателефонувати в відділ, 2, щоб зателефонувати в інший, або повний номер, якщо він його знає. Вразливість полягає в тому, що вказана довжина номера не перевіряється, тому користувач може ввести 5-секундний тайм-аут, і буде набрано повний номер.
Використовуючи номер, такий як:
Де ${EXTEN}
є внутрішнім номером, який буде викликаний, коли введено ext 101, це те, що станеться:
Однак, якщо ${EXTEN}
дозволяє вводити більше ніж цифри (як у старіших версіях Asterisk), зловмисник може ввести 101&SIP123123123
, щоб зателефонувати на номер 123123123. І це буде результат:
Тому дзвінок на розширення 101
та 123123123
буде надіслано, і лише перший, хто отримає дзвінок, буде встановлено... але якщо зловмисник використовує розширення, яке обходить будь-яке співпадіння, яке виконується, але не існує, він може інжектувати дзвінок лише на бажаний номер.
Уразливість 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 дозволяє веб-користувачу (який, наприклад, може бути зацікавлений у продукті) ввести свій номер телефону, щоб отримати дзвінок. Потім буде здійснено дзвінок на комерційний номер, і коли він підніме слухавку, користувач буде зателефонований і з'єднаний з агентом.
Звичайний профіль Asterisk для цього виглядає так:
Попередній профіль дозволяє будь-якій IP-адресі підключатися (якщо відома пароль).
Для організації дзвінка, як зазначено раніше, необхідні права на читання і тільки originate в запису.
З цими правами будь-яка IP-адреса, що знає пароль, може підключитися і витягнути занадто багато інформації, як:
Більше інформації або дій може бути запитано.
В Asterisk можливо використовувати команду ChanSpy
, вказуючи розширення(я) для моніторингу (або всі з них), щоб чути розмови, які відбуваються. Цю команду потрібно призначити розширенню.
Наприклад, exten => 333,1,ChanSpy('all',qb)
вказує, що якщо ви зателефонуєте на розширення 333, воно буде моніторити всі
розширення, почне слухати щоразу, коли починається нова розмова (b
) в тихому режимі (q
), оскільки ми не хочемо взаємодіяти з цим. Ви можете переходити від однієї розмови до іншої, натискаючи *
, або набираючи номер розширення.
Також можливо використовувати ExtenSpy
для моніторингу лише одного розширення.
Замість того, щоб слухати розмови, можливо записувати їх у файли, використовуючи таке розширення:
Дзвінки будуть збережені в /tmp
.
Ви також можете змусити Asterisk виконати скрипт, який витече дзвінок після його завершення.
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).
В Asterisk ви якимось чином можете додати правила розширення та перезавантажити їх (наприклад, зламавши вразливий веб-менеджер сервер), можливо отримати RCE, використовуючи команду System
.
There is command called Shell
that could be used instead of System
to execute system commands if necessary.
If the server is дозволяє використання певних символів в команді System
(як в Elastix), перевірте, чи веб-сервер дозволяє створювати файли якимось чином всередині системи (як в Elastix або trixbox), і використайте це, щоб створити скрипт з бекдором, а потім використайте System
для виконання цього скрипту.
sip.conf
-> Містить пароль користувачів SIP.
If the Asterisk server is running as root, you could compromise root
mysql root user might doesn't have any password.
this could be used to create a new mysql user as backdoor
FreePBX
amportal.conf
-> Містить пароль адміністратора веб-панелі (FreePBX)
FreePBX.conf
-> Містить пароль користувача FreePBXuser, який використовується для доступу до бази даних
this could be used to create a new mysql user as backdoor
Elastix
Elastix.conf
-> Містить кілька паролів у відкритому тексті, таких як пароль mysql root, пароль IMAPd, пароль веб-адміністратора
Кілька папок належатимуть скомпрометованому користувачу asterisk (якщо не працює як root). Цей користувач може читати попередні файли і також контролює конфігурацію, тому він може змусити Asterisk завантажувати інші скомпрометовані бінарні файли при виконанні.
It's possible to insert a .wav
in converstions using tools such as rtpinsertsound
(sudo apt install rtpinsertsound
) and rtpmixsound
(sudo apt install rtpmixsound
).
Or you could use the scripts from http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ to scan conversations (rtpscan.pl
), send a .wav
to a conversation (rtpsend.pl
) and insert noise in a conversation (rtpflood.pl
).
There are several ways to try to achieve DoS in VoIP servers.
SIPPTS flood
from sippts**: SIPPTS flood sends unlimited messages to the target.
sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
from sippts**: SIPPTS ping makes a SIP ping to see the server response time.
sippts ping -i 10.10.0.10
IAXFlooder: DoS IAX protocol used by Asterisk
inviteflood: A tool to perform SIP/SDP INVITE message flooding over UDP/IP.
rtpflood: Send several well formed RTP packets. Its needed to know the RTP ports that are being used (sniff first).
SIPp: Allows to analyze and generate SIP traffic. so it can be used to DoS also.
SIPsak: SIP swiss army knife. Can also be used to perform SIP attacks.
Fuzzers: protos-sip, voiper.
The easiest way to install a software such as Asterisk is to download an OS distribution that has it already installed, such as: FreePBX, Elastix, Trixbox... The problem with those is that once it's working sysadmins might not update them again and вразливості будуть виявлені з часом.
Get a hacker's perspective on your web apps, network, and cloud
Find and report critical, exploitable vulnerabilities with real business impact. Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)