Без службы имен доменов в Internet не происходит ничего. DNS относится к самым старым и наиболее часто используемым протоколам. Даже если до сих пор крупномасштабных атак против него не наблюдалось, иммунитетом против них сервер DNS так и не обзавелся.

DNS берет на себя роль телефонного справочника. Если известно имя хоста в Internet или имя сервера, то DNS предоставляет соответствующий IP-адрес, и наоборот. Возможность ввода строки наподобие http://www.lanline.de или http://www.lanmag.ru вместо двенадцатизначных чисел является краеугольным камнем использования Internet. Без DNS роль Internet, возможно, до сих пор сводилась бы к коммуникациям между университетами и другими официальными структурами.

Каждый пользователь, отправляющий электронное письмо и вводящий имя сервера Web в браузере, пользуется «своим» сервером DNS несколько раз в день. То, что сравнительно небольшое количество серверов DNS может справляться с огромным числом запросов, объясняется простым, но эффективным принципом их работы. Каждый компьютер знает IP-адрес своего ближайшего сервера DNS. Адрес либо жестко задается администратором, либо передается по протоколу динамической конфигурации хоста (Dynamic Host Configuration Protocol, DHCP) при назначении IP-адреса. В случае необходимости преобразования имени хоста в IP-адрес приложение сначала связывается с сервером DNS. Если тот знает корректный IP-адрес, к примеру, потому, что он остался в кэш-памяти после предыдущего запроса, то сервер DNS называет себя «уполномоченным» за него и сообщает его клиенту. Если же адрес неизвестен, то тогда инициируется обращение к вышестоящему серверу DNS. По этому принципу опрос ступеней в иерархии производится до тех пор, пока не отыщется сервер, владеющий информацией о нужном адресе. Затем адрес передается вниз по иерархии, пока не достигнет клиента.

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

Запросы DNS используют порт 53 пользовательского протокола данных (User Data Protocol, UDP) и не защищаются посредством аутентификации. Часто и брандмауэрам приходится пропускать сообщения на этот порт, когда собственный сервер DNS должен передать свои данные вышестоящей инстанции.

ПОМЕХИ ИЛИ МАНИПУЛИРОВАНИЕ

DNS могут быть подвержены двум типам атак. Первая — «отказ в обслуживании» (Denial of Service, DoS) — не является специфической для DNS, она может быть направлена против любых других служб. При этом посредством предельно высоких нагрузок — частично связанных с передачей ошибочных пакетов — производится попытка сделать службу недоступной для решения ее обычных задач. При атаках DoS почти всегда задействуется большое число компьютеров, управление которыми осуществляется удаленно при помощи внедренных «троянцев». Эта разновидность называется «распределенная атака DoS» (Distributed DoS, DDoS). Ее нельзя предотвратить, ее можно лишь ослабить или заблокировать и переждать.

Все атаки, в том числе на DNS, похожи по своим сценариям. В октябре 2002 г. имела место целенаправленная атака на несколько корневых серверов DNS, организованная при помощи пакетов протокола управляющих сообщений Internet (Internet Control Message Protocol, ICMP). Она длилась около часа и была заметна в нескольких сетях. Однако затронутыми оказались лишь определенные части Internet. Причина того, что последствия не оказались более тяжкими, заключалась в относительно высокой степени осознания опасности сетевыми операторами. Некоторые конфигурировали свои маршрутизаторы таким образом, что при достижении определенного количества пакетов системы перехватывали большую их часть, благодаря чему последствия агрессивных действий оказались незначительными.

Операторам DNS все же повезло: протокол ICMP весьма просто фильтруется. Атака могла быть проведена и с обычным трафиком, что заметно усложнило бы ее отражение. Корневые серверы считаются достаточно невосприимчивыми. Их базы данных с записями DNS, так называемые зоны, относительно невелики. Многие компании регулярно загружают зону с корневого сервера на собственный сервер DNS, чтобы ускорить обработку запросов. Раз в неделю записи обновляются.

Но домены высшего уровня таким образом защитить уже нельзя. Изменения в базах данных происходят гораздо чаще, поэтому статичная копия привела бы к появлению устаревшей информации. Как следствие, атака DoS, как и прежде, остается потенциально опасной. Наряду с ограничением скорости эффективное противодействие обеспечивает только размещение службы на нескольких серверах и распределение запросов по альтернативным адресам. Если атаки DDoS нацелены на создание помех в функционировании служб DNS, то прочие разновидности ориентируются на манипулирование содержимым. У того, кто подсовывает клиенту неверный IP-адрес для имени хоста, есть масса возможностей для извлечения из этого выгоды. Он может переводить запросы с запрашиваемого сайта на собственную страницу Web или просматривать трафик и таким образом перехватывать номера кредитных карт и другие сведения. Подобное внедрение неверной информации, называемое «отравление кэша», известно с 1993 г.

Используемый прием основан на концепции серверов DNS сохранять в кэше однажды определенные адреса и не требовать их заново у вышестоящих серверов DNS при последующих запросах. Записи остаются в кэше до окончания заданного срока (Time to Life, TTL).

СЛАБОСТИ DNS

Запросы DNS не аутентифицируются. Клиент принимает ответы сервера, если IP-адрес источника и хоста, а также идентификатор транзакций и номер порта верны. Выяснить IP-адрес реального сервера DNS совсем не сложно, однако идентификатора транзакций и номера порта должно быть достаточно для защиты запроса. Впрочем, оба страдают от недостатков используемого в большинстве случаев для реализации сервера DNS программного обеспечения BIND (Berkeley Internet Domain Consortium). По данным Internet Systems Consortium (ISC), три четверти всех серверов DNS применяют BIND. Особенно прославилась своими ошибками и облегчающим атаки небрежным исполнением версия 8. Так, для запросов DNS от различных компьютеров об одном имени хоста BIND использует одинаковые номера портов. Чтобы их определить, атакующему необходимо всего лишь послать запрос серверу DNS о желаемом имени хоста. Дело останется только за правильным идентификатором транзакций. В этом случае атакующий может прибегнуть к другой слабости BIND 8: идентификатор принимает числовые значения из интервала от 1 до 65535. Этого слишком мало, чтобы хоть что-то противопоставить попытке нападения с использованием мощных компьютеров и высокой пропускной способности (подключения по DSL вполне достаточно). Когда хакер начинает атаку с удаленно управляемых компьютеров, которые клиенту представляются «настоящим» сервером DNS с фальшивым IP-адресом, успех обеспечен, если хотя бы одна машина применяла правильные идентификатор транзакций и номер порта. При одновременном нападении посредством DDoS на настоящие серверы DNS или полном блокировании этой службы победа остается за злоумышленником.

Ему помогает одна математическая особенность, называемая «парадокс дня рождения»: уже после 300 попыток шанс попадания на нужный идентификатор равен 50%. После 700 пакетов вероятность вырастает до 99%. Однако это еще не все. BIND в свое время оптимизировался в целях обеспечения простой конфигурации и высокой готовности, аспекты обеспечения безопасности стояли на втором плане. Следствием стало применение очень простого генератора псевдослучайных чисел. Если его результаты подвергнуть анализу изменения фазы, окажется, что генерируемые случайные числа вовсе не случайны. В восьмой версии BIND уже после трех выданных генератором чисел можно правильно определить следующее с вероятностью в 100%.

Заметим, что в BIND 9 используется другой генератор случайных чисел, благодаря применению которого вероятность вычисления значения составляет лишь 20%. Таким образом, для угадывания правильного идентификатора транзакций необходимы больше времени и более высокая пропускная способность. Тем не менее вместе с атакой DDoS на реальный сервер DNS этого значения все еще хватает, чтобы успешно провести «отравление кэша». Другая реализация DNS — djbdns (автор Д. Дж. Бернштайн) — также оказывается восприимчивой к анализу изменения фазы: вероятность «попадания в цель» не ниже 30%. Однако разработчик не забыл о слабостях неаутентифицированных запросов DNS и позаботился о том, чтобы для каждого запроса djbdns генерировала новый номер порта. В результате необходимо угадать две переменные, что заметно усложняет проведение атаки. Но, как отмечает сам автор djbdns, атакующий, имея в своем распоряжении высокую пропускную способность, рано или поздно своего добьется.

ОКАЗАНИЕ ПОМОЩИ

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

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

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

Рисунок 1. Взгляд со стороны: на Zonecheck.fr можно получить анализ собственной конфигурации сервера DNS.

В качестве небольшой помощи для правильной конфигурации сервера DNS в Internet имеются бесплатные тесты. По адресу: http://zonecheck.fr, можно найти хороший тест для параметров DNS (см. Рисунок 1). Если серверы и клиенты расположены за маршрутизатором с трансляцией сетевых адресов (Network Address Translation, NAT), тест предоставляет лишь ограниченную информацию, но в любом случае этот сайт посетить стоит. Кто не боится дополнительных издержек, может установить в собственной сети конфигурации с разделением обязанностей между серверами (split-split) — в таком случае за запросы в Internet отвечает общедоступный сервер DNS, в то время как обслуживание запросов пользователей в локальной сети берет на себя защищенный брандмауэром сервер кэширования (см. Рисунок 2).

Рисунок 2. Разделение общедоступного и кэширующего сервера имен доменов значительно снижают опасность нападения.

Еще один возможный путь для защиты сервера DNS — использование готового оборудования, к примеру устройств от Borderware и Nominum. Они базируются на защищенной, «закаленной», операционной системе, в которой известные «дыры» системы безопасности уже устранены, а необязательные программные модули удалены. Разумеется, на них устанавливается последняя версия программного обеспечения DNS со всеми заплатами. Специализированное аппаратное обеспечение повышает производительность услуги, а программное обеспечение реализует простое управление и конфигурирование. Часто интеграция с ADS уже встроена, так что службы каталогов в крупных корпоративных сетях интегрируются оптимальным образом. Кроме того, возможно применение конфигураций высокой готовности «главный/подчиненный» и подготовленной стандартной конфигурации для распределения на любое количество прочих устройств DNS.

Рекомендация по использованию самого современного программного обеспечения DNS, конечно, имеет силу для каждого владельца сервера DNS, не важно, идет ли речь о специализированном оборудовании или обычном сервере. Последней версией, выпущенной ISC, стала BIND 9.3. В нее интегрировано множество мер против «отравления кэша», среди которых — проект IETF по расширению протокола DNSSEC. Несмотря на статус проекта, DNSSEC уже дает возможность проводить тестирование расширений. Дополнения в части безопасности DNS предлагают шифрование с открытым ключом для сквозной аутентификации и защиты целостности в целях обеспечения безопасности сервера имен доменов от атак в Internet, среди которых и «отравление кэша». Однако по умолчанию расширения в версии 9.3 отключены.

Эльмар Торок — независимый автор. С ним можно связаться по адресу: redaktion@lanline.awi.de.


Ресурсы Internet

Дополнительную информацию об атаках DNS можно найти на следующих сайтах.

Домашняя страница BIND 9 находится на http://www.bind9.net.

С информацией о Secure DNS можно познакомиться на http://www.dnssec.net/.

Как ограничить скорость для ICMP можно узнать на http://www. iepm.slac.stanford.edu/monitoring/limit/limiting.html.

Описание анализа изменения фазы опубликовано на http://www.lurhq.com/cachepoisoning.html.

Сведения о djbdns приводится на http://www.cr.yp.to/djbdns.html.

Подробные объяснения «парадокса для рождения» даются на http://www.en.wikipedia.org/wiki/Birthday_paradox.


? AWi Verlag