Иван Башлаков
16.03.2020
2357

Вопросы безопасности канала PJSIP в Asterisk

Кратко о PJSIP PJSIP это библиотека с открытым исходным кодом, содержащая реализацию протокола SIP (а также  SDP, RTP, STUN, TURN и ICE), и предоставляющая высокоуровневый API для приложений, используемых в мультимедийной связи. PJSIP содержит в себе все необходимые инструменты для реализации программных продуктов, обеспечивающих SIP-связь между пользователями. К ним относятся сигнализация, передача голоса, реализация работы […]

Кратко о PJSIP

PJSIP это библиотека с открытым исходным кодом, содержащая реализацию протокола SIP (а также  SDP, RTP, STUN, TURN и ICE), и предоставляющая высокоуровневый API для приложений, используемых в мультимедийной связи. PJSIP содержит в себе все необходимые инструменты для реализации программных продуктов, обеспечивающих SIP-связь между пользователями. К ним относятся сигнализация, передача голоса, реализация работы с NAT. PJSIP является легковесной библиотекой и поддерживается большим количеством операционных систем.

По сравнению с chan_sip, драйвер chan_pjsip в PBX Asterisk является более гибким и позволяет производить более тонкую настройку параметров  конечных точек.Это позволяет установить параметры их работы таким образом, чтобы предотвратить нежелательный доступ к ним, либо к АТС с их помощью.

В данной статье мы рассмотрим, какие методы атак на инфраструктуру SIP существуют на сегодняшний день, и как они обрабатываются в реализациях модулей chan_sip и chan_pjsip в PBX Asterisk. Соответственно, мы также обратим внимание на то, как технология PJSIP позволяет противостоять данным атакам.

Методы атак на инфраструктуру SIP

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

  1. Сканирование сети и определение sip-устройств.
  2. Выбор “жертвы” и отправка ей сообщений регистрации с целью подбора логина.
  3. Подбор пароля к логину.

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

Методы защиты от атак на инфраструктуру SIP

1. Защита от сканирования

Для того, чтобы определить, находятся ли в данной сети SIP-устройства, злоумышленник может отправлять пакеты с SIP сообщением OPTIONS ко всем хостам в сети. Данное сообщение используется в протоколе SIP  для запроса доступности SIP-сервера и оно не требует авторизации от отправителя. Каждое SIP-устройство, получившее такое сообщение, обязано ответить на него и ответ перечисляет возможности сервера, а также содержит строку UserAgent, в которой указывается версия программного обеспечения, используемого сервером. И в том случае, если эта версия является устаревшей или содержит проблемы безопасности, злоумышленник будет пытаться использовать эксплойты для получения доступа или проведения атаки через данные уязвимости.

Соответственно, те SIP-устройства, которые отвечают на сообщения OPTIONS, демаскируют себя для злоумышленника и становятся потенциально уязвимы.

обработка сообщения OPTIONS SIP-устройством
обработка сообщения OPTIONS SIP-устройством
обработка сообщения OPTIONS SIP-сервером
обработка сообщения OPTIONS SIP-сервером

В библиотеке PJSIP обработка сообщений OPTIONS была изменена таким образом, что получив данное сообщение от неизвестного хоста, Asterisk отвечает на него 401 Unauthorized и обрабатывает ip-адрес отправителя, выводя сообщение в консоль. Не смотря на то, что ответ Asterisk также , как и в chan_sip, содержит поле UserAgent, это позволяет использовать такие дополнительные инструменты, как fail2ban для отслеживания и блокировки ip-адресов злоумышленников.

обработка сообщения OPTIONS SIP-сервером при использовании библиотеки PJSIP
обработка сообщения OPTIONS SIP-сервером при использовании библиотеки PJSIP

Возникает совершенно логичный вопрос, как же защититься от подобного рода сканирования? Библиотека PJSIP предоставляет возможность определения диапазона адресов (ACL- Access Control List) для всего SIP трафика. Таким образом, указав в ACL только необходимый пулл адресов, можно защититься от атак извне. Реализация chan_sip позволяла определять разрешенные адреса только для каждого пира в отдельности.Эта возможность сохранилась и в PJSIP с некоторыми улучшениями: маску подсети можно задавать в формате префикса CIDR (/0-32), а также исключать определенные адреса из диапазона (используя сивол “!”). В PJSIP была добавлена возможность фильтрации запросов по полю “Contact” в описании пира. Это позволяет исключить подмену ip-адреса (спуфинг) при отправке запросов.

Стоит отметить, что даже ограничив, с помощью ACL, пулл адресов,в который должны входить SIP-устройства, мы не можем заставить Asterisk вообще не отвечать на запросы из других подсетей. Asterisk все равно будет слать ответы 403 Forbidden на все запросы с указанием своего UserAgent. Это свидетельство того, что обеспечить безопасность АТС можно только комплексными мерами, а не каким-то одним чудесным инструментом. Чтобы избавиться от этого, стоит обеспечить безопасность на уровне сети, например, настроив файрволл так, чтобы запросы от ненужных адресов вообще не попадали в Asterisk.

2. Защита от подбора логина

В случае, если вы не используете ни ACL, ни файрволл или если злоумышленникам удалось получить доступ к вашей доверенной сети, они начинают перебор логинов. Для того, чтобы такой возможности у них не было, chan_sip использует два параметра (файл конфигурации /etc/asterisk/sip.conf):

AlwaysAuthReject = yes 
AllowGuests = no

Параметр AllowGuests  разрешает или запрещает совершать звонки неавторизованным пользователем, а AlwaysAuthReject = yes указывает Asterisk на все попытки подбора пароля отвечать одинаково (401 Unauthorized). Если же AlwaysAuthReject имеет значение no, то при попытке регистрации существующего экстеншна с неверным паролем Asterisk ответит сообщением о неверном пароле и злоумышленник поймет, что он угадал имя экстеншна, ему останется  лишь подобрать пароль.

схема клиент-серверного взаимодействия с использованием PJSIP
схема клиент-серверного взаимодействия с использованием PJSIP

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

Реализация chan_sip при попытке неудачной авторизации возвращает хосту сначала сообщение 401 Unauthorized, затем 403 Forbidden. Из этой последовательности злоумышленник может понять, что причина отказа сервера в авторизации заключается в неправильно подобранной паре логин/пароль.PJSIP же в аналогичном случае отправляет 401 Unauthorized каждый раз, не давая злоумышленнику понять, правильный он использовал логин или нет.

Также библиотека PJSIP позволяет переопределить поле UserAgent в файле конфигурации /etc/asterisk/pjsip.conf. Это можно сделать для того, чтобы злоумышленник не смог определить, какое ПО используется на вашей АТС, и соответственно, имел меньше шансов для ее взлома. Переопределение переменных происходит в секции [global]:

user_agent = nopasaran
default_fromuser = nopasaran
default_realm = nopasaran

Помимо переопределения юзерагента секция [global] содержит в себе три переменные:

unidentified_request_count=5 
unidentified_request_period=5 
unidentified_request_prune_interval=30 

unidentified_request_count определяет количество запросов, которые могут быть получены с одного IP-адреса за указанное в параметре unidentified_request_period секунд, прежде чем генерируется событие безопасности (по умолчанию 5). unidentified_request_prune_interval указывает интервал, с которым проверяются неопознанные запросы (по умолчанию 30 сек). Таким образом можно заметить что эти параметры работают как аналог известной программы fail2ban, только для обработки регистраций в  PJSIP.

Вывод

Таким образом, подводя итог вышесказанному, можно отметить, что в отличие от морально устаревшего модуля chan_sip.so библиотека PJSIP содержит более богатый инструментарий для обеспечения безопасности АТС, сокращая возможность проведения атак на протокол SIP.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

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

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.