Ранее в статье, посвящённой DNS-серверам, нами была рассмотрена схема их взаимодействия между собой при разрешении доменного имени. При этом не были учтены некоторые вопросы безопасности, которые вносят свои коррективы в работу серверов за счёт использования средств защиты от атак, одним из которых является механизм DNSSEC. Рассмотрим особенности его применения и влияние на работу системы DNS.
Уязвимые места в работе DNS-протокола
При разрешении доменного имени DNS-клиенты (резолверы) постоянно обращаются к серверам для получения авторитетной информации о домене в виде его собственного IP-адреса. Для ускорения работы системы такие запросы кэшируются, и в дальнейшем эта информация используется серверами для формирования ответов другим DNS-клиентам.
В случае, если в кэш каким-либо образом попадает недостоверный IP-адрес, то он быстро распространяется по сети, что приводит к массовому перенаправлению клиентов с адреса запрашиваемого домена на адрес, сохранённый в кэше. Именно эту уязвимость чаще всего используют злоумышленники. Такой тип атаки получил название отравление кэша DNS (DNS cache poisoning).
«Отравить» кэш можно, например, следующим образом.
Объект взлома с именем Server1 формирует запрос к объекту-злоумышленнику с именем Server2. При этом А-запись может выглядеть следующим образом:
subdomain.attacker.mynewsite. IN A
Server2 посылает следующий ответ:
Answer:
(no response)
Authority section:
attacker.mynewsite. 3600 IN NS ns.target.mynewsite.
Additional section:
ns.target.mynewsite. IN A a.b.c.d
Где a.b.c.d – IP-адрес Server2.
В результате Server1 сохраняет в своём кэше указанный в дополнительной секции IP-адрес Server2. Это позволит в дальнейшем распространителю недостоверной информации отвечать на запросы для всего домена target.mynewsite, то есть перенаправлять DNS-клиентов туда, куда нужно злоумышленнику, например, на зараженный вирусами-вымогателями сайт.
Таким образом, если сервера не будут проверять ответы других серверов на корректность, всегда будет высока опасность отравления кэша и, соответственно, выдачи ложных адресов в системе DNS.
Противостоять атакам можно с помощью принятия следующих мер на стороне DNS-сервера:
- Игнорирование записей, которые напрямую не относятся к DNS-запросу;
- Использование случайных UDP-портов для выполнения запросов в системе DNS;
- Применение механизма DNSSEC.
Игнорирование записей, как и любое проявление уменьшения уровня доверия к получаемой информации, несомненно, уменьшит вероятность заражения кэша, однако полностью его не исключит.
Метод защиты с использованием UDP-портов мог бы быть результативным, если бы сетевые устройства, выполняющие трансляцию портов (PAT), не теряли случайность, созданную сервером. Это сводит на нет работу серверного оборудования, не давая возможности обеспечить случайный выбор порта.
Механизм DNSSEC (Domain Name System Security Extensions) использует цифровую подпись для обеспечения целостности данных. Использование метода может быть эффективным лишь при условии наличия специального программного обеспечения на стороне DNS-сервера и клиента. Ниже рассмотрим использование механизма более детально.
Основы DNSSEC
Расширение позволяет выстроить цепь «доверительных» отношений между серверами и тем самым обезопасить их от получения ложных сведений. Эта цепь идёт от корневой зоны, поэтому процесс внедрения DNSSEC начинается с подписи корневых зон доменов, а затем распространяется на корневые серверы доменных областей. Это долговременный процесс, который начался ещё несколько лет назад и до сих пор полностью не завершён.
В спецификациях RFC 4033, RFC 4034 и RFC 4035 детально описана структура протокола DNSSEC, что позволяет внедрять его повсеместно для всех доменных областей сети, большая часть которых уже использует его на практике.
Суть использования механизма заключается в следующем. Каждой из хранящихся на сервере DNS-записей доменной области ставится в соответствие так называемая цифровая подпись. Ответ сервера может считаться доверительным только в случае прохождения всех проверок и, соответственно, полной верификации указанной записи. Для этих целей используется механизм ключей.
Главный ключ KSK (Key Signing key) необходим для подписи ключа корневой зоны, имеющего название ZSK (Zone Signing Key). ZSK-ключи являются временными и обновляются четыре раза в год. Их создаёт одно из подразделений международной корпорации ICANN.
В вершине доверительной цепи находится корневой домен и ключ ZSK корневой зоны.
Обработка DNS-запросов при включенном DNSSEC
Приведём упрощённую схему взаимодействия DNS-серверов в случае подключения расширения безопасности:
- Пользователь вводит адрес сайта information.com;
- Проверяется наличие ответа в кэше локального сервера и в случае его отсутствия DNS-клиент (резолвер) запрашивает данные у сервера провайдера;
- В случае отсутствия данных по запрашиваемому домену запрос перенаправляется на корневой сервер, содержащий признак подключения расширения DNSSEC;
- Корневой сервер возвращает адрес сервера, который отвечает за доменную область .com (m.b.v.net), а также NS и DS записи и их подпись;
- DNS-клиент проводит проверку ZSK, подписи DS-записей корневой зоны и в случае успеха подпись DNSKEY-записи уровня ниже зоны .com;
- В случае успешности всех выполненных на предыдущем шаге проверок, резолвер перенаправляет свой запрос по адресу m.b.v.net;
- m.b.v.net выдаёт ответ, что ответственным за зону information.com является сервер z.com и возвращает подписанные с помощью KSK-ключа зоны .com набор ZSK-ключей для зоны .com, а также подписанную с помощью ZSK зоны .com DS-запись KSK зоны information.com;
- DNS-клиент сравнивает полученный от корневого сервера хеш с тем, который он сам вычислил из KSK зоны .com и который был получен от m.b.v.net, и в случае успеха проверяет подписи ключей из зоны .com и начинает доверять ZSK этой зоны. Также проверяется KSK зоны information.com;
- В случае успешности выполнения проверок предыдущего этапа резолвер получает DS-запись KSK зоны information.com и адрес сервера z.com, где хранится информация о зоне information.com;
- Клиент обращается на сервер z.com за IP-адресом сайта information.com и при этом выставляет признак подключения DNSSEC;
- Когда сервер z.com узнаёт, что зона information.com находится на нём же, он отправляет клиенту ответ с подписанными с помощью KSK зоны information.com набор ZSK-ключей зоны information.com и подписанный ZSK IP-адрес сайта information.com;
- Клиент проверяет KSK зоны information.com, ZSK зоны information.com, а также IP-адрес сайта information.com;
- В случае успешной проверки резолвер возвращает пользователю ответ с IP-адресом сайта information.com и подтверждением, что ответ успешно прошёл верификацию.
Здесь DS (Delegation of Signing) – запись, содержащая хеш домена наследника и его KSK-ключа; DNSKEY – запись, содержащая публичную часть ключа и его идентификаторы.
Приведённый алгоритм является базовым и всегда выполняется при разрешении доменного имени в системе DNS.