Mythbusters: шторм ложных DNS-ответов (DNS hijacking)

Давно в голове у меня зрело желание поиграться с атаками на DNS, а вчера, наконец, дошли руки. Материала в интернете на эту тему прилично, так что и мимо меня это в свое время ”пролетало”, правда подробности уже подзабылись.

Итак, будем рассматривать вариант, когда перехватывать траффик невозможно.

DNS траффик выглядит примерно так (UDP-пакеты):

Клиент: Эй, ДНС-сервер, какой IP у адреса msn.com? ID запроса = ABCD.

Сервер: Ответ на запрос с ID=ABCD: для сайта msn.com IP=XX.XX.XX.XX

Я думал, все, что нужно сделать, это угадать ID запроса (16 бит) и ответить раньше настоящего DNS-сервера.

Мы не видим клиентских запросов. Если мы хотим подсунуть свой IP для домена msn.com, то мы должны DNS-ответы слать непрерывно, лишь надеясь на то, что клиент когда-то обратится с этим вопросом к серверу. А мы тут как тут. :)

Мы не знаем ID запроса. Потому мы просто отошлем жертве сразу кучу пакетов с разыми ID - авось какой-то да совпадет. Длина этого идентификатора всего 16 бит, потому пакетов не так много. Примерно так может это выглядеть:

Сервер: Ответ на запрос с ID=0: для сайта msn.com IP=faked.IP

Сервер: Ответ на запрос с ID=1: для сайта msn.com IP=faked.IP

Сервер: Ответ на запрос с ID=2: для сайта msn.com IP=faked.IP

Сервер: Ответ на запрос с ID=3: для сайта msn.com IP=faked.IP

Сервер: Ответ на запрос с ID=4: для сайта msn.com IP=faked.IP

…

Сервер: Ответ на запрос с ID=2134: для сайта msn.com IP=faked.IP

…

Но есть еще один “маленький” ньюанс. :) Нужно знать source port, откуда был послан UDP-запрос. Потому, получается уравнение с двумя неизвестными: source port и ID. Даже если сузить диапазон портов, данная атака все равно видится нереальной - настоящий DNS-сервер всегда ответит быстрее.

Вывод: атака на конкретный хост путем беспрерывной отсылки фальшивых DNS-ответов от имени DNS-сервера без перехвата траффика практически нереальна.

MYTH BUSTED!

P.S. Когда есть возможность устроить ARP-Poisoning (т.е. когда цель находится в том же физическом сегменте сети), DNS-Hijacking - это уже даже и не интересно. :) Пропуская через себя чужой траффик можно сделать все что угодно. Но те тулзы, что я находил, нацелены именно на такой принцип работы.

Для интереса посмотрел как оно работает. Скомпилил dsniff, запустил arpspoofer + fragrouter, затем запустил dnshijacker - получилось. Но это уже все не то…