Чтобы отправить запрос любому сервису или устройству в сети Интернет, вам необходимо знать его IP-адрес. IP-адреса неудобны для человека, но благодаря DNS сегодня мы можем использовать удобочитаемые «адреса», такие как google.com — мы называем их доменами. Когда вы вводите «google.com» в браузере, ваша ОС отправляет запрос преобразователю DNS, чтобы получить IP-адрес для этого домена под ним. И преобразователь DNS отправляет запрос на авторитетный сервер имен, чтобы получить эту информацию.

Чтобы ускорить и оптимизировать этот процесс, преобразователи DNS обычно кешируют ответы от авторитетных серверов имен (обычно на период, указанный «TTL» в записи DNS). В следующий раз, когда кто-то запросит «google.com», преобразователь DNS возьмет эти данные из кеша, если только кеш не пуст или не просрочен.

Хорошо, пока все выглядит хорошо. Все работает, пользователи могут открывать google.com без каких-либо задержек.


DNS-спуфинг

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


Как это работает

Резолверы DNS и серверы имен используют UDP для отправки запросов и ответов. В отличие от TCP, UDP не использует «рукопожатия» для установления соединения, не проверяет, готов ли получатель к приему, и не проверяет, пришел ли ответ от законного отправителя. То есть злоумышленник может отправить сообщение DNS Resolver, выдавая себя за законный сервер, отвечающий на запрос:

  • Злоумышленник запрашивает «пример.com” из DNS Resolver
  • И в то же время отправляет поддельный ответ DNS Resolver типа «IP-адрес например.com — 1.2.3.4» (где 1.2.3.4 — это IP-адрес вредоносного веб-сайта)
  • Если DNS Resolver сначала получает сообщение злоумышленника, он кэширует поддельные данные — распознаватель не может точно проверить, пришло ли это сообщение с авторитетного сервера имен.
  • В следующий раз, когда кто-то спросит «пример.comDNS Resolver ответит поддельными данными — «IP-адрес для example.com — 1.2.3.4».
  • И что кто-то может открыть вредоносный сайт в браузере


Проблемы с спуфингом DNS

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

  • Порт UDP — многие преобразователи DNS используют случайный порт для дополнительной безопасности.
  • Идентификатор запроса
  • Если DNS Resolver кэширует этот конкретный запрос вообще

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

Риск отравления кеша DNS реален.


SSL и HSTS

Эта атака частично смягчается SSL. Злоумышленники не могут сгенерировать SSL-сертификат, не имея доступа к вашему домену. Если пользователь пытается открыть пример.com (а также пример.com IP-адрес был получен от DNS Resolver с отравленным кешем), то любой современный браузер выдаст ошибку и не позволит пользователю это сделать. Однако бывают случаи, когда пользователи все равно будут открывать http-версию сайта:

  • Некоторые из них попытаются «исправить» эту ошибку, изменив «https» на «http».
  • У некоторых из них в закладках может быть http-версия.
  • Злоумышленник может поделиться http-ссылкой, например, используя электронную почту для рыбалки.

Заголовок HSTS (сокращение от HTTP Strict Transport Security) может немного улучшить его. Этот заголовок указывает браузеру открывать этот веб-сайт только с использованием https. Значение, если пользователь ранее открыл пример.com браузер не позволяет ему использовать http-версию. Но если пользователь открывает сайт в первый раз — он сможет использовать http версию и откроется вредоносный сайт.


DNSSEC

Система доменных имен была создана без особого учета безопасности. И это привело к таким уязвимостям. DNSSEC (расширения безопасности системы доменных имен) был создан, чтобы заполнить этот пробел. DNSSEC — это функция системы доменных имен, которая аутентифицирует ответы на поиск доменных имен и гарантирует целостность данных. Он не обеспечивает защиту конфиденциальности для этих запросов, но не позволяет злоумышленникам отравлять ответы на DNS-запросы.

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

  • Злоумышленник запрашивает «пример.com” из DNS Resolver
  • И в то же время отправляет поддельный ответ DNS Resolver типа «IP-адрес например.com — 1.2.3.4» (где 1.2.3.4 — это IP-адрес вредоносного веб-сайта)
  • Если DNS Resolver сначала получит сообщение злоумышленника, оно проигнорирует это сообщение, поскольку цифровая подпись недействительна.
  • Затем DNS Resolver получает ответ от авторитетного сервера и кэширует его.
  • Атака не удалась

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

Вы можете проверить список TLD, которые поддерживают DNSSEC, здесь https://support.openprovider.eu/hc/en-us/articles/216648838-List-of-TLDs-that-support-DNSSEC. Если ваш регистратор доменов/оператор DNS не поддерживает DNSSEC (или не поддерживает DNSSEC для вашего TLD), вы можете перейти к другому регистратору или оператору.


Компрометация регистратора DNS

Злоумышленник может каким-то образом получить доступ к вашему регистратору DNS:

  1. Ваш пароль может быть скомпрометирован
  2. Или регистратор DNS может иметь некоторые недостатки безопасности на своей стороне

В первом случае предотвратить атаку помогут общие правила безопасности:

  • Используйте надежный пароль
  • Храните пароль в безопасном месте, не храните его в виде открытого текста, не делитесь паролем и т. д.
  • Используйте двухфакторную аутентификацию

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


DNS-мониторинг

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

  • Проверьте, имеют ли определенные записи ожидаемые значения. Например, если вы A запись для вашего домена имеет ожидаемый IP-адрес
  • Проверьте, не были ли изменены записи.

Есть сервисы, позволяющие настроить DNS-мониторинг.


Вывод

Безопасность DNS — это не первое, что приходит на ум, когда вы начинаете думать о безопасности приложений. Однако угрозы реальны, и такие атаки случаются (и иногда обходятся пользователям в большие деньги). https://rekt.news/curve-finance-rekt/). Так что лучше предохраняться.