- Affected dpma versions
- Asterisk srtp
- Asterisk tls keys
- Asterisk tls srtp pjsip
- Asterisk tls srtp sip клиент
- Asterisk tls srtp c подписанными сертификатами (заметки)
- Asterisk1
- Asterisk2
- Delete self-signed ca
- Generate csr (запрос на подпись сертификата)
- Generate let’s encrypt certificate
- Generate self-signed certificate
- Import locally
- Manually
- Setting a default certificate
- Tls srtp для драйвера pjsip в asterisk 15 – asterisk ip-телефония
- Upload certificate
- When building/installing asterisk
- Защита voip
- Защита от подбора пароля
- Как настроить zoiper на android по протоколу tls srtp.
- Настройка srtp tls/ssl в asterisk
- Настройки экстеншна
- Повышаем безопасность всеми доступными средствами
- Проблемы защиты voip
- Протокол srtp/zrtp
- Тестирование
- Заключение
Affected dpma versions
Any System running DPMA versions older than the following are affected:
- DPMA 3.4.13 for Asterisk 11, 13, 15, 16
- DPMA 3.5.7 for Asterisk 13, 15, 16, 17, 18
- DPMA 3.6.2 for Asterisk 13, 16, 17, 18
Asterisk srtp
Asterisk поддерживает TLS «из коробки» дополнительных действий, кроме настройки в секции [general] файла sip.conf, не требуется.
Для поддержки SRTP Asterisk должен быть скомпилирован соответствующим образом. Должны быть установлены зависимости, библиотеки srtp:
yum install libsrtp libsrtp-devel
Конфигурация должна быть выполнена с ключами:
--with-crypto --with-ssl=ssl --with-srtp
Загрузите модуль srtp:
*CLI> module load res_srtp.so Loaded res_srtp.so Loaded res_srtp.so => (Secure RTP (SRTP))
*CLI> module show like srtp Module Description Use Count Status Support Level res_srtp.so Secure RTP (SRTP) 0 Running core 1 modules loaded
В файле modules.conf включите загрузку модуля, если требуется:
load = res_srtp.so
Asterisk tls keys
Сперва создадим само-подписанные сертификаты и ключи шифрования.
Создать директорию для ключей:
mkdir /etc/asterisk/keys
С исходниками Asterisk поставляется скрипт для создания ключей:
cd /usr/src/asterisk-14*/contrib/scripts/
в моем случае, это Asterisk 14, но пойдет и 13, и м.б. 12.
Выполните скрипт с тремя ключами:
Asterisk tls srtp pjsip
Создадим транспорт pjsip и пользовательcкий аккаунт.
/etc/asterisk/pjsip.conf
Asterisk tls srtp sip клиент
Софтфон Zoiper прекрасно работает с SRTP, как в десктопном, так и мобильном варианте на Android. Для iPhone хорошо себя зарекомендовала Bria.
Zoiper > Preference > Accounts > GeneralСтандартные настройки авторизации SIP
Zoiper > Preference > Accounts > Advanced
Tls Client Certificate Предварительно скопируйте сертификаты в доступную smb директорию
Zoiper > Preference > Advanced > SecurityTLS options:
Страшная надпись предупреждает об опасности: DANGEROUS! DO NOT USE! Но так как, мы используем само-подписанный сертификат, если не выключить верификацию, то ркгистрация не удастся. Нас предупреждают о опасности использования не удостоверенных доверенным издателем сертификатов, так же как браузер предупреждает, что сайт использует self-signed сертификат.
Когда регистрация успешно завершена, сделаем звонок. Иконка с закрытым замком указывает на защищенное соединение.
Asterisk tls srtp c подписанными сертификатами (заметки)
Объединяем файл ключа и сертификат, плюс сертификаты центров сертификации.
cat asterisk.key > asterisk.pem
cat asterisk.crt >> asterisk.pem
cat 3_issuer.crt >> asterisk.pem
cat 2_cross.crt >> asterisk.pem
cat 1_root.crt >> asterisk.pem
3. Настройка Asterisk.
Об этом есть масса статей, включая родное WIKI, Множество форумов. Почти везде я встречала так же генерацию сертификатов для клиентов, но мне она не понабилась. Во первых в мобильных приложениях нет возможности выбрать клиентский сертификат, а десктопные вполне хорошо себя чувствуют при ассиметричном алгоритме криптографии.
Кратко о настройках – вносим следующие изменения в SIP.conf или если у вас ELASTIX SIP_GENERAL_CUSTOM.conf
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscapath=/etc/pki/tls/cert
tlsclientmethod=tlsv1
tlscipher=ALL
Перезапускаем Asterisk и не забываем включать для нужных клиентов транспорт TLS и поддержку шифрования SRTP
Asterisk1
Сконфигурируем настройки general драйвера chan_sip для использования транспорта TLS. etc/asterisk/sip.conf
[general] tcpenable=yes bindaddr=0.0.0.0 tlsenable=yes tlsbindaddr=0.0.0.0:5061 tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlscipher=ALL tlsclientmethod=tlsv1 tlsdontverifyserver=yes
В нашем примере для TLS используется порт 5061, этот порт должен отличаться от порта TCP, например:
asterisk -rx 'sip show settings' | grep -C 2 "UDP Bindaddress" Global Settings: ---------------- UDP Bindaddress: 0.0.0.0:6665 TCP SIP Bindaddress: 0.0.0.0:6666 TLS SIP Bindaddress: 0.0.0.0:6667
Зарегистрируемся по протоколу TLS на удаленном сервере Asterisk:
[general] register => tls://SIPTRUNK:PASSWORD@asterisk2:5061
Настроим SIP транк:
[trunk_to_asterisk2] type=friend context=from-astrisk2 host=asterisk2 port=5066 secret=PASSWORD dtmfmode=rfc2833 disallow=all allow=alaw fromdomain=asterisk2 insecure=port,invite qualify=yes canreinvite=no encryption=yes transport=tls
Настройки транка типовые, кроме опций:
Настройки SIP аккаунтов, тоже совершенно обычные, кроме transport=tls и encryption=yes
Asterisk2
[general] tcpenable=yes bindaddr=0.0.0.0 tlsenable=yes tlsbindaddr=0.0.0.0:5066 tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlscipher=ALL tlsclientmethod=tlsv1 tlsdontverifyserver=yes
[trunk_to_asterisk1] type=friend context=from-asterisk1 host=asterisk1 port=5061 secret=PASSWORD dtmfmode=rfc2833 disallow=all allow=alaw fromdomain=asterisk1 insecure=port,invite qualify=yes canreinvite=no encryption=yes transport=tls
Теперь останется только настроить маршрутизацию и зарегистрировать SIP клиентов.
Дополнительные сведения о настройке TLS SRTP в Asterisk вы может найти в материале
см. также Asterisk настройка TLS SRTP для PJSIP
Delete self-signed ca
Вы можете в любое время удалить самоподписанный центр сертификации, нажав красную кнопку с надписью «Delete Self-Signed CA».
Затем появится запрос, предупреждающий вас, что все сертификаты,
которые полагались на этот самоподписанный центр сертификации, будут признаны
недействительными. После того, как вы удалили самоподписанный центр
сертификации, вы можете создать еще один, нажав «New Certificate», затем «Generate
Self-Signed Certificate».
Generate csr (запрос на подпись сертификата)
Вы можете сгенерировать CSR(Certificate Signing Request) из своей АТС, которая будет использоваться для процесса получения сертификатов от действительных центров сертификации.
Generate let’s
encrypt certificate
Сертификаты Let’s Encrypt — это полностью 100% бесплатные сертификаты, которые создаются с помощью автоматизированного процесса, предназначенного для устранения текущего сложного процесса ручного создания, проверки, подписания, установки и обновления сертификатов для защищенных веб-сайтов.
Generate
self-signed certificate
Самоподписанные сертификаты не рекомендуется использовать,
так как многие браузеры отклоняют эти сертификаты, однако они могут быть
полезны для внутреннего тестирования.
Ваша АТС также генерирует самоподписанный сертификат при
первой загрузке.
Если вы ранее удаляли самодписанный центр сертификации, форма добавления сертификата будет выглядеть так:
- Host Name: имя хоста системы. Должно
быть полное доменное имя. - Description: описание этого сертификата.
- Organization Name: название организации,
используется в процессе создания центра сертификации.
В противном случае экран нового сертификата будет выглядеть так:
Import locally
Чтобы вручную импортировать ваши сертификаты, вам нужно поместить
файлы * .key и * .crt в /etc/asterisk/keys. Затем нажмите кнопку «Import
Locally». После этого ваши сертификаты появятся в списке сертификатов АТС.
Manually
Visit the DPMA Downloads page, navigate to the folder appropriate for your version of Asterisk and architecture, and download the appropriate DPMA tarball. Follow the included installation instructions.
Setting a default certificate
Установка сертификата по умолчанию изменяет настройки
сертификата ТОЛЬКО в дополнительных настройках. Это заставит указанный
сертификат быть по умолчанию для параметров в расширенных настройках, которые
требуют сертификаты. Он также поместит стандартный набор сертификата и его ключ
в /etc/asterisk/keys/integration для использования другими приложениями.
Чтобы выбрать сертификат по умолчанию, наведите указатель мыши на пустой столбец в списке сертификатов. Появится серая галочка. Нажмите эту галочку, чтобы сделать сертификат по умолчанию.
После того, как этот процесс завершится, галочка изменится с серого
на зеленый цвет и останется после того, как вы уберете курсор.
Tls srtp для драйвера pjsip в asterisk 15 – asterisk ip-телефония
Конфигурация используемой системы:
— Centos 7
— Asterisk 15.6.1 собранный с поддержкой SRTP и PJSIP
Сначала необходимо убедиться что Asterisk собран с поддержкой SRTP и PJSIP и если это не так то пересобрать установив необходимые пакеты.
Проверить наличие драйвера PJSIP в Asterisk можно командой:
asterisk -rx „module show like pjsip“
Данная команда выведет список всех модулей относящихся к PJSIP. Если в отображаемом списке статус модулей стоит Running значит модули загружены и работают

Для проверки наличия SRTP необходимо выполнить команду
asterisk -rx ‘module show like srtp’
Если в выводе не показан ни один модуль то необходимо пересобрать Asterisk с использованием данного модуля.

Для установки SRTP следует выполнить следующие шаги:
1) Установить библиотеку SRTP c помощью команды
yum install libsrtp libsrtp-devel -y
2) Перейти в директорию с исходниками Asterisk и сконфигурировать установку командой:
./configure —libdir=/usr/lib64 —with-crypto —with-ssl=ssl —with-srtp
3) В окне выбора устанавливаемых модулей (make menuselect) необходимо в разделе Resource Modules включить установку модуля res_srtp

4) Далее шаги соответствуют стандартной установке Asterisk (make и make install)
5) Далее необходимо перезагрузить Asterisk командой systemctl restart asterisk
6) Далее необходимо загрузить модуль, выполнив в консоли Asterisk`а команду module load res_srtp.so

Полностью установка Asterisk с поддержкой SRTP и PJSIP рассмотрена на примере Asterisk 13 в статье
Теперь команда asterisk -rx ‘module show like srtp’ покажет, что модуль находится в сотсоянии Running.

Обратите внимание, что после перезагрузки Asterisk`а модуль придется снова подгружать вручную, чтобы избежать этого необходимо корректно настроить файл /etc/asterisk/modules.conf
Для этого необходимо или включить автозагрузку всех модулей установив опцию autoload = yes, или же прописать в явном виде подгрузку модуля опцией
load = res_srtp.so

Перед тем как настраивать транспорт для драйвера PJSIP необходимо сгенерировать сертификаты. Для этого необходимо выполнить следующие шаги.
1) в директории /etc/asterisk создать поддиректорию keys командой mkdir /etc/asterisk/keys
Для создания ключей в исходниках Asterisk присутсвует специальный скрипт ast_tls_cert, находящий в поддиректории contrib/scripts/
По-умолчанию срок выдачи генерируемого сертификата год, чтобы увеличить срок необходимо поправить скрипт заменив число 365 в параметре -days на любое необходимое, например, 3650 — это выдаст сертификат сроком на 10 лет.

2) запустить скрипт для генерации сертификатов командой
./ast_tls_cert -C pbx.company.ru -O «Test Company» -d /etc/asterisk/keys
В процессе генерации будет запрошен ввод ключевой фразы для генерации ca.key, также понадобиться ввести тотже код и для генерации asterisk.key.

3) Следующий шаг — генерация клиентского сертификата командой
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C client1.company.ru -O «Test Company» -d /etc/asterisk/keys -o 100
При генерации клиентского ключа необходимо будет указать ту же ключевую фразу, что задавали при генерации сертификата сервера.

После генерации сертификатов необходимо настроить Asterisk на работу с TLS.
Сначала необходимо в секции описания транспортных протоколов файла /etc/asterisk/pjsip.conf, создать секцию с описанием TLS.
Ее примерный вид следующий:
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
domain=pbx.company.ru
external_media_address=1.1.1.1
external_signaling_address=1.1.1.1
local_net=192.168.170.0/24
method=tlsv1

Краткое описание параметров секции
bind — указывает Asterisk, что TLS будет работать на порту 5061
cert_file — указывает путь к файлу сертификата, сгенерированного на предыдущем этапе
priv_key_file — указывает путь к файлу приватного ключа, сгенерированного на предыдущем этапе
external_media_address — указывает внешний ip-адрес АТС при нахождении ее за NAT`ом
external_signaling_address — указывает внешний ip-адрес АТС при нахождении ее за NAT`ом
При подключении внешних абонентов на маршрутизаторе необходимо обязательно пробрасывать порт 5061 TCP и диапазон голосовых портов UDP, на Asterisk
Для разрешения в дальнейшем применения изменений транспорта командой asterisk -rx „core reload“ необходимо дополнительно указать в секции транспорта параметр allow_reload=true
Для проверки настроек TLS можно воспользоваться командой
openssl s_client -connect 127.0.0.1:5061
Команда выводит данные о сертификате.

Настройка секций endpoint, auth, aor
Основным отличием настроек данных секций от стандартный в PJSIP является наличие опции media_encryption=sdes
Описание секций файла pjsip.conf дано в статьеПример настройки:
[100]
type=aor
max_contacts=1
remove_existing=yes
[100]
type=auth
auth_type=userpass
username=100
password=StrongPasswd
[100]
type=endpoint
transport=transport-tls
direct_media=no
aors=100
auth=100
context=from-internal
disallow=all
allow=opus
allow=alaw
allow=ulaw
force_rport=yes
rewrite_contact=yes
dtmf_mode=rfc2833
media_encryption=sdes

Данных параметров достаточно для минимальной настройки TLS SRTP для PJSIP
Upload certificate
- Name: название сертификата.
- Description: описание сертификата.
- Passphrase: ключевая фраза закрытого
ключа. Это будет использоваться для расшифровки закрытого ключа и
сертификата. Они будут храниться без указания пароля в системе, чтобы
предотвратить сбои в обслуживании. - CSR Reference: запрос на подпись сертификата для
ссылки. Если выбрано «Нет», вы сможете загрузить свой личный ключ. - Private Key: вставьте свой закрытый ключ.
- Certificate: вставьте свой сертификат.
- Trusted Chain: вставьте свою доверенную
цепь.
Чтобы просмотреть сертификаты для копирования, необходимо открыть файлы TLS с помощью простого текстового редактора, а не обязательно приложения по умолчанию, настроенного на рабочей станции.
When building/installing asterisk
Under the “Resource Modules” section of menuselect (or cmenuselect), select “res_digium_phone” under “External Modules”. When you next run make install the latest DPMA version will be automatically downloaded and installed.
Защита voip
Увы, защита VoIP не включается одной кнопкой и должна планомерно строиться на всех уровнях, начиная с сетевого уровня (iptables, IPS) и заканчивая правильной настройкой плана набора.
Традиционные межсетевые экраны не могут полностью противостоять специфическим атакам, поскольку они работают на транспортном уровне и не умеют «смотреть» внутрь пакета. Здесь нужны специализированные решения, относящиеся к классу NGFW (Next-Generation Firewall).
Могут быть эффективными традиционные мероприятия по борьбе с DoS — регулировка трафика на маршрутизаторе, использование пограничных контроллеров сессий (SBC, session border controllers), правильная настройка сервера и приложения. Так, контроллеры SBC, являясь единой точкой входа и анализируя пакеты в реальном времени, способны предотвращать DDoS-атаки, распространение спама и вирусные эпидемии.
Плюс некоторые реализации SBC умеют шифровать трафик, обеспечивая защиту от перехвата в WAN. Под VoIP рекомендуется выделять отдельные сети (физические или VLAN), это позволит скрыть голосовой трафик от пользователей сети и лучше контролировать QoS для VoIP. Хотя не следует считать эту меру панацеей, так как сниферы без проблем найдут трафик VoIP VLAN.
Что касается атаки MITM, то защита от нее давно уже отлажена. Это проверка МАС-адреса на файрволе, использование протокола контроля доступа и аутентификации IEEE 802.1x, шифрование потока. Шифрование, наряду с продвинутыми методами аутентификации и правильной парольной политикой, позволяет защититься от подбора пароля.
В настоящее время реализовано несколько вариантов: VPN, TLS/SSL, SRTP (Secure Real Time Protocol) или ZRTP (Z and Real-time Transport Protocol). Виртуальные сети наиболее популярны у провайдеров услуг, но VPN, увеличивая накладные расходы на передачу пакетов, нередко сами становятся причиной задержек.
Да и не с каждым протоколом VPN можно обеспечить соединение удаленному пользователю в конкретных условиях. Кроме того, обычно шифруется канал только между VPN-серверами, а внутри конкретного сегмента сети сотрудники ведут переговоры по незащищенному каналу.
Теперь рассмотрим реализацию этих методов на примере Asterisk.
Защита от подбора пароля
Попытки подбора паролей к SIP-аккаунтам давно уже не редкость, тем более что готовые инструменты лежат в свободном доступе, а простой скрипт пишется за день. Например, комплект утилит SIPVicious позволяет получить списки SIP в указанном диапазоне IP, рабочие расширения (extensions) и подобрать к ним пароль.
Как настроить zoiper на android по протоколу tls srtp.
Как настроить Zoiper на Android
~~socialite~~
Настройка srtp tls/ssl в asterisk
Сервер Asterisk поддерживает TLS между серверами и сценарий клиент — сервер. Для активации TLS достаточно прописать в настройках (sip.conf) всего несколько команд:
tcpenable=yes
tcpbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/cert/asterisk.pem
tlscafile=/etc/asterisk/cert/ca.crt
tlsprivatekey=/var/lib/asterisk/keys/voip.example.org.key
tlsclientmethod=tlsv1
Проверяем подключение:
$ openssl s_client host localhost port 5061
В настройках клиента ставим transport=tls.
RSA-ключи, используемые для шифрования, можно сгенерировать при помощи команды openssl genrsa и специальных скриптов astgenkey (astgenkey -n keyname) или asttlscert (копируют ключи в /var/lib/asterisk/keys). Последние не всегда доступны в пакетах или специальных дистрибутивах вроде Elastix, взять их можно на SVN-сервере.
Теперь подключение безопасно и подсмотреть регистрационные данные нельзя, хотя сами переговоры не шифруются. Штатный для Asterisk протокол IAX2, как и SIP, можно настроить на поддержку шифрования SRTP (AES128). Для этого необходимо добавить всего одну строку в конфиг iax.conf или sip.conf:
encryption=yes
Перезапускаем настройки sip reload/iax2 reload, затем проверяем, загружен ли модуль:
CLI> module show like res_srtp.so
Команда iax show peers должна показать метку (E) напротив подключенных клиентов, означающую, что шифрование активно. В журналах появится запись вида encrypt_frame: Encoding.

Настройки экстеншна
Междугородние звонки всем сотрудникам, как правило, не нужны, поэтому следует ограничить такую возможность только определенной группе абонентов. Входящие и исходящие звонки должны быть описаны в разных контекстах. Зачастую админы ленятся, используя в описании маршрутов символы замены, и получается что-то вроде:
exten => _5X.,1,Dial(SIP/${EXTEN})
Это может привести к тому, что сотрудник или злоумышленник может позвонить куда угодно. Поэтому следует жестко прописывать все цифры международных кодов, городов или мобильных операторов, четко указывая, куда можно звонить:
exten => _8495XXXXXXX,1,Dial(SIP/${EXTEN})
Вложенные контексты или специальные конструкции позволяют ограничить звонки в определенных направлениях в нерабочее время. Вариантов здесь несколько:
exten => 3XXX,1,GotoIfTime(9:00-18:00|mon-fri|*|*?OUT,s,1)
; include => <context>[|<hours>|<weekdays>|<monthdays>|<months>]
include => daytime|9:00-18:00|mon-fri
В случае нарушения можно предусмотреть отправку почтового сообщения на ящик админа:
Повышаем безопасность всеми доступными средствами
В Asterisk используется специальный SIP Security Event Framework, позволяющий в том числе собирать информацию о проблемах безопасности. Подключив соответствующий журнал вMARKDOWN_HASH225a5355dbea6e4872626e2101b5ea79MARKDOWN_HASH директивой security_log => security, мы можем блокировать все попытки перебора пароля при помощи fail2ban.
Проблемы защиты voip
Как и любое сетевое приложение, VoIP-сервис подвержен «классическим» атакам, но есть своя специфика. Например, в случае DDoS не обязательно «заваливать» сервер SYN-запросами. Можно «вмешаться» в разговор, отправляя пустые пакеты, на обработку которых сервис будет затрачивать ресурсы, это приведет к задержкам, и разговор вести станет невозможно (атака Call tampering).
Протокол srtp/zrtp
Оптимальным с точки зрения производительности является SRTP (RFC 3711), позволяющий шифровать (AES) медиапоток и обеспечивать проверку подлинности (HMAC-SHA-1) информации. Однако этот протокол не обеспечивает защиту процесса аутентификации, и необходимо дополнительно использовать сторонние инструменты вроде TLS/SSL.
Связку SRTP TLS/SSL можно легко организовать на Asterisk (с 1.8), FreeSWITCH, SIP-коммутаторе OpenSIPS и других подобных решениях. Кроме того, Asterisk и FreeSWITCH поддерживают протокол ZRTP, который специально разработан для VoIP Филиппом Циммерманном, создателем PGP (отсюда и первая буква Z в названии).
Протокол обеспечивает безопасную аутентификацию и обмен данными, стандартизирован в RFC 6189. Во время инициализации ZRTP-звонка используется метод обмена ключами Диффи — Хеллмана, для аутентификации применяется SAS (Short Authentication String). Весь разговор шифруется, причем пара ключей генерируется для каждого сеанса автоматически, что очень удобно, так как позволяет легко встроить этот механизм в уже существующие продукты и не требуется инфраструктура PKI.
В дополнение к SRTP, в канальном драйвере chan_sip из состава Asterisk 11 реализована поддержка безопасного транспортного протокола DTLS-SRTP, предназначенного для передачи мультимедийных RTP-потоков c использованием шифрования, которая может быть задействована для абонентов, использующих WebRTC и SIP.
Тестирование
Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump
для сигнализации:
tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061
где eth0 сетевой интерфейс.
Для голоса:
tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000
Заключение
Сервис VoIP — это сложное решение, и для его защиты следует применять комплексный подход, блокируя возможные угрозы на всех уровнях. Кроме прочего, следует побеспокоиться и о стандартных мероприятиях, таких как поддержание версии ПО и ОС сервера в актуальном состоянии, обновление прошивки и настройка безопасности оконечного оборудования.
