7 октября 2011 г.

Получение доступа к использованию аккаунтов VoIP-шлюзов.

Получение доступа к использованию аккаунтов 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.
Из всех этих протоколов наиболее уязвимыми являются SIP, H.323, MGCP. Корпоративные протоколы, как правило, являются более защищёнными в связи с тем, что они обычно создаются для определённого класса аппаратных продуктов и используют собственные алгоритмы шифрования и защиты. Их слабым местом является то, что так или иначе им приходится взаимодействовать с более общими протоколами H.323, SIP и MGCP при связи с VoIP-узлами, использующими эти протоколы.

Существует схема, позволяющая получить данные о номерах абонентов и типах их авторизации на некоторых VoIP-шлюзах и использовать их для совершения звонков с этих номеров. Суть схемы следующая:
  1. Сканирование определённой подсети на наличие VoIP-шлюзов.
  2. Получение данных о VoIP-шлюзах: адрес шлюза, тип программного обеспечения шлюза и тип аппаратного обеспечения шлюза (тип маршрутизатора).
  3. Попытка получить номера абонентов и типы их авторизации от всех или некоторых полученных в пункте 2 шлюзов.
  4. Поиск номеров абонентов, для использования которых не требуется авторизация (тип авторизации - noauth). В случае, если таковых не имеется, взлом пароля авторизации (по словарю или bruteforce-атакой).
  5. Если предыдущий пункт был реализован успешно, то подстановка полученного номера (это число от 100 до 999) и пароля (в случае, если для данного номера тип авторизации отличен от noauth) в клиентскую программу (например X-Lite) и подключение через неё к шлюзу, с которого были взяты подставляемые данные.
Для практической реализации этой схемы потребуется следующее программное обеспечение:
Перед выполнением всех операций необходимо отметить ряд важных моментов.
  • Большинство шлюзов сильно защищены и в них не всегда можно успешно попасть с помощью Sipvicious.
  • Настоятельно рекомендуется перед выполнением всех описываемых ниже действий построить и включить цепочку прокси серверов (подробнее в статье "Построение и использование цепочек SOCKS-proxy").
  • Желательно проверить местонахождение шлюзов с помощью многочисленных Интерет-сервисов по нахождению местоположения сервера по IP-адресу и пытаться извлечь данные из шлюзов,  находящихся за рубежом.
  • Извлечь данные успешно удаётся, как правило, лишь из 15-30% шлюзов.
После получения вышеуказанного ПО и установки Python и X-Lite можно переходить к выполнению схемы. Работа будет осуществляться в командной строке. В данной статье рассматривается выполнение всех действий в ОС Windows. В Linux схема выполняется аналогично.
Запуск командной строки (открыть меню "Пуск", затем "Выполнить", в строке ввести "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-телефона некоторого абонента.