Что такое DNSSEC и зачем он нужен?

Что такое DNSSEC и зачем он нужен?
image
DNSSEC (Domain Name System Security Extensions) — это технология, которая повышает безопасность системы доменных имён (DNS). DNS — это служба, которая переводит доменные имена, например, www.example.com, в IP-адреса, например, 192.0.2.1, которые используются для обмена данными в сети Интернет. DNSSEC защищает DNS от атак, которые могут подменить IP-адреса и перенаправить пользователей на фальшивые или вредоносные сайты.

Как работает DNSSEC?

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

DNSSEC использует иерархическую структуру ключей, которая соответствует структуре доменных имен. Каждая зона имеет свой собственный ключ, который подписывает её DNS-записи, и свой родительский ключ, который подписывает её DNSKEY запись. Это позволяет создать цепочку доверия от корневой зоны (.) до конечной зоны (например, www.example.com). Корневая зона имеет специальный ключ, называемый ключом подписи ключей (KSK), который подписывает все DNSKEY записи корневых серверов. Этот ключ является основой доверия для всей системы DNSSEC.

Зачем нужен DNSSEC?

DNSSEC нужен для защиты пользователей Интернета от атак, которые могут нарушить работу DNS и повлиять на доступность и безопасность сайтов и сервисов. Некоторые из таких атак это:

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

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

Как включить DNSSEC?

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

  • Подписать зону — это процесс, при котором генерируются ключи для зоны и создаются подписи для DNS-записей. Это можно сделать с помощью специального программного обеспечения, например, BIND, NSD, Knot DNS и т.д. После этого необходимо загрузить DNSKEY запись зоны на DNS-сервер регистратора, который поддерживает DNSSEC. Регистратор в свою очередь передаст DNSKEY запись зоны на DNS-сервер родительской зоны, который подпишет её своим ключом. Таким образом, зона будет включена в цепочку доверия DNSSEC.
  • Настроить DNS-сервер — это процесс, при котором DNS-сервер настраивается для поддержки DNSSEC. Это означает, что DNS-сервер должен быть способен генерировать и проверять подписи, а также обрабатывать DNS-запросы и ответы с DNSSEC. Для этого также можно использовать специальное программное обеспечение, например, BIND, NSD, Knot DNS и т.д. Кроме того, DNS-сервер должен иметь актуальный публичный ключ корневой зоны (KSK), который используется для проверки DNSKEY записей корневых серверов. Этот ключ обновляется периодически и распространяется через специальные каналы, например, RFC 5011.

После выполнения этих шагов, зона и DNS-сервер будут готовы к работе с DNSSEC.

Как проверить DNSSEC?

Для того, чтобы проверить, что DNSSEC работает корректно, можно использовать различные онлайн-сервисы, например, DNSViz, DNSSEC Analyzer, Verisign DNSSEC Debugger и т.д. Эти сервисы позволяют визуализировать и анализировать DNS-данные и цепочки доверия для любого доменного имени. Они также показывают, какие DNS-запросы и ответы были сделаны, какие подписи и ключи были проверены, и какие ошибки или предупреждения были обнаружены.

Для примера, рассмотрим, как можно проверить DNSSEC для домена www.securitylab.ru с помощью сервиса DNSViz. Для этого необходимо ввести доменное имя в поле поиска на сайте https://dnsviz.net/ и нажать кнопку “Analyze”. После этого сервис сделает несколько DNS-запросов и ответов, связанных с доменом, и покажет результат в виде графа. На графе можно увидеть, как DNS-клиент строит цепочку доверия от корневой зоны до домена www.securitylab.ru, проверяя подписи и ключи на каждом шаге. Также можно увидеть, какие DNS-записи были получены для домена, например, A, AAAA, MX, CNAME и т.д. Если DNSSEC работает правильно, то все подписи и ключи должны быть действительными, и все DNS-записи должны быть подтверждены. На графе это обозначается зелёным цветом. Если же DNSSEC работает неправильно, то могут возникнуть разные ошибки или предупреждения, например, недействительные подписи, отсутствующие ключи, несоответствие данных и т.д. На графе это обозначается красным или жёлтым цветом. В этом случае DNS-клиент не сможет построить цепочку доверия и не доверит DNS-данным.

Заключение

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

Ищем баги вместе! Но не те, что в продакшене...

Разбираем кейсы, делимся опытом, учимся на чужих ошибках

Зафиксируйте уязвимость своих знаний — подпишитесь!