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

Вопросы безопасности канала 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.

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

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

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


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

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.