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

UFO (ufobject@mail.ru)

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


Всех положим!

Эх! Не обделил вниманием величайший хакер - Василий Пупкин - и сам DNS-сервер. Мало ему пострадавшего Билла, которому Василий не дал посмотреть любимый порносайт, так надо и всем остальным жизнь испортить. Настало время рассказать тебе историю про то, как Василий изменил маршрутную информацию на самом DNS-сервере, и теперь не только Билл не может попасть на www.porno.ru, но и все остальные пользователи DNS-сервера! Чтобы понять, как реализовать такой тип атаки, необходимо сначала понять принцип общения одного DNS-сервера с другим. Этим мы сейчас и займемся. Предположим, что некий Билл посылает запрос на ближайший DNS-сервер, в котором просит найти IP-адрес, соответствующий урлу www.lohotron.com. Допустим, что до Билла на этот DNS-сервер такого запроса никто не посылал. DNS-сервер начинает копаться в своем кэш-файле, где он хранит ответы на наиболее частые запросы и, не найдя IP-адреса, соответствующего домену lohotron.com, начинает искать его в своей базе. Не найдя ничего полезного и в базе, DNS-сервер посылает запрос на другой DNS-сервер. Эта цепочка продолжается до тех пор, пока IP либо не обнаружится, либо совсем не потеряется. В случае нахождения IP'шки по запросу хоста DNS-сервер заносит его в свой кэш-файл и в свою базу. Затем DNS-сервер передает информацию о местонахождении найденного урла соседним DNS-серверам и запросившему хосту. Вроде бы все весело и безопасно, но и здесь есть свои баги. Предположим, что Василий Пупкин захотел испортить всем жизнь и сделать так, чтобы люди попадали вместо www.lohotron.com на www.pupkin.ru. Думаешь, нереально? А зря. Очень даже реально, но, естественно, при определенных условиях. Для такого типа атаки необходимо, чтобы атакуемый DNS-сервер послал запрос на соседний DNS-сервер. Естественно, для этого нужно дождаться запроса, который поступит от любого пользователя на DNS-сервер. Эта проблема может быть решена посылкой запроса самого Василия Пупкина на атакуемый DNS-сервер. Предположим, что Василий послал нужный запрос, что делать дальше? А дальше атакующий Пупкин начинает посылать шторм пакетов UDP-протокола, в которых содержится ложный DNS-ответ якобы соседнего DNS-сервера, на который атакуемый DNS-сервер должен послать запрос. Даже при соблюдении всех тепличных условий для этого типа атаки остается одна проблема. В этой статье уже неоднократно говорилось про поле ID в UDP-пакетах для DNS-запроса и DNS-ответа. Это поле используется для проверки подлинности запросов. "А куда же делась вторая проблема с портом отправителя и получателя?" - спросишь ты. А нет ее. Дело в том, что DNS-сервера обмениваются между собой маршрутной информацией через фиксированный порт 53. Атакующему перцу остается только подобрать двухбайтный ID, и, в случае совпадения с реальным идентификатором, ложный DNS-ответ принимается атакуемым DNS-сервером как настоящий. Атакующему остается только вставить в ложном DNS-ответе тот IP-адрес, который он хочет присвоить запрошенному урлу. Вот и весь принцип атаки удаленного DNS-сервера. Так же, как и предыдущий способ атаки, это можно проделать из любой точки сети.

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