Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Кибератаки в подробностях: вмешательство в работу DNS

Оригинал: Cyber Attacks Explained: DNS Invasions
Автор: Prashant Phatak
Дата публикации: 22 февраля 2012 г.
Перевод: А.Панин
Дата перевода: 8 декабря 2012 г.

Нам часто приходится видеть сайты, подвергшиеся дефейсу, главные страницы которых заменены злоумышленниками. Как взломщикам удается проводить подобные атаки и как мы можем защитить нашу сетевую инфраструктуру от них? В данной статье рассказывается о том, как взломщикам удается вмешиваться в работу DNS (системы доменных имен). Атаки на DNS технически сложны и опасны для сетевой и Web-инфраструктуры. Администраторам сетей следует знать как можно больше об этом типе атак и предпринимать все возможные действия для обеспечения безопасности инфраструктуры, которую они обслуживают.

Как нам известно, причиной существования DNS является тот факт, что человек не может запомнить множество IP-адресов для доступа к сайтам, при этом он с легкостью может запомнить имена сайтов, состоящие из букв и цифр. Система DNS проектировалась в то время, когда интернет использовался дружественно настроенными людьми, что привело к некоторым особенностям работы этой системы в современности.

Рисунок 1 отражает фундаментальные принципы работы службы разрешения сетевых имен. Когда приложение (такое, как браузер) хочет установить соединение с удаленной службой, оно совершает запрос IP-адреса у DNS-сервера. Этот запрос в форме пакета отправляется через порт UDP номер 53, после чего сервер возвращает ответ в форме пакета. (Следует помнить о том, что по причине ограничения размера данных в UDP-дейтаграмме 512 байтами, стек протоколов автоматически использует протокол TCP для осуществления запросов и приема ответов.) Когда клиент принимает ответ, он добавляет данные в свой локальный кэш, что позволяет ускорить последующие обращения к этому же домену. Элементы локального кэша автоматически уничтожаются после истечения их времени жизни (параметр TTL (Time to Live)).

Разрешение доменных имен
Рисунок 1: Разрешение доменных имен

Система DNS использует такие типы записей, как A, CNAME, SOA, MX и другие. Хотя описание этих типов записей и выходит за рамки данной статьи, системным администраторам важно знать о том, когда и как их следует использовать, а перед их использованием должно проводиться исследование с точки зрения будущей безопасности системы. Перед тем, как рассмотреть атаки на систему DNS, нам необходимо рассмотреть два типа запросов - итерационные и рекурсивные.

  • Итерационные запросы DNS: В то время, как клиент отправляет запрос DNS-серверу, желая получить информацию о домене, DNS-сервер может как располагать, так и не располагать информацией об этом домене. Если у DNS-сервера нет ответа, вместо завершения запроса, он отправляет имя высшего DNS-сервера, у которого может быть в распоряжении необходимая информация, клиенту. Обычно этот процесс называют перенаправлением DNS-запросов (DNS referral). Клиент отправляет запрос следующему (указанному) серверу; если у него нет ответа, он отправляет клиенту имя высшего сервера. Этот процесс продолжается до тех пор, пока клиент получает или IP-адрес, или сообщение об ошибке о невозможности выполнения запроса.
  • Рекурсивные запросы DNS: В этом случае процесс начинается с того, что клиент производит запрос разрешения имени домена напрямую к DNS-серверу. Если у DNS-сервера нет ответа, предполагается, что он выполнит работу по обмену данными с высшими серверами вместо того, чтобы просто предоставить их имена клиенту. Снова, если высший сервер не обладает информацией для ответа на запрос, он переадресует запрос высшему серверу. Этот процесс продолжается до тех пор, пока запрос не доходит до корневого DNS-сервера, который должен обладать необходимой информацией и клиенту возвращается ответ, а в случае, если запрошенного имени не существует, клиенту возвращается сообщение об ошибке по цепочке серверов. В отличие от итерационного метода, рекурсивный запрос считается более агрессивным в получении результата.

Итерационные запросы обычно совершаются DNS-серверами, в то время, как рекурсивные запросы совершаются клиентами, так как данный тип запросов позволяет не прибегать к сложному механизму обработки перенаправлений DNS-запросов. С точки зрения безопасности систем, администраторам необходимо знать основы работы систем DNS, так как в организации могут функционировать несколько DNS-серверов, синхронизируя записи зон для поддержания соответствия данных.

Данные DNS синхронизируются периодически без необходимости перезапуска системных служб, а когда производятся изменения на корневом сервере, он автоматически отправляет данные об изменениях нижестоящим серверам. Время, которое требуется для синхронизации данных устанавливается параметром времени жизни каждой записи. В случае географически распределенных DNS-серверов, период синхронизации данных может длиться в течение дня, так как каждый из серверов цепочки использует свой кэш для ускорения обработки запросов.

Атаки на системы DNS

Было замечено, что системные администраторы тратят много времени на разработку систем безопасности для приложений, серверов и других компонентов инфраструктуры, но, к сожалению, имеют склонность забывать о системах безопасности для DNS-серверов. Рассмотрите рисунок 2, на котором показаны возможные слабые места DNS-серверов, которые делают делают их уязвимыми к атакам. Система DNS спроектирована таким образом, что большая часть обмена данными происходит по протоколу UDP, в ней не предусмотрено встроенной системы безопасности и нет встроенной поддержки аутентификации - все это делает ее более уязвимой к атакам, чем другие сетевые службы. Давайте рассмотрим несколько типов наиболее распространенных атак на DNS.

Возможные слабые места DNS-серверов
Рисунок 2: Возможные слабые места DNS-серверов

Модификация кэша DNS (DNS cache poisoning)

Эта атака позволяет воздействовать на процесс разрешения имен двумя способами. При использовании первого способа взломщик устанавливает вредоносное программное обеспечение (руткит или вирус), которое должно контролировать локальный кэш DNS на машине клиента. После этого записи в локальном кэше DNS модифицируются для указания на другие IP-адреса.

Например, если браузер пытается получить доступ к сайту с адресом http://www.cnn.com/, вместо IP-адреса CNN он получает адрес, установленный программным обеспечением взломщика, который обычно ведет на сайт, расположенный на сервере, принадлежащем взломщику, и содержащий вредоносное программное обеспечение или оскорбляющее пользователя сообщение.

Второй, более опасный способ, заключается в том, что взломщик атакует DNS-сервер и модифицирует его локальный кэш, таким образом, все серверы, использующие этот сервер для разрешения имен, будут получать некорректные IP-адреса, что приведет в конечном счете к нарушению их работы и может закончиться потерей или похищением информации.

В очень редких случаях взломщики могут получить доступ к корневому DNS-серверу, который хранит основные записи корневых доменов, такие, как .com, .net или записи систем доменных имен отдельных стран. Взломщики могут модифицировать записи на этом сервере, при этом другие сервера получат измененные данные автоматически, что может привести к глобальным отключениям коммерческих сетевых служб и сайтов. Хотя подобные ситуации и очень редки, они происходят - не так давно подобной атакой была нарушена работа крупной социальной сети.

Подмена DNS-сервера (DNS hijacking)

Данная атака также часто используется для изменения принципа работы систем DNS. В данном случае не вносится никаких изменений в кэш DNS клиента, но производятся изменения в настройках, после которых все запросы разрешения имен адресуются личному DNS-серверу взломщика. Обычно данная атака ставит своей целью не похищение данных, а сбор статистической информации с компьютера клиента. Все запросы разрешения имен, отправляемые серверу взломщика, выполняются корректно, но при этом взломщик получает информацию сайтах, посещаемых клиентом.

Данная информация может быть использована впоследствии для показа клиенту контекстной рекламы. Некоторые взломщики используют перенаправление пользователей на свои сайты или поисковые системы для получения средств от рекламы или просто для похищения данных и использования приемов социальной инженерии. В случаях, когда данную особенность работы DNS невозможно использовать для получения персональной выгоды, она используется многими известными сайтами и интернет-провайдерами для сбора статистических данных о посещаемых пользователем ресурсах.

Спуфинг DNS-запросов (DNS spoofing)

Эта атака относится к атакам перехвата с участием человека, в ходе нее взломщик получает контроль над сетью, в которой работает DNS-сервер и модифицирует ARP-кэш при помощи спуфинга пакетов. Как только получен контроль над сетью уровня MAC-адресов, взломщик вычисляет IP-адрес DNS-сервера и начинает отслеживать и модифицировать запросы, предназначенные для этого сервера.

Все запросы из сети проходят через компьютер взломщика и достигают реального DNS-сервера. Эта атака может иметь серьезные последствия, так как все компьютеры в сети никоим образом не будут фиксировать факт атаки и будут отправлять все DNS-запросы на адрес компьютера взломщика.

Существует альтернативный способ этой атаки, называемый спуфингом идентификаторов DNS-запросов (DNS ID spoofing). Каждый DNS-запрос и ответ имеют уникальные идентификаторы, предназначенные для того, чтобы разделить между собой запросы, направленные DNS-серверу в одно и то же время. Эти уникальные идентификаторы зачастую формируются из MAC-адреса, даты и времени осуществления запроса и создаются стеком протоколов автоматически.

Взломщик использует сниффер для захвата одного или нескольких запросов и ответов с соответствующими им идентификаторами, после чего формирует запрос с соответствующим идентификатором и с подмененным IP-адресом. В результате этих действий в локальном кэше атакуемой системы сохраняется подмененный IP-адрес. После этого атакуемой системе может быть причинен ущерб путем размещения на сервере с указанным в запросе адресом вредоносного программного обеспечения.

Перезакрепление DNS (DNS rebinding)

Эта атака также имеет название "закрепление DNS" ("DNS pinnig") и является особо сложной атакой. В ходе нее взломщик сначала регистрирует свое собственное доменное имя, затем устанавливает минимальное значение времени жизни записей, которое предотвращает попадание информации об этом доменном имени в кэш.

Атаки отказа в обслуживании в отношении DNS (DNS denial of service)

Как мы узнали из первой статьи серии, бомбардировка потоком UDP- или TCP-пакетов порта 53 с запросами может привести сервер к отказу в обслуживании. Другим методом проведения этой атаки является атака потоком пинг-пакетов или TCP SYN-сегментов. Главной идеей, стоящей за этими действиями, является максимальное использование ресурсов сервера (центрального процессора и оперативной памяти) для того, чтобы сервер перестал отвечать на запросы. Хотя DNS-сервера и защищаются межсетевыми экранами, в том случае, если UDP-порты DNS не заблокированы для доступа из недоверенных сетей, система разрешения доменных имен становится доступной для данного типа атак.

Повышенная нагрузка на DNS (DNS amplification)

Под повышенной нагрузкой понимается загрузка DNS-сервера задачами, которые сервер не в состоянии выполнить. Существует ряд путей загрузки сервера и в конечном итоге перевода его в неработоспособное состояние. Для осуществления одного из методов используется вредоносное программное обеспечение (троян), модифицирующее локальный кэш DNS множества узлов. После этих действий все узлы с измененным кэшем начинают отправлять запросы определенному серверу имен, заранее выбранному взломщиками.

Каждый сервер может ответить только на ограниченное число запросов в ограниченный промежуток времени (в зависимости от производительности центрального процессора и конфигурации) и в конечном счете начинает добавлять запросы в очередь. Чем больше клиентов будут подвергаться модификациям локального кэша DNS, тем больше запросов будет отправляться в очередь и в конечном итоге работа сервера будет парализована.

При другом типе данной атаки взломщик модифицирует кэш сервера DNS; вместо замены IP-адресов, соответствующих записям A или CNAME, модификации подвергаются доменные имена. Для усложнения ситуации длина каждого доменного имя может достигать нескольких сот или тысяч символов. Процесс синхронизации данных, начинающийся после внесения изменений, заключается в отправке множества килобайт данных с главного сервера имен нижестоящим серверам и в конце концов клиентам.

После истечения времени жизни записей, процесс синхронизации данных начинается снова и может привести к отказу одного или нескольких DNS-серверов из цепочки. Эти воздействия на кэш моделируют распределенную атаку отказа в обслуживании, опасную и сложно контролируемую.

Защита систем на основе свободного программного обеспечения

В мире свободных систем существует реализация службы разрешения доменных имен, известная во всем мире по причине самой высокой скорости работы в сравнении с аналогами. Этим наиболее широко используемым и известным решением является служба Bind. Тем не менее, ввиду того, что большинство атак на службы DNS используют недоработки протокола, задача по защите свободных систем со службами разрешения доменных имен усложняется.

Самым первым шагом при разработке системы безопасности должна быть блокировка на сетевом уровне. Помимо портов для технического обслуживания сервера, открытыми должны оставаться только порты для DNS-запросов, а все остальные порты должны блокироваться как на межсетевом экране, так и непосредственно на сервере средствами операционной системы.

Следующим важным шагом является контроль того, чтобы на сервер не устанавливалось никакое программное обеспечение, кроме службы разрешения доменных имен. Эта мера предосторожности должна выполняться особенно в том случае, когда производится работа с корпоративным корневым сервером разрешения имен, поддерживающим разрешение всех внутренних имен доменов и обслуживающим все запросы по разрешению имен к внешним серверам для локальной сети.

Часто случается такое, что уязвимость в сторонней программе позволяет совершить проникновение на сервер разрешения имен. Хотя наиболее важные части сетевой инфраструктуры и защиены межсетевым экраном, унифицированными устройствами контроля (Unified Threat Management) и мощными антивирусными программами, часто необхдимо усилить защиту системой обнаружения проникновений (Intrusion Detection System). Она позволяет отражать атаки 2 и 3 уровней OSI, такие, как ARP-спуфинг, IP-спуфинг, атаки с использованием сниффера и другие типы атак.

Кроме важнейших мер предосторожности, описанных выше, существует несколько сложных методов, которые тоже следует применить. Как мы узнали ранее, каждый запрос имеет свой уникальный идентификатор и отправляется в UDP-пакете. К сожалению, из за особенностей проектирования стека DNS, описанных в стандартах RFC, эти идентификаторы легко предсказуемы, поэтому использование случайных чисел для формирования идентификаторов является хорошей идеей, помогающей предотвратить спуфинг-атаки. Аналогично,номер UDP-порта, на котором сервер разрешения имен принимает запросы и отвечает, также легко предсказуем и может быть изменен на случайно выбранный.

Для этих целей существуют программы с открытым исходным кодом, но при их использовании следует помнить, что они вносят небольшую временную задержку в процесс обработки запроса. Относительно новой и популярной технологией защиты является DNSSEC (Расширения безопасности DNS (DNS Security Extensions)). Она защищает клиенты и сервера от атак, при которых модифицируется кэш DNS, подписывая записи с использованием шифрования с открытым ключом. Работая аналогично SSL, запрашивающая данные и отвечающая стороны устанавливают доверенное соединение друг с другом, а как только оно установлено, начинается процесс разрешения имен.

Как только процесс разрешения имен завершается, сессия сбрасывается и таким образом поддерживается безопасность обоих сторон. Технология DNSSEC реализована на большинстве серверов интернет-провайдеров в мире.

Вмешательство в работу DNS является часто встречающимся типом атаки. Оно начинается с эксплуатации недоработок протокола и приводит к получению взломщиком доступа к IT-инфраструктуре или использованию компьютеров для проведения других типов атак, например, фишинга. Системы на основе свободного программного обеспечения также подвержены данным атакам, поэтому системные администраторы должны понимать и использовать техники для защиты обслуживаемой инфраструктуры от потери или похищения данных.


Эта статья входит в серию статей о кибератаках, написанных тем же автором (Prashant Phatak). Другие статьи этой серии: