DNS-атаки: основы и принципы
- Подробности
- Категория: Сетевая безопасность
- Дата публикации: 08.07.2013 17:03
Атаки на DNS–сервера (и просто DNS-атаки) - уже далеко не новый, но тем не менее отнюдь не забытый и до сих пор актуальный тип хакерских (и не только) атак, которые активно используется многими злоумышленниками и по сей день. В том числе, в части переноса процента прибыли каких-либо организаций в свой карман.
Представим себе такую ситуацию: лезет директор нашей IT-конторы на корпоративный сайт - оценить результат работы его добросовестных сотрудников, а вместо этого попадает на www.bdsm-porno.ru. Вообразили? Вот это и есть результат (всего лишь один из возможных) успешной DNS-атаки.
Рассмотрим подробнее, как реализовываются такие схемы (атак на DNS, а не достижения высот в рекламе порноиндустрии), какие ещё бывают угрозы и типы DNS-атак.
Для начала разберём принцип работы DNS-протокола. Кто с ним знаком с дет.садовских времён, может смело пропускать и переходить к разделу "простейшая DNS-атака".
Принцип работы DNS
Хотим мы допустим зайти на какой-нибудь сайт с именем www.cool-site.ru. Набираем этот адрес в строке браузера или где-то ещё, что умеет подключаться к интернету, и видим, как начинает грузиться страница. Но что же происходит между нажатием кнопочки Enter и процессом загрузки? В момент после нажатия кнопки компьютер посылает сетевой пакет с запросом на DNS-сервер, адрес которого устанавливается при настройке ОС. В пакете содержится буквенное DNS-имя ресурса (т.е. название, которое мы и набрали),. После получения DNS-запроса DNS-сервер начинает искать в своей базе данных IP-адрес, соответствующий запрошенному доменному имени (все идентификации в Интернете, как известно, происходят только по IP-адресам). Если такого имени в своей базе DNS-сервер не находит, он пересылает запрос другому DNS-серверу (обычно вначале свои соседям по иерархии, знающие другие зоны DNS-имён, а потом тому, который стоит выше над ним по иерархии и "знает" больше доменных имён). Если нужный IP-адрес находится, то он отправляется нашему компьютеру. Теперь браузер знает IP-шник запрошенного ресурса и начинает соединение с ним. На первый взгляд, все логично и правильно, но у этой схемы имеются свои уязвимые места ;)
Переходим к описанию принципов любой DNS-атаки. Прикладной протокол DNS использует в своей реализации транспортный (читаем сетевую модель OSI) протокол UDP. Хотя он вполне может работать - и в некоторых особых случаях работает (есть реализации) - по куда более защищённому TCP, однако в 99% случаев он реализован поверх UDP. Вся беда в том, что UDP не предусматривает средства идентификации своих сообщений (в отличие от TCP) и мы можем с лёгкостью отправить ответный UDP с совершенно любыми данными (прикинувшись совершенно любой персоной в сети: подменить IP - задача - легче некуда). Но это еще не все... С каждым переданным запросом в поле "порт отправителя" начальное значение 1023 увеличивается на единицу. Но и это еще не все! В DNS-надстройке UDP есть такая вещь, как ID запроса. В DNS-пакетах существует поле ID, которое является идентификатором DNS-запроса. ID, в зависимости от реализации DNS-сервера/ОС/браузера может либо быть постоянным, либо инкрементироваться на единицу с каждым разом, либо быть почти рандомным.
Теперь перейдём к описанию...
Простейшая DNS-атака
Предположим, что некий Василий Пупкин решил перехватить DNS-запрос несчастного пользователя Пети Лоханкина и перевести его трафик на себя (вернув в ложном DNS-ответе свой IP вместо настоящего). Для этого зло настроенный Вася создаёт у себя на компе ложный DNS-сервер.
Вначале он ждёт DNS-запроса, который должен быть послан с клиентского компа (т.е. жертвы). Василий извлекает из перехваченного пакета IP-адрес запросившего хоста. Затем он генерирует пакет, в котором представляется DNS-сервером, который был запрошен компьютером Пети. Делает он это просто: в посылаемом им ложном ответе, в поле IP DNS-сервера, Василий ставит свой собственный IP. Теперь запросивший хост принимает Пупкина за настоящий DNS-сервер. Когда Василий получит новый пакет с запросом от хоста, он поменяет в нем IP-адрес отправителя и перешлет этот измененный пакет на настоящий DNS-сервер. В итоге получается, что Вася является как бы посредником между DNS-сервером и обманутым хостом. Теперь настоящий DNS-сервер думает, что сам Вася посылает запросы, а хост считает, что Вася является натуральным и без консервантов DNS-сервером. Остался только один вопрос: а как же перехватить этот запрос от атакуемого хоста? Перехват возможен только в том случае, если атакующий компьютер находится в той же сети (в том же сегменте), что и несчастный юзер или его DNS-сервер (что, вообще говоря, всегда совпадает). Это ограничение - основной минус такого типа атак.
Развиваемся до cool-хацкера
Представим себе ситуацию, когда злой дядя Вася не находится в сегменте бедного и миролюбивого мальчика (или дяди) Пети. Что же теперь ему делать? Тут нам (а точнее, тов. Василию) на помощь приходит другой тип DNS-атак - создание ложного DNS-сервера. Суть состоит в том, что компьютер Василия Пупкина атакует несчастного Петю Лоханкина массированным потоком ложных DNS-ответов (спам в другой форме :)). Исходя из описанных выше проблем UDP-протокола, опишем что нам потребуется для генерации ложного DNS-ответа
1. Совпадение IP-адреса отправителя ответа с IP-адресом DNS-сервера.
2. Совпадение доменных имён, содержащихся в DNS-ответе и DNS-запросе.
3. Совпадение портов DNS-ответа и DNS-запроса.
4. Совпадение поля ID в DNS-ответе и запросе.
Это главные условия, которые надо соблюдать Василию Пупкину для реализации удаленной DNS-атаки. Если с первым и вторым пунктами проблем не возникнет (данные мы знаем и подделать их так же легко, как билеты в Новосибирской зоопарк: нужен просто принтер.. Ээ.. Руки и компьютер :)), то с третьим и четвертым будут проблемы. Как же понять, с какого порта посылался запрос? Тут поможет только способ грубой силы, то есть - брутфорс (перебор). Эта задача облегчается тем, что науке уже давно известно, что порт отправителя запроса меняется только в положительную сторону и всегда на единицу. Так как изначальное его значение - 1023 (также давно известное открытие), то просто перебираем это значение путем увеличения его на единицу.
Осталось решить задачу с полем ID в пакетах DNS-ответа и запроса. С этим дело обстоит немного полегче. Поле ID, как правило, либо равно единице, либо близко к нулю (зависит от браузера несчастного, на которого нацелился массивный и злой мозг Василия). Проблема решается всё так же - брутфорсом.
Далее, приступаем непосредственно к атаке. Предположим, что наш миролюбивый Петя решил зайти на свой любимый сайт www.cool-porno.ru (не такой уж он и миролюбивый!). Василий Пупкин никак не может ему этого позволить, так как на этом сайте содержится фотография его девушки в обнаженном виде! Василий начинает в темпе генерировать пакеты с ложным DNS-ответом и посылает их непрерывным потоком на машину Пете. Естественно, Василий так и не узнает, когда точно был послан запрос на DNS-сервер, но ему это и не нужно. После того как Петя отправит запрос на DNS-сервер, его компьютер пытается поймать DNS-ответ, но вместо этого уже неизвестно, сколько времени, принимает шторм ложных пакетов с хоста озверевшего Василия. Все неправильно сгенерированные пакеты отметаются компьютером Пети, а принимается только тот единственный пакет, в котором совпали номер порта отправителя и поле ID. И вот в тот прекрасный момент, когда ложный DNS-ответ будет принят, Петя будет посылать свои дальнейшие запросы не на DNS-сервер, а на компьютер Васи. А Вася, в свою очередь, в ложном DNS-ответе может вставить IP-адрес любого сайта, который ему захочется показать Пете и тем самым направить Петю не на желаемый www.cool-porno.ru, а куда-нибудь по-хлеще. Такие дела.
Стоит отметить, что у Васи есть не только возможность подменять Петины пакеты DNS-ответов, а и просматривать весь Петин траффик в случае реализации атаки с ложным DNS и отправке Пете правильных ответов (в этом случае цель может быть другая: узнать тайные увлечения Пети по вечерам).
Полноценный обзор и подробное описание всех существующих типов DNS-атак дано в следующей статье DNS-атаки: полный обзор по схемам атак.
A.S.