понедельник, 6 февраля 2017 г.

Защита SIP-порта. Часть 2: анализ пакетов.

  Для защиты SIP-порта можно использовать анализ пакетов с помощью опции "content" в Firewall Mikrotik. Но, для начала, нам нужно узнать, что именно посылает наш сервер телефонии на неправильный логин и пароль. Для примера возьмем самый популярный сервер телефонии - Asterisk с веб-интерфейсом FreePBX. Перво-наперво можно изучить, какие именно стандартные ответы дает SIP-сервер:
SIP/2.0 400 Bad Request - запрос не понят из-за синтаксических ошибок в нем, ошибка в сигнализации, скорее всего что-то с настройками оборудования
SIP/2.0 401 Unauthorized - нормальный ответ сервера о том, что пользователь еще не авторизировался; обычно после этого абонентское оборудование отправляет на сервер новый запрос, содержащий логин и пароль
SIP/2.0 401 Expired Authorization - время регистрации истекло
SIP/2.0 402 Payment Required - требуется оплата (зарезервирован для использования в будущем)
SIP/2.0 403 No Such User - нет такого пользователя, ошибка в номере, логине или пароле
SIP/2.0 403 User Disabled - пользователь отключен
SIP/2.0 403 Wrong Guess - ошибка в пароле
SIP/2.0 403 Conflict - такой SIP-номер уже используется
SIP/2.0 403 Forbidden - абонент не зарегистрирован
SIP/2.0 403 Empty Route Set - нет ни одного шлюза в роутинге
SIP/2.0 403 Caller Not Registered - нет такого пользователя
SIP/2.0 403 Out of Look-Ahead Retries - перебор узлов закончен
SIP/2.0 403 Invalid Phone Number - нет такого направления
SIP/2.0 403 No Money Left on RFC Account - на счету нет денег для совершения звонка
SIP/2.0 404 Not found - вызываемый абонент не найден, нет такого SIP-номера
SIP/2.0 404 Undefined Reason - неопределенное направление
SIP/2.0 404 Unknown user account - логин и пароль не найдены
SIP/2.0 404 Out of Order - в заявке на маршрутизацию по этому направлению нет ни одного шлюза, проверьте настройку маршрутизации по этому направлению.
SIP/2.0 405 Method Not Allowed - метод не поддерживается, может возникать если пользователь пытается отправлять голосовую почту и т.п.
SIP/2.0 406 No codecs match - неправильная конфигурация кодеков
SIP/2.0 406 Not Acceptable - пользователь не доступен
SIP/2.0 407 Proxy Authentication Required - необходима аутентификация на прокси-сервере
SIP/2.0 408 Request Timeout - время обработки запроса истекло: Абонента не удалось найти за отведенное время
SIP/2.0 408 Login timed out - за отведенное время не получен ответ от сервера на запрос авторизации
SIP/2.0 410 No Route - вариант SIP/2.0 403 Empty Route Set; нет доступа к ресурсу: Ресурс по указанному адресу больше не существует
SIP/2.0 413 Request Entity Too Large - размер запроса слишком велик для обработки на сервере
SIP/2.0 415 No Media - звонок совершается неподдерживаемым кодеком
SIP/2.0 416 Unsupported Scheme - сервер не может обработать запрос из-за того, что схема адреса получателя ему непонятна
SIP/2.0 420 Bad extension - неизвестное расширение: Сервер не понял расширение протокола SIP
SIP/2.0 421 Extension Required - в заголовке запроса не указано, какое расширение сервер должен применить для его обработки
SIP/2.0 423 Interval Too Brief - сервер отклоняет запрос, так как время действия ресурса короткое
SIP/2.0 480 Invalid Phone Number - неправильный номер телефона, не соответствует к-во цифр или неправильный код страны или города
SIP/2.0 480 Destination Not Found In Client Plan - направления нет в тарифном плане абонента
SIP/2.0 480 Wrong DB Response - проблемы с центральной базой сети
SIP/2.0 480 DB Timeout - проблемы с центральной базой сети
SIP/2.0 480 Database Error - проблемы с центральной базой сети
SIP/2.0 480 Codec Mismatch - несоответствие кодеков
SIP/2.0 480 No Money Left on RFC Account - нет денег на счету, обратитесь к администратору сети!!!
SIP/2.0 480 Empty Route Set - пустое направление, нет принемающих шлюзов
SIP/2.0 480 No money left - недостаточно денег на счете
SIP/2.0 480 Temporarily Unavailable - временно недоступное направление попробуйте позвонить позже
SIP/2.0 481 Call Leg/Transaction Does Not Exist - действие не выполнено, нормальный ответ при поступлении дублирующего пакета
SIP/2.0 482 Loop Detected - обнаружен замкнутый маршрут передачи запроса
SIP/2.0 483 Too Many Hops - запрос на своем пути прошел через большее число прокси-серверов, чем разрешено
SIP/2.0 484 Address Incomplete - принят запрос с неполным адресом
SIP/2.0 485 Ambiguous - адрес вызываемого пользователя не однозначен
SIP/2.0 486 Busy Here - абонент занят
SIP/2.0 487 Request Terminated - запрос отменен, обычно приходит при отмене вызова
SIP/2.0 488 Codec Mismatch - нет шлюзов с поддержкой заказанного кодека
SIP/2.0 488 Private IP Address - адрес RTP media из сетей RFC1918
SIP/2.0 491 Request Pending - запрос поступил в то время, когда сервер еще не закончил обработку другого запроса, относящегося к тому же диалогу
SIP/2.0 493 Undeciperable - сервер не в состоянии подобрать ключ дешифрования: невозможно декодировать тело S/MIME сообщения
SIP/2.0 499 Codec Mismatch - отсутствует кодек
  Sip-ответы могут быть как стандартные, так и не стандартные. Больше ответов можно посмотреть тут. Стоит сказать, что ваш сервер может посылать разные ответы о неверном пароле.  Во многих статьях для защиты Asterisk рекомендуют использовать некоторую уловку, приведу пример.
  По умолчанию Asterisk выдает одну ошибку о неверном пароле для существующего аккаунта и другую для несуществующего аккаунта. Существует множество программ для подбора паролей, поэтому злоумышленнику не составит труда проверить все короткие номера и собирать пароли лишь к существующим аккаунтам, которые ответили «неверный пароль». Чтобы помешать этому, меняем строчку в файле /etc/asterisk/sip.conf:alwaysauthreject = no на alwaysauthreject = yes и перезапускаем Asterisk.
  После такой настройки, Asterisk будет отвечать одинаково для любых неверных авторизации "401 Unauthorized" и не сообщать подробностей.
  Лично у меня при установленном интерфейсе FreePBX эта опция была включена. Ответ "401 Unauthorized" фигурировал и в удачных подключениях (с правильным логином и паролем), так и в неудачных. Поэтому по нему отловить "левые" подключения были невозможно. Поэтому решением стало выключение этой опции.


  И перезапускаем Asterisk для применение настроек.
заходим в консоль asterisk
asterisk -r
перезапускаем asterisk
core restart now
  Делаем проброс SIP-порта в Mikrotik:
/ip firewall natadd action=dst-nat chain=dstnat comment="SIP" disabled=no dst-port=5060 in-interface=ether1-wan protocol=udp src-address-list=udalennie_telefoni to-addresses=10.0.0.150 to-ports=5060
  Я не рекомендую использовать стандартный порт, но как пример приведу его.
  Далее нужно проанализировать пакеты, которые поcылает ваш сервер в ответ на неправильный логин и пароль. Для этого можем использовать программу Wireshark, как ей пользоваться можно почитать тут. После установки программы запускаем ее, выбираем свой сетевой интерфейс, который будем анализировать.


  Создаем фильтр для SIP-пакетов, что-бы не анализировать другой мусор.




  Выбираем фильтр и запускаем анализ, на запрос сохранить ли вывод в файл - отвечаем отказом.



  Далее нам понадобиться SIP-клиент, я выбираю X-Lite. Вводим IP нашего SIP-сервера, заведомо неправильный логин (номер внутреннего телефона) и любой пароль.



  Анализируем Wireshark.


  Получаем "404 Not found" - отлично, по этому и будем ловить пакеты. Далее вводим в X-Lite правильный логин (регистрационный номер телефона) и неправильный пароль.



  Проводим анализ.


  Получаем ответ "403 Forbidden (Bad auth)" - его тоже мы будем использовать. Теперь для примера покажу вывод правильной регистрации с верным логином и паролем.


  Как видим ответ "401 Unauthorized" попадается и при правильной регистрации. В тоже время текст "403 Forbidden (Bad auth)" и "404 Not found" можно использовать для отслеживания "плохих" подключений. Сам метод описан в статье Защищаем сервер FTP за Mikrotik анализируя пакеты опцией "content".
/ip firewall filter
  add action=drop chain=forward comment="drop sip brute forcers" dst-port=5060 in-interface=ether1-wan protocol=udp src-address-list=sip_drop
  add action=add-src-to-address-list address-list=sip_stage address-list-timeout=1m chain=forward comment=sip_vhod dst-port=5060 in-interface=ether1-wan protocol=udp
  add action=add-dst-to-address-list address-list=sip_drop address-list-timeout=10m chain=forward comment="sip_stage_bad_403 Forbidden (Bad auth)" content="403 Forbidden (Bad auth)" dst-address-list=sip_stage src-address=10.0.0.150
  add action=add-dst-to-address-list address-list=sip_drop address-list-timeout=10m chain=forward comment="sip_stage_bad_404 Not found" content="404 Not found" dst-address-list=sip_stage src-address=10.0.0.150
  Первым правилом мы блочим доступ с адрес-листа sip_drop на порт 5060. Второе правило добавляет все IP, которые обращаются на порт 5060 на наш роутер в адрес-лист sip_vhod. Третье правило анализирует ответы на адрес-лист sip_vhod от нашего сервера Asterisk, и если ответ содержит "403 Forbidden (Bad auth)" - добавляет IP в адрес-лист sip_drop на 10 минут. Четвертое правило аналогично третьему, только фильтрует пакеты по тексту "404 Not found". Такими образом злоумышленник, который пытается подключиться к вашему серверу с неправильным логином или паролем будет заблочен на 10 минут. А если вы неправильно ввели пароль (или ваш пользователь), то через 10 минут сможете повторить попытку.


Используемый материал:

Подписаться на новые статьи.

Комментариев нет:

Отправить комментарий