Получение доступа к использованию аккаунтов VoIP-шлюзов.
За последние несколько лет широкое распространение получила IP-телефония, причём не только в специализированных программах наподобие Skype, TeamSpeak, Ventrilo и т.п., но и в IP-телефонах. Технология передачи информации в общем виде одинакова и в обоих вышеуказанных случаях.
Для работы с VoIP чаще всего используются следующие протоколы:
- SIP — протокол сеансового установления связи, обеспечивающий передачу голоса, видео, сообщений систем мгновенного обмена сообщений и произвольной нагрузки, для сигнализации обычно использует порт 5060 UDP. Поддерживает контроль присутствия.
- H.323 — протокол, более привязанный к системам традиционной телефонии, чем SIP, сигнализация по порту 1720 TCP, и 1719 TCP для регистрации терминалов на гейткипере.
- IAX2 — через 4569 UDP-порт и сигнализация, и медиатрафик.
- MGCP (Media Gateway Control Protocol) — протокол управления медиашлюзами.
- Megaco/H.248 — протокол управления медиашлюзами, развитие MGCP.
- SIGTRAN — протокол тунеллирования PSTN сигнализации ОКС-7 через IP на программный коммутатор (SoftSwitch).
- SCTP (Stream Control Transmission Protocol) — протокол для организации гарантированной доставки пакетов в IP-сетях.
- SGCP
- SCCP (Skinny Call Control Protocol) — закрытый протокол управления терминалами (IP-телефонами и медиашлюзами) в продуктах компании Cisco.
- Unistim — закрытый протокол передачи сигнального трафика в продуктах компании Nortel.
Существует схема, позволяющая получить данные о номерах абонентов и типах их авторизации на некоторых VoIP-шлюзах и использовать их для совершения звонков с этих номеров. Суть схемы следующая:
- Сканирование определённой подсети на наличие VoIP-шлюзов.
- Получение данных о VoIP-шлюзах: адрес шлюза, тип программного обеспечения шлюза и тип аппаратного обеспечения шлюза (тип маршрутизатора).
- Попытка получить номера абонентов и типы их авторизации от всех или некоторых полученных в пункте 2 шлюзов.
- Поиск номеров абонентов, для использования которых не требуется авторизация (тип авторизации - noauth). В случае, если таковых не имеется, взлом пароля авторизации (по словарю или bruteforce-атакой).
- Если предыдущий пункт был реализован успешно, то подстановка полученного номера (это число от 100 до 999) и пароля (в случае, если для данного номера тип авторизации отличен от noauth) в клиентскую программу (например X-Lite) и подключение через неё к шлюзу, с которого были взяты подставляемые данные.
- Пакет утилит под названием Sipvicious (ссылка на скачивание).
- Реализацию Python 2.6.1 (ссылка на скачивание). Версия должна быть именно 2.6, так как на некоторых более поздних версиях Python-скрипты из Sipvicious выполняются с ошибками.
- Программа X-Lite (ссылка на скачивание).
- Большинство шлюзов сильно защищены и в них не всегда можно успешно попасть с помощью Sipvicious.
- Настоятельно рекомендуется перед выполнением всех описываемых ниже действий построить и включить цепочку прокси серверов (подробнее в статье "Построение и использование цепочек SOCKS-proxy").
- Желательно проверить местонахождение шлюзов с помощью многочисленных Интерет-сервисов по нахождению местоположения сервера по IP-адресу и пытаться извлечь данные из шлюзов, находящихся за рубежом.
- Извлечь данные успешно удаётся, как правило, лишь из 15-30% шлюзов.
Запуск командной строки (открыть меню "Пуск", затем "Выполнить", в строке ввести "cmd.exe"). Далее нужно выбрать диапазон адресов, сканирование которых будет осуществляться. Это может быть либо случайный диапазон адресов, либо диапазон адресов, связанный с определённым адресом, то есть при наличии адреса a.b.c.d сканирование диапазона a.b.1.1-a.b.255.255. Чем больше диапазон адресов, тем больше времени затрачивается на сканирование. К примеру, для сканирования диапазона вида a.b.1.1-a.b.255.255, в среднем, необходимо от 3 до 10 минут. Если диапазон выбран, то можно приступать к сканированию. Для этого нужно перейти в директорию, где находятся все файлы, необходимые для работы Sipvicious. Например, если работа в командной строке выполняется в директории C:\Users\user, то папку с файлами Sipvicious (здесь и далее эта папка будет называться sipvicious (примечание)) можно перенести в C:\Users\user и перейти в папку sipvicious с помощью команды cd sipvicious. Далее надо выполнить команду следующего вида:
svmap.py a.b.1.1-a.b.255.255>logs.txt
Начнётся выполнение скрипта svmap.py из пакета Sipvicious. Будет выполнено сканирование диапазона адресов a.b.1.1-a.b.255.255 на наличие VoIP-шлюзов и данные будут занесены в созданный файл logs.txt. При необходимости вывода данных не в файл, а на экран часть строки >logs.txt должна отсутствовать. Однако целесообразнее выводить получаемые данные в текстовый файл в связи с последующим заполнением экрана другими строками. В случае успеха в файле logs.txt будет информация приблизительно такого вида (Рисунок 1):
Рисунок 1. Содержимое файла logs.txt.
В колонке SIP Device представлены адреса VoIP-шлюзов. В колонке User Agent выведено программное обеспечение, отвечающее за работу соответствующего шлюза. В колонке Fingerprint представлены соответствующее шлюзам аппаратное обеспечение (обычно это типы маршрутизаторов). На этом этапе первый и второй пункты схемы выполнены.
Затем следует сканирование полученных адресов шлюзов на наличие данных о подключённых абонентах и попытка извлечения этих данных. Для этого в командной строке вводится команда следующего вида:
svwar.py -e100-999 a.b.x.y>auth_log.txt
Начнётся выполнение скрипта svwar.py из пакета Sipvicious. Будет выполнена попытка извлечения данных (номера и типа авторизации) из шлюза a.b.x.y в файл auth_log.txt. В синтаксисе команды -e100-999 означает, что ищутся номера с 100 по 999. При необходимости может сканироваться любой другой диапазон, но он должен находится на отрезке от 100 до 999. Иногда может понадобится применить ключ --force. Чаще всего это необходимо, если при выполнении команды без этого ключа скрипт вывел рекомендацию использовать этот ключ. Он необходим для попытки "силового" извлечения данных, обходя первичную авторизацию для доступа к маршрутизатору. При этом команда должна иметь такой вид:
svwar.py --force -e100-999 a.b.x.y>auth_log.txt
Тогда, возможно, удастся извлечь нужные данные. После всего этого лог-файл будет выглядеть приблизительно так (Рисунок 2):
Рисунок 2. Содержимое лог-файла с номерами абонентов и типами их авторизации.
В колонке Extension находятся номера абонентов, в колонке Authentification - типы авторизации соответствующих номеров. Стоит отметить, что существует три основных типа авторизации: reqauth - необходима авторизация, noauth - возможен вход без авторизации, werid - авторизация, скорее всего, необходима, но невозможно определить точно схему авторизации. Самым лучшим результатом является нахождение номера абонента, для которого тип авторизации - noauth. Однако это бывает очень редко и чаще всего для авторизации необходим пароль (обычно от 1 до 8 символов). В таком случае необходимо осуществить подбор пароля. Можно осуществлять подбор по числовым значениям и по словарю. Для подбора по числовым значениям используется команда в таком виде:
svcrack.py a.b.x.y -u 123
Для номера 123 на шлюзе a.b.x.y осуществляется подбор пароля с вариантами только из чисел.
Для подбора пароля по словарю команда имеет следующий вид:
svcrack.py a.b.x.y -u 123 -d dictionary.txt
Для номера 123 на шлюзе a.b.x.y осуществляется подбор пароля с использованием словаря dictionary.txt, находящегося в папке sipvicious. При этом словарь по умолчанию не идёт в комплекте утилит Sipvicious и его нужно заносить в папку sipvicious самостоятельно.
Когда все (или только некоторые необходимые) шлюзы просканированы и из некоторых из них в лог-файлы извлечены данные, а также, при необходимости, подобраны пароли, завершается четвёртый шаг схемы.
Далее, пятым шагом в программе X-Lite подставляются адрес шлюза, номер абонента и пароль (если он есть).
Таким образом, схема выполнена и получен доступ к возможности звонить с IP-телефона некоторого абонента.