VoIP под прицелом

Xakep, номер #048, стр. 048-074-2


Однако, всякие Land, Targa, TFN2K, Stacheldraht, mstream и их сотоварищи - не единственные способы задосить выбранный шлюз или IP-телефон. Внимательно изучив стандарты, можно попробовать несколько простейших способов разрыва соединения между абонентами. Например, в протоколе SIP, который становится все более популярным, для этого можно задействовать команды CANCEL и BYE, которые отменяют обработку переданных ранее запросов и завершают соединение соответственно.

Допустим, на твоей работе вовсю используются современные технологии, в частности IP-телефония. Также вместе с тобой работает девушка с редким именем Алиса, к которой ты питаешь нежные чувства. Но она к тебе равнодушна и благоволит твоему сопернику Борису (вот негодница!). Ты хочешь расстроить планы их совместного времяпрепровождения и планируешь помешать им общаться по телефону. Когда Алиса набирает номер Бориса, ее телефон посылает запрос INVITE, приглашающий Бориса к разговору. В процессе определения местонахождения телефона Бориса, телефон Алисы получает ответ 100 Trying ("ждите ответа"). После обнаружения телефона в ответ Алисе посылается сигнал 180 Ringing, а в случае желания пообщаться - сигнал 200 OK ("Хочу"). Вот здесь-то ты и вступаешь в дело, посылая Борису запрос CANCEL, который отменяет все ранее переданные запросы и ответы от Алисы. Однако есть три тонкости:

* Запрос CANCEL посылается до того, как Борис пошлет сигнал 200 OK.

* Должна быть программа, которая может создавать любые SIP-запросы и SIP-ответы с заданным содержанием.

* Необходимо прослушивать сетевой трафик в поисках SIP-взаимодействия. Прослушать SIP-взаимодействие не составляет труда, т.к. RFC 2543 доверяет шифрование внешним разработчикам.

Можно поступить проще - не ловить момент между ответами 180 Ringing и 200 OK, а послать запрос BYE, посылаемый каждому из абонентов в отдельности или обоим сразу (это можно сделать и после 200 OK). Во всех случаях соединение будет завершено и разговор не состоится. Наконец, можно поступить и иначе, воспользовавшись специально посланными сообщениями об ошибке:

* 4xx - в запросе обнаружена ошибка;

* 5xx - запрос не может быть обработан из-за отказа сервера;

* 6xx - соединение с вызываемым абонентом установить невозможно.

Бывает и так, что IP-телефон получает свою конфигурацию, обращаясь к специальному Web-серверу, или имеет в своем составе встроенный Web-сервер (например, некоторые модели Cisco IP Phone). Некорректный запрос к этому серверу (длинный URL или некорректное значение какого-либо параметра) приводит к перезагрузке или реинициализации IP-телефона. Например, обращение по адресу http:///StreamingStatistics?1 для IP-телефонов Cisco серии 7900 позволяет отобразить страницу с отладочной статистикой. Однако обращение к несуществующей странице с большим значением идентификатора (не ниже 32768), например, http:///StreamingStatistics?40000 приведет к выдаче сообщения об ошибке и перезагрузке телефона в течение 15-30 секунд. Запрограммировав данный процесс, ты получаешь классическую DoS-атаку. Кстати, используя схожий запрос http:///PortInformation?40000 можно получить содержание произвольного участка памяти, который в том числе может содержать и список предыдущих звонков, и другую конфиденциальную информацию.

Назад на стр. 048-074-1  Содержание  Вперед на стр. 048-074-3