Взлом и защита DNS-сервера

UFO (ufobject@mail.ru)

Спецвыпуск Xakep, номер #015, стр. 015-055-1


Представь себе такую ситуацию: лезет твой учитель по информатике во время очередного урока на свой любимый сайт www.microsoft.com, а вместо этого попадает на www.hardporno.ru! Представил? А знаешь, что это? Это результат успешной DNS-атаки. Что, заинтересовался ;)? Тогда слушай сюда.

Служба DNS

Сначала нам с тобой придется разобраться с принципом работы DNS-серверов, а то дальше ничего не будет понятно. Вот, скажем, ты хочешь зайти на какой-нибудь сайт. Что ты делаешь первым делом? Совершенно верно - набираешь адрес, типа www.rulezsite.ru. Твой комп в это время посылает пакет с запросом на DNS-сервер, адрес которого устанавливается при настройке твоей ОС. В пакете содержится буквенный алиас ресурса, набранный тобой (иначе говоря, доменное имя - rulezsite.ru). После получения DNS-запроса DNS-сервер начинает искать в своей базе данных IP-адрес, соответствующий запрошенному тобой домену. Если такого имени в своей базе сервер не находит, он пересылает запрос другому DNS-серверу. Если нужный IP-адрес находится, то он отправляется твоей машине. Теперь браузер знает IP'шник запрошенного тобой ресурса и начинает соединение с ним. На первый взгляд, все логично и правильно, но у этой схемы имеются свои уязвимые места ;).

Атака в тепличных условиях

Первый тип DNS-атаки - это создание обманного DNS-сервера вследствие перехвата запроса. Страшно звучит :)! Но как говорится - "не так страшен Гейтс, как его Windows". Сперва я расскажу про UDP-протокол, по которому работают DNS-сервера. Этот протокол сильно уязвим по сравнению с TCP. Все дело в том, что UDP не предусматривает средства идентификации своих сообщений (в отличие от TCP). Но это еще не все... С каждым переданным запросом в поле "порт отправителя" начальное значение 1023 увеличивается на единицу. Но и это еще не все! В UDP-пакетах существует поле ID, которое является идентификатором DNS-запроса. Если ты юзаешь Windows9x или Linux, то их командный интерпретатор оставляет значение поля ID, равное единице, а вот если у тебя стоит Netscape Нафигатор, то это поле с каждым новым запросом увеличивается на единицу. Также ведет себя и DNS-сервер: увеличивает на единицу поле ID. А вот теперь начинается самое интересное :). Предположим, что некий Василий Пупкин решил перехватить DNS-запрос несчастного пользователя и перевести его трафик на себя (вернув в ложном DNS-ответе свой IP вместо настоящего). Естественно, без ложного DNS-сервера ему никак не обойтись. Вначале ему придется ждать DNS-запроса, который должен быть послан с клиентской тачки (с тачки жертвы). Василий извлекает из перехваченного пакета IP-адрес запросившего хоста. Затем он генерирует пакет, в котором представляется DNS-сервером, который был запрошен удаленным хостом. А как он это делает? Да очень просто. В этом ложном ответе, в поле IP DNS-сервера, Василий ставит свой собственный IP. Теперь запросивший хост принимает Пупкина за настоящий DNS-сервер. Когда Василий получит новый пакет с запросом от хоста, он поменяет в нем IP-адрес отправителя и перешлет этот измененный пакет на настоящий DNS-сервер. В итоге получается, что Вася является как бы посредником между DNS-сервером и обманутым хостом. Теперь настоящий DNS-сервер думает, что сам Вася посылает запросы, а хост считает, что Вася является натуральным и без консервантов DNS-сервером :). Остался только один вопрос: а как же перехватить этот запрос от атакуемого хоста? Перехват возможен только в том случае, если атакующая машина находится на пути основного трафика или в сегменте DNS-сервера. Это основной минус такого типа атак :(.

Содержание  Вперед на стр. 015-055-2