Dns спуфинг что такое
Как хакеры подменяют DNS-запросы с помощью «отравления» кэша
Подмена сервера доменных имен (DNS) — это кибератака, с помощью которой злоумышленник направляет трафик жертвы на вредоносный сайт (вместо легитимного IP-адреса). Злоумышленники используют метод «отравления» кэша DNS для перехвата интернет-трафика и кражи учетных данных или конфиденциальной информации. Отравление кэша DNS и подмена DNS — тождественные понятия, часто используемые как синонимы. Хакер хочет обманом заставить пользователей ввести личные данные на небезопасном сайте. Как ему этого добиться? С помощью отравления кэша DNS. Для этого хакер подменяет или заменяет данные DNS для определенного сайта, а затем перенаправляет жертву на сервер злоумышленника вместо легитимного сервера. Таким образом хакер добивается своей цели, ведь перед ним открываются широкие возможности: он может совершить фишинговую атаку, украсть данные или даже внедрить в систему жертвы вредоносную программу.
Что такое подмена DNS и отравление кэша?
Прежде чем начать разговор об отравлении кэша DNS, сначала давайте вспомним, что такое DNS и кэширование DNS. DNS — это всемирный каталог IP-адресов и доменных имен. Можно сказать, что это своеобразный телефонный справочник интернета. DNS переводит удобные для пользователей адреса, такие как varonis.com, в IP-адреса, например 92.168.1.169, которые используются компьютерами для работы в сети. Кэширование DNS — это система хранения адресов на DNS-серверах по всему миру. Для ускорения обработки ваших DNS-запросов разработчики создали распределенную систему DNS. Каждый сервер хранит список известных ему DNS-записей, который называется кэшем. Если на ближайшем к вам DNS-сервере нужный IP-адрес отсутствует, он запрашивает вышестоящие DNS-серверы до тех пор, пока адрес веб-сайта, на который вы пытаетесь попасть, не будет найден. После этого ваш DNS-сервер сохраняет эту новую запись в вашем кэше, чтобы в следующий раз получить ответ быстрее.
Примеры и последствия отравления кэша DNS
Концепция DNS не приспособлена к специфике современного интернета. Конечно, со временем DNS был усовершенствован, однако сейчас по-прежнему достаточно одного неправильно настроенного DNS-сервера, чтобы миллионы пользователей ощутили на себе последствия. Пример — атака на WikiLeaks, когда злоумышленники с помощью отравления кэша DNS перехватывали трафик, перенаправляя его на собственный клон сайта. Целью этой атаки было увести трафик с WikiLeaks, и она достигла определенного успеха. Отравление кэша DNS весьма непросто обнаружить обычным пользователям. В настоящее время система DNS построена на доверии, и это является ее слабым местом. Люди чересчур сильно доверяют DNS и никогда не проверяют, соответствует ли адрес в их браузере тому, что им в действительности нужно. Злоумышленники же пользуются этой беспечностью и невнимательностью для кражи учетных данных и другой важной информации.
Как работает отравление кэша DNS?
Отравление кэша DNS означает, что на ближайшем к вам DNS-сервере содержится запись, отправляющая вас по неверному адресу, который, как правило, контролируется злоумышленником. Существует ряд методов, которые используют злоумышленники для отравления кэша DNS.
Перехват трафика локальной сети с помощью подмены протокола ARP
Вы удивитесь, насколько уязвимой может быть локальная сеть. Многие администраторы могут пребывать в уверенности, что перекрыли все возможные доступы, но, как известно, дьявол кроется в деталях.
Одна из распространенных проблем — сотрудники, работающие удаленно. Можно ли быть уверенными, что их сеть Wi-Fi защищена? Хакеры могут взломать слабый пароль от сети Wi-Fi за считанные часы.
Еще одна проблема — открытые порты Ethernet, доступные всем желающим в коридорах, вестибюлях и других общественных местах. Просто представьте: посетитель может подключить к своему устройству кабель Ethernet, предназначенный для дисплея в вестибюле. Как хакер может использовать доступ к вашей локальной сети, полученный одним из перечисленных выше способов? Во-первых, он сможет создать фишинговую страницу для сбора учетных данных и другой ценной информации. Затем он может разместить этот сайт либо в локальной сети, либо на удаленном сервере, и для этого ему потребуется всего-навсего одна строка кода на Python. После этого хакер может начать следить за сетью с помощью специальных инструментов, таких как Betterrcap. На этом этапе хакер изучает сеть и производит рекогносцировку, но трафик все еще проходит через маршрутизатор. Затем злоумышленник может совершить подмену протокола разрешения адресов (ARP), чтобы изнутри изменить структуру сети. Протокол ARP используется сетевыми устройствами для связывания MAC-адреса устройства с IP-адресом в сети. Bettercap будет отправлять сообщения, заставляя все устройства в сети считать компьютер хакера маршрутизатором. Благодаря этой уловке хакер сможет перехватывать весь сетевой трафик, проходящий через маршрутизатор. Достигнув перенаправления трафика, злоумышленник может запустить модуль Bettercap для подмены DNS. Этот модуль будет искать любые запросы к целевому домену и отправлять жертве ложные ответы. Ложный ответ содержит IP-адрес компьютера злоумышленника, переправляя все запросы к целевому сайту на фишинговую страницу, созданную хакером. Теперь хакер видит трафик, предназначенный для других устройств в сети, собирает вводимые учетные данные и внедряет вредоносные загрузки.
Если же хакер не может получить доступ к локальной сети, он прибегнет к одной из следующих атак.
Подделка ответов с помощью атаки «дней рождения»
DNS не проверяет подлинность ответов на рекурсивные запросы, поэтому в кэше сохраняется первый ответ. Злоумышленники используют так называемый «парадокс дней рождения», чтобы попытаться предугадать и отправить поддельный ответ запрашивающей стороне. Для предугадывания атака «дней рождения» использует математику и теорию вероятностей. В этом случае злоумышленник пытается угадать идентификатор транзакции вашего DNS-запроса, и в случае успеха поддельная запись DNS попадает к вам раньше легитимного ответа. Успех атаки «дней рождения» не гарантирован, но в конце концов злоумышленник сможет подложить в кэш поддельный ответ. После того как атака увенчается успехом, хакер сможет видеть трафик от поддельной записи DNS до окончания жизненного цикла (TTL) записи DNS.
Эксплойт Каминского
Эксплойт Каминского является разновидностью атаки «дней рождения». Обнаруживший эту уязвимость Дэн Каминский впервые представил ее на конференции BlackHat в 2008 году. Суть эксплойта заключается в том, что сначала хакер отправляет DNS-резолверу запрос для несуществующего домена, например fake.varonis.com. Получив такой запрос, DNS-резолвер перенаправляет его на авторитетный сервер имен, чтобы получить IP-адрес ложного субдомена. На этом этапе злоумышленник перегружает DNS-резолвер огромным количеством поддельных ответов в надежде, что один из этих поддельных ответов совпадет с идентификатором транзакции исходного запроса. В случае успеха хакер подменяет в кэше DNS-сервера IP-адрес, например, как в нашем примере с varonis.com. Резолвер продолжит отвечать всем запрашивающим, что поддельный IP-адрес varonis.com является настоящим, пока не истечет жизненный цикл записи DNS.
Как обнаружить отравление кэша DNS?
Как обнаружить, что кэш DNS отравлен? Для этого нужно следить за вашими DNS-серверами в поисках индикаторов возможной атаки. Однако ни у кого нет вычислительных мощностей, чтобы справиться с такими объемами DNS-запросов. Лучшим решением будет применить к вашему мониторингу DNS аналитику безопасности данных. Это позволит отличить нормальное поведение DNS от атак злоумышленников.
• Внезапное увеличение активности DNS из одного источника в отношении одного домена свидетельствует о потенциальной атаке «дней рождения».
• Увеличение активности DNS из одного источника, который запрашивает у вашего DNS-сервера многочисленные доменные имена без рекурсии, свидетельствует о попытке подобрать запись для последующего отравления.
Помимо мониторинга DNS необходимо также вести мониторинг событий Active Directory и поведения файловой системы, чтобы вовремя обнаружить аномальную активность. А еще лучше будет использовать аналитику для поиска взаимосвязи между всеми тремя векторами. Это позволит получить ценную контекстную информацию для усиления стратегии кибербезопасности.
Способы защиты от отравления кэша DNS
И, наконец, используйте зашифрованные DNS-запросы. Модули безопасности службы доменных имен (DNSSEC) — это протокол DNS, который использует подписанные DNS-запросы для предотвращения их подмены. При использовании DNSSEC, DNS-резолверу необходимо проверить подпись на уполномоченном DNS-сервере, что замедляет весь процесс. Вследствие этого DNSSEC пока не получил широкого распространения.
DNS поверх HTTPS (DoH) и DNS поверх TLS (DoT) являются конкурирующими спецификациями для следующей версии DNS и, в отличие от DNSSEC, предназначены для обеспечения безопасности DNS-запросов без ущерба скорости. Тем не менее эти решения не идеальны, поскольку могут замедлить или полностью сделать невозможным локальный мониторинг и анализ DNS. Важно отметить, что DoH и DoT могут обходить родительский контроль и другие блокировки на уровне DNS, установленные в сети. Несмотря на это, Cloudflare, Quad9 и Google имеют общедоступные DNS-серверы с поддержкой DoT. Многие новые клиенты поддерживают эти современные стандарты, хотя их поддержка и отключена по умолчанию. Вы можете найти более подробную информацию об этом в нашем посте по безопасности DNS.
Подмена DNS заменяет легитимный IP-адрес сайта на IP-адрес компьютера хакера. Обнаружить подмену очень непросто, ведь с точки зрения конечного пользователя он вводит в браузере абсолютно нормальный адрес сайта. Несмотря на это остановить подобную атаку можно. Риски снизить можно, используя мониторинг DNS, например, от Varonis, а также стандарт шифрования DNS поверх TLS (DoT).
Отравление кэша: часто задаваемые вопросы
Ознакомьтесь с распространенными вопросами о подмене DNS и ответами на них.
Отравление кэша DNS и подмена кэша DNS (спуфинг) — это одно и то же?
Да, отравлением кэша и подменой кэша называют один и тот же тип кибератаки.
Как работает отравление кэша DNS?
Отравление кэша обманывает ваш DNS-сервер, сохраняя на нём поддельную запись DNS. После этого трафик перенаправляется на сервер, выбранный хакером, и там осуществляется кража данных.
Какие меры безопасности можно применять для защиты от отравления кэша DNS?
Владельцы сайта могут осуществлять мониторинг и аналитику для выявления подмены DNS. Кроме того, можно обновить DNS-серверы, чтобы использовать модули безопасности службы доменных имен (DNSSEC) или другую систему шифрования, например DNS поверх HTTPS или DNS поверх TLS. Повсеместное использование полного сквозного шифрования, такого как HTTPS, также может предотвратить подмену DNS. Брокеры безопасного облачного доступа (CASB) чрезвычайно полезны для этих целей. Конечные пользователи могут сбросить потенциально подделанный кэш DNS, периодически очищая кэш DNS своего браузера, или после подключения к небезопасной или общедоступной сети. Использование VPN может защитить от подмены DNS в локальной сети. Избегайте подозрительных ссылок. Это поможет избежать риска заражения кэша вашего браузера.
Как проверить, подверглись ли вы атаке с отравлением кэша?
После того как кэш DNS был отравлен, это сложно обнаружить. Куда лучшая тактика — осуществлять мониторинг ваших данных и защищать систему от вредоносных программ, чтобы уберечься от утечек данных в следствие отравления кэша DNS. Посетите нашу интерактивную лабораторию кибератак, чтобы увидеть, как мы используем мониторинг DNS для обнаружения реальных угроз кибербезопасности.
Как работает связь DNS?
Как злоумышленники отравляют кэш DNS?
Способов отравления кэша много, и вот самые распространенные из них: принудить жертву нажать на вредоносную ссылку, использующую встроенный код для изменения кэша DNS в браузере пользователя; взлом локального DNS-сервера с помощью «атаки через посредника». Вышеупомянутая «атака через посредника» использует подмену протокола разрешения адресов (ARP) для перенаправления DNS-запросов на DNS-сервер, контролируемый злоумышленником.
Что такое отравление кэша DNS?
Отравление кэша DNS — это действия по замене записи в базе данных DNS на IP-адрес, ведущий на вредоносный сервер, контролируемый злоумышленником.
Как выполняется подмена DNS?
Хакер выполняет атаку с подменой DNS, получая доступ и изменяя кэш DNS или перенаправляя запросы DNS на свой собственный DNS-сервер.
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
DNS Спуфинг – как это работает и какие меры следует принять
DNS cache poisoning
DNS спуфинг (spoofing), так же известный как отравление DNS кэша (cache poisoning), вид атаки, когда DNS кэш заполняется поддельными данными, в результате чего пользователь перенаправляется на вредоносный сайт.
Онлайн курс по Кибербезопасности
Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии
Обычно скомпрометированная запись перенаправляет пользователя на поддельный веб-сайт, который злоумышленники используют для совершения преступных действий, таких как распространение вредоносных программ или кража реквизитов кредитных карт, паролей, финансовых данных или другой конфиденциальной и частной информации.
При отравлении DNS-кэша сервер кэша DNS сохраняет нелегитимный адрес, предоставленный злоумышленником, а затем выдает его пользователям, запрашивающим подлинный веб-сайт. В большинстве случаев он может выглядеть аналогично аутентичному веб-сайту, поэтому посетителям становится сложнее отличить поддельный сайт от настоящего.
Влияние отравления DNS-кэша
DNS спуфинг, обычно трудно обнаружить и может оказать большое негативное влияние, особенно для популярных веб-сайтов или веб-приложений со большим количеством посещений или зарегистрированными пользователями. Это представляет большой риск, особенно в некоторых чувствительных отраслях, таких как банковская, медицинская, онлайн-ритейл, электронная коммерция и другие.
Например, предполагается, что злоумышленникам удается изменить DNS-записи и IP-адреса для Amazon. Затем они направляют запрос на другой сервер с поддельным IP, который контролируют или принадлежит злоумышленникам. Любой человек, пытающийся получить доступ к подлинному сайту Amazon, будет перенаправлен на неправильный адрес, который может содержать вредоносные программы для кражи конфиденциальной информации.
Кроме веб-сайтов, злоумышленник может вставить поддельный адрес для сервера электронной почты или других веб-приложений, таких как банковские приложения.
Поскольку изменения в DNS регулярно распространяются с одного сервера на другой, отравленный кэш может распространяться на другие DNS-серверы и системы, что приводит к большому ущербу. Например, поддельная запись может быстро распространяться на другие машины, такие как DNS-серверы Интернет-провайдеров, которые затем будут хранить ее в своем кэше. Отсюда он распространяется дальше на оборудования пользователей, такое как браузеры, мобильные телефоны и маршрутизаторы, которые также будут хранить поддельную запись в своих кэшах.
Как работает атака отравление DNS-кэша?
Во время обычных операций DNS-запросы хранятся или кэшируются в базе данных, которую пользователи веб-сайтов могут запрашивать в режиме реального времени. Как правило, база данных DNS содержит список имен Интернета и соответствующих IP-адресов. И это облегчает поиск и доступ к веб-сайтам с использованием имен в отличие от IP-адресов, что может быть очень сложным и запутанным.
Например, без системы DNS пользователям потребуется запомнить строку чисел, составляющих IP-адреса для всех веб-сайтов, которые они хотят посетить.
К сожалению, DNS имеет несколько недостатков в безопасности, которые злоумышленники могут использовать и вставлять в систему поддельные записи адресов интернет-домена. Обычно преступники отправляют на DNS-сервер поддельные ответы. Затем сервер отвечает пользователю, сделавшему запрос, и одновременно законные серверы кэшируют поддельную запись. Как только сервер кэша DNS сохранит поддельную запись, все последующие запросы на скомпрометированную запись получат адрес сервера, управляемого злоумышленником.
Отравление DNS-кэша в целом состоит из внедрения поврежденных записей в базу данных кэша сервера имен, и злоумышленники используют различные методы. К ним относятся:
Уязвимости DNS используемые злоумышленниками
Уязвимости безопасности в определенных веб-приложениях, а также отсутствие надлежащей аутентификации DNS-записей позволяют киберпреступникам легко скомпрометировать ответы DNS и остаться незамеченными. Некоторые из этих уязвимостей включают в себя:
Отсутствие проверки и валидации
DNS имеет первую структуру доверия, которая не требует проверки IP-адреса для подтверждения его подлинности перед отправкой ответа. Поскольку DNS-распознаватели не проверяют данные в кэше, там остается неверная запись, пока она не будет удалена вручную или не истечет срок действия TTL.
Уязвимость рекурсивного DNS-сервера
Когда рекурсивный запрос активен, DNS-сервер получает запрос и выполняет всю работу по поиску правильного адреса и отправке ответа пользователю. Если у него нет записи в кэше, он будет запрашивать ее у других DNS-серверов от имени клиента, пока не получит адрес и не вернет его пользователю. Включение рекурсивного запроса представляет уязвимость безопасности, которую злоумышленники могут использовать для отравления кэша DNS.
Поскольку сервер ищет адрес, он предоставляет злоумышленнику возможность перехватить трафик и предоставить поддельный ответ. Затем рекурсивный DNS-сервер отправит ответ пользователю и одновременном сохранит поддельный IP-адрес в кэше.
Отсутствие шифрования
Как правило, протокол DNS не зашифрован, и это облегчает злоумышленникам перехват его трафика. Кроме того, серверы не должны проверять IP-адреса, на которые они направляют трафик, следовательно, они не могут определить, является ли он подлинным или поддельным.
Как предотвратить DNS спуфинг?
Мониторинг данных DNS в реальном времени может помочь установить наличие в трафике необычных шаблонов, действий пользователей или поведения, таких как посещение вредоносных веб-сайтов. И хотя обнаружение отравления DNS-кэшем затруднено, существует несколько мер безопасности, и компании и поставщики услуг могут принять меры, чтобы предотвратить это. Некоторые из мер, предотвращающих отравление DNS-кэша, включают использование DNSSEC, отключение рекурсивных запросов и многое другое.
Предельный уровень отношений доверия
Одной из уязвимостей DNS-транзакций являются отношения высокого доверия между различными DNS-серверами. Это означает, что серверы не проверяют подлинность получаемых ими записей, что позволяет злоумышленникам даже отправлять поддельные ответы со своих нелегитимных серверов.
Чтобы злоумышленники не использовали этот недостаток, группы безопасности должны ограничить уровень доверительных отношений, которые имеют их DNS-серверы с другими. Настройка DNS-серверов таким образом, чтобы они не опирались на доверительные отношения с другими DNS-серверами, затрудняет использование киберпреступниками DNS-сервера для компрометации записей на законных серверах.
Существует множество инструментов для проверки наличия угроз безопасности DNS.
Использование протокола DNSSEC
При обычной работе протокол DNSSEC связывает уникальную криптографическую подпись с другой информацией DNS, такой как записи CNAME и A. Затем DNS-распознаватель использует эту подпись для проверки подлинности DNS-ответа перед отправкой его пользователю.
Подписи безопасности гарантируют, что ответы на запросы, которые получают пользователи, проверяются законным исходным сервером. Хотя DNSSEC может предотвратить отравление кэша DNS, он имеет такие недостатки, как сложное развертывание, предоставление данных и уязвимость перечисления зон в более ранних версиях.
Не уверены, что в вашем домене включен DNSSEC? Немедленно проверьте с помощью инструмента DNSSEC Test.
Используйте последние версии программного обеспечения DNS и BIND (Berkeley Internet Name Domain)
BIND версии 9.5.0 или выше обычно имеет расширенные функции безопасности, такие как криптографически безопасные идентификаторы транзакций и рандомизация портов, что помогает минимизировать отравление DNS-кэша. Кроме того, ИТ-специалисты должны поддерживать программное обеспечение DNS в актуальном состоянии и гарантировать, что оно является самой последней и безопасной версией.
Помимо вышеизложенного, ниже приведены другие эффективные способы или практики предотвращения отравления DNS-кэшем.
Заключение
Отравление кэш-памяти DNS приводит к перенаправлению пользователей домена на вредоносные адреса. Некоторые серверы, управляемые злоумышленниками, могут обманывать ничего не подозревающих пользователей, которые загружают вредоносные программы или предоставляют пароли, информацию о кредитных картах и другие конфиденциальные личные данные. Для предотвращения этого важно использовать передовые методы обеспечения безопасности.
Онлайн курс по Кибербезопасности
Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии
Как спрятать DNS-запросы от любопытных глаз провайдера
Настройка 1.1.1.1 от Cloudflare и других DNS-сервисов по-прежнему требует навыков работы в командной строке
Шифрование трафика между вашим устройством и DNS-сервисом помешает посторонним лицам отслеживать трафик или подменить адрес
Смерть сетевого нейтралитета и ослабление правил для интернет-провайдеров по обработке сетевого трафика вызвали немало опасений по поводу конфиденциальности. У провайдеров (и других посторонних лиц, которые наблюдают за проходящим трафиком) уже давно есть инструмент, позволяющий легко отслеживать поведение людей в интернете: это их серверы доменных имен (DNS). Даже если они до сих пор не монетизировали эти данные (или не подменяли трафик), то наверняка скоро начнут.
DNS — это телефонный справочник Сети, выдающий фактический сетевой адрес IP, связанный с хостингом и доменными именами сайтов и других интернет-служб. Например, он превращает arstechnica.com в 50.31.169.131. Ваш интернет-провайдер предлагает DNS в пакете услуг, но он также может журналировать DNS-трафик — по сути, записывать историю ваших действий в интернете.
«Открытые» DNS-сервисы позволяют обходить сервисы провайдеров ради конфиденциальности и безопасности, а кое в каких странах — уклоняться от фильтрации контента, слежки и цензуры. 1 апреля (не шутка) компания Cloudflare запустила свой новый, бесплатный и высокопроизводительный DNS-сервис, предназначенный для повышения конфиденциальности пользователей в интернете. Он также обещает полностью скрыть DNS-трафик от посторонних глаз, используя шифрование.
Названный по своему IP-адресу, сервис 1.1.1.1 — это результат партнёрства с исследовательской группой APNIC, Азиатско-Тихоокеанским сетевым информационным центром, одним из пяти региональных интернет-регистраторов. Хотя он также доступен как «открытый» обычный DNS-резолвер (и очень быстрый), но Cloudflare ещё поддерживает два протокола шифрования DNS.
Хотя и разработанный с некоторыми уникальными «плюшками» от Cloudflare, но 1.1.1.1 — никак не первый DNS-сервис с шифрованием. Успешно работают Quad9, OpenDNS от Cisco, сервис 8.8.8.8 от Google и множество более мелких сервисов с поддержкой различных схем полного шифрования DNS-запросов. Но шифрование не обязательно означает, что ваш трафик невидим: некоторые службы DNS с шифрованием всё равно записывают ваши запросы в лог для различных целей.
Cloudflare пообещал не журналировать DNS-трафик и нанял стороннюю фирму для аудита. Джефф Хастон из APNIC сообщил, что APNIC собирается использовать данные в исследовательских целях: диапазоны 1.0.0.0/24 и 1.1.1.0/24 изначально были сконфигурированы как адреса для «чёрного» трафика. Но APNIC не получит доступ к зашифрованному трафику DNS.
Для пользователей подключить DNS-шифрование не так просто, как изменить адрес в настройках сети. В настоящее время ни одна ОС напрямую не поддерживает шифрование DNS без дополнительного программного обеспечения. И не все сервисы одинаковы с точки зрения софта и производительности.
Но учитывая важность вопроса — в последнее время во всех новостях говорят о превращении пользовательских данных в продукт — я решил посмотреть, как работает DNS-шифрование у Cloudflare. В итоге моя внутренняя лабораторная крыса победила — и я обнаружил, что тестирую и разбираю клиенты для нескольких провайдеров DNS через три протокола DNS-шифрования: DNSCrypt, DNS по TLS и DNS по HTTPS. Все они работоспособны, но предупреждаю: хотя процедура становится проще, но вряд ли вы сможете объяснить шифрование DNS родителям по телефону (если только они не опытные пользователи командной строки Linux).
Как работает DNS
Зачем мы это делаем?
Есть много причин для лучшей защиты DNS-трафика. Хотя веб-трафик и другие коммуникации могут быть защищены криптографическими протоколами, такими как Transport Layer Security (TLS), но почти весь трафик DNS передаётся незашифрованным. Это означает, что ваш провайдер (или кто-то другой между вами и интернетом) может регистрировать посещаемые сайты даже при работе через сторонний DNS — и использовать эти данных в своих интересах, включая фильтрацию контента и сбор данных в рекламных целях.
Как выглядит типичный обмен данными между устройством и DNS-резолвером
«У нас есть проблема “последней мили” в DNS, — говорил Крикет Лю, главный архитектор DNS в компании Infoblox, которая занимается информационной безопасностью. — Большинство наших механизмов безопасности решают вопросы коммуникаций между серверами. Но есть проблема с суррогатами резолверов на различных операционных системах. В реальности мы не можем их защитить». Проблема особенно заметна в странах, где власти более враждебно относятся к интернету.
В некоторой степени помогает использование DNS, который не ведёт логи. Но это всё равно не мешает злоумышленнику фильтровать запросы по контенту или перехватывать адреса методом пакетного перехвата или глубокой инспекции пакетов. Кроме пассивной прослушки есть угроза более активных атак на ваш DNS-трафик — спуфинг DNS-сервера со стороны провайдера или спецслужб с перенаправлением на собственный сервер для отслеживания или блокировки трафика. Что-то подобное (хотя, по-видимому, не злонамеренно), похоже, происходит со случайным перенаправлением трафика на адрес 1.1.1.1 из сети AT&T, судя по сообщениям на форумах DSLReports.
Наиболее очевидный способ уклонения от слежки — использование VPN. Но хотя VPN скрывают содержимое вашего трафика, для подключения к VPN может потребоваться запрос DNS. И в ходе VPN-сеанса запросы DNS тоже могут иногда направляться веб-браузерами или другим софтом за пределы VPN-тоннеля, создавая «утечки DNS», которые раскрывают посещённые сайты.
Вот где вступают в игру протоколы шифрования DNS: это DNSCrypt (среди прочих, его поддерживает OpenDNS от Cisco), DNS по TLS (поддерживается Сloudflare, Google, Quad9, OpenDNS) и DNS по HTTPS (поддерживается Сloudflare, Google и сервисом блокировки «взрослого» контента CleanBrowsing). Шифрование гарантирует, что трафик не просканируют и не изменят, и что запросы не получит и не обработает поддельный DNS-сервер. Это защищает от атак MiTM и шпионажа. DNS-прокси с одной из этих служб (непосредственно на устройстве или на «сервере» в локальной сети) поможет предотвратить DNS-утечки через VPN, поскольку прокси-сервер всегда будет самым быстрым DNS-сервером среди всех доступных.
Однако эта опция защиты недоступна массовому пользователю. Ни один из этих протоколов нативно не поддерживается ни одним DNS-резолвером, который идёт в комплекте с ОС. Все они требуют установки (и, вероятно, компиляции) клиентского приложения, которое действует как локальный «сервер» DNS, ретранслируя запросы, сделанные браузерами и другими приложениями вверх по течению к безопасному провайдеру DNS по вашему выбору. И хотя две из трёх данных технологий предлагаются на роль стандартов, ни один из проверенных нами вариантов пока не представлен в окончательном виде.
Поэтому если хотите погрузиться в шифрование DNS, то лучше взять для DNS-сервера в домашней сети Raspberry Pi или другое отдельное устройство. Потому что вы наверняка обнаружите, что настройка одного из перечисленных клиентов — это уже достаточно хакерства, чтобы не захотеть повторять процесс заново. Проще запросить настройки DHCP по локальной сети — и указать всем компьютерам на одну успешную установку DNS-сервера. Я много раз повторял себе это во время тестирования, наблюдая падение одного за другим клиентов под Windows и погружение в спячку клиентов под MacOS.
Сообщество DNSCrypt пыталось сделать доступный инструмент для тех, кто не обладает навыками работы в командной строке, выпустив программы DNSCloak (слева) под iOS и Simple DNSCrypt (справа) под Windows
Шифруемся
Для полноты картины в исторической перспективе начнём обзор с самой первой технологии шифрования DNS — DNSCrypt. Впервые представленный в 2008 году на BSD Unix, инструмент DNSCrypt изначально предназначался для защиты не от прослушки, а от DNS-спуфинга. Тем не менее, его можно использовать как часть системы обеспечения конфиденциальности — особенно в сочетании с DNS-сервером без логов. Как отметил разработчик DNSCrypt Фрэнк Денис, гораздо больше серверов поддерживают DNSCrypt, чем любой другой вид шифрования DNS.
«DNSCrypt — это немного больше, чем просто протокол, — говорит Фрэнк Денис. — Сейчас сообщество и активные проекты характеризуют его гораздо лучше, чем мой изначальный протокол, разработанный в выходные». Сообщество DNSCrypt создало простые в использовании клиенты, такие как Simple DNSCrypt для Windows и клиент для Apple iOS под названием DNS Cloak, что делает шифрование DNS доступнее для нетехнических людей. Другие активисты подняли независимую сеть приватных DNS-серверов на основе протокола, помогающего пользователям уклониться от использования корпоративных DNS-систем.
«DNSCrypt — это не подключение к серверам конкретной компании, — сказал Денис. — Мы призываем всех поднимать собственные сервера. Сделать это очень дёшево и легко. Теперь, когда у нас есть безопасные резолверы, я пытаюсь решить задачу фильтрации контента с учётом конфиденциальности».
Для тех, кто хочет запустить DNS-сервер с поддержкой DNSCrypt для всей своей сети, лучшим клиентом будет DNSCrypt Proxy 2. Старая версия DNSCrypt Proxy по-прежнему доступна как пакет для большинства основных дистрибутивов Linux, но лучше загрузить бинарник новой версии непосредственно с официального репозитория на GitHub. Есть версии для Windows, MacOS, BSD и Android.
Опыт сообщества DNSCrypt по защите конфиденциальности воплощён в DNSCrypt Proxy. Программа легко настраивается, поддерживает ограничения по времени доступа, шаблоны для доменов и чёрный список IP-адресов, журнал запросов и другие функции довольно мощного локального DNS-сервера. Но для начала работы достаточно самой базовой конфигурации. Есть пример файла конфигурации в формате TOML (Tom’s Obvious Minimal Language, созданный соучредителем GitHub Томом Престоном-Вернером). Можете просто переименовать его перед запуском DNSCrypt Proxy — и он станет рабочим файлом конфигурации.
По умолчанию прокси-сервер использует открытый DNS-резолвер Quad9 для поиска и получения с GitHub курируемого списка открытых DNS-сервисов. Затем подключается к серверу с самым быстрым откликом. При необходимости можно изменить конфигурацию и выбрать конкретный сервис. Информация о серверах в списке кодируется как «штамп сервера». Он содержит IP-адрес поставщика, открытый ключ, информацию, поддерживает ли сервер DNSSEC, хранит ли провайдер логи и блокирует ли какие-нибудь домены. (Если не хотите зависеть от удалённого файла при установке, то можно запустить «калькулятор штампов» на JavaScript — и сгенерировать собственный локальный статичный список серверов в этом формате).
Для своего тестирования DNSCrypt я использовал OpenDNS от Cisco в качестве удалённого DNS-сервиса. При первых запросах производительность DNSCrypt оказалась немного хуже, чем у обычного DNS, но затем DNSCrypt Proxy кэширует результаты. Самые медленные запросы обрабатывались в районе 200 мс, в то время как средние — примерно за 30 мс. (У вас результаты могут отличаться в зависимости от провайдера, рекурсии при поиске домена и других факторов). В целом, я не заметил замедления скорости при просмотре веб-страниц.
Основное преимущество DNSCrypt в том, что он похож на «обычный» DNS. Хорошо это или плохо, но он передаёт UDP-трафик по порту 443 — тот же порт используется для безопасных веб-соединений. Это даёт относительно быстрый резолвинг адресов и снижает вероятность блокировки на файрволе провайдера. Чтобы ещё больше снизить вероятность блокировки, можно изменить конфигурацию клиента и передавать запросы по TCP/IP (как показало тестирование, это минимально влияет на время отклика). Так шифрованный DNS-трафик для большинства сетевых фильтров похож на трафик HTTPS — по крайней мере, с виду.
Показан трафик DNSCrypt и локальный трафик DNSCrypt Proxy. Снифер Wireshark говорит, что это трафик HTTPS, потому что я форсировал использование TCP. Если пустить его по UDP, то Wireshark увидит трафик Chrome QUIC
С другой стороны, DNSCrypt для шифрования не полагается на доверенные центры сертификации — клиент должен доверять открытому ключу подписи, выданному провайдером. Этот ключ подписи используется для проверки сертификатов, которые извлекаются с помощью обычных (нешифрованных) DNS-запросов и используются для обмена ключами с использованием алгоритма обмена ключами X25519. В некоторых (более старых) реализациях DNSCrypt есть условие для сертификата на стороне клиента, который может использоваться в качестве схемы управления доступом. Это позволяет им журналировать ваш трафик независимо от того, с какой IP-адреса вы пришли, и связывать его с вашим аккаунтом. Такая схема не используется в DNSCrypt 2.
С точки зрения разработчика немного сложно работать с DNSCrypt. «DNSCrypt не особенно хорошо документирован, и не так много его реализаций», — говорит Крикет Лю из Infoblox. На самом деле мы смогли найти только единственный клиент в активной разработке — это DNSCrypt Proxy, а OpenDNS прекратил поддерживать его разработку.
Интересный выбор криптографии в DNSCrypt может напугать некоторых разработчиков. Протокол использует Curve25519 (RFC 8032), X25519 (RFC 8031) и Chacha20Poly1305 (RFC 7539). Одна реализация алгоритма X24419 в криптографических библиотеках Pyca Python помечена как «криптографически опасная», потому что с ней очень легко ошибиться в настройках. Но основной используемый криптографический алгоритм Curve25519, является «одной из самых простых эллиптических кривых для безопасного использования», — сказал Денис.
Разработчик говорит, что DNSCrypt никогда не считался стандартом IETF, потому что был создан добровольцами без корпоративной «крыши». Представление его в качестве стандарта «потребовало бы времени, а также защиты на заседаниях IETF», — сказал он. «Я не могу себе этого позволить, как и другие разработчики, которые работают над ним в свободное время. Практически все ратифицированные спецификации, связанные с DNS, фактически написаны людьми из одних и тех же нескольких компаний, из года в год. Если ваш бизнес не связан с DNS, то действительно тяжело получить право голоса».
Хотя несколько DNS-сервисов используют DNSCrypt (например, CleanBrowsing для блокировки «взрослого» контента и Cisco OpenDNS для блокировки вредоносных доменов), новые ориентированные на приватность DNS-провайдеры (в том числе Google, Cloudflare и Quad9) отказались от DNSCrypt и выбрали одну из других, одобренных группой IETF технологий: DNS по TLS и DNS по HTTPS. Сейчас DNSCrypt Proxy поддерживает DNS по HTTPS и указывает Cloudflare, Google и Quad9 в настройках по умолчанию.
TLS стал приоритетом для CloudFlare, когда понадобилось усилить шифрование веб-трафика для защиты от слежки
Скрещивание с TLS
У DNS по TLS (Transport Layer Security) несколько преимуществ перед DNSCrypt. Во-первых, это предлагаемый стандарт IETF. Также он довольно просто работает по своей сути — принимает запросы стандартного формата DNS и инкапсулирует их в зашифрованный TCP-трафик. Кроме шифрования на основе TLS, это по существу то же самое, что и отправка DNS по TCP/IP вместо UDP.
Существует несколько рабочих клиентов для DNS по TLS. Самый лучший вариант, который я нашел, называется Stubby, он разработан в рамках проекта DNS Privacy Project. Stubby распространяется в составе пакета Linux, но есть также версия для MacOS (устанавливается с помощью Homebrew) и версия для Windows, хотя работа над последней ещё не завершена.
Хотя мне удалось стабильно запускать Stubby на Debian после сражения с некоторыми зависимостями, этот клиент регулярно падал в Windows 10 и имеет тенденцию зависать на MacOS. Если вы ищете хорошее руководство по установке Stubby на Linux, то лучшая найденная мной документация — это пост Фрэнка Сантосо на Reddit. Он также написал shell скрипт для установки на Raspberry Pi.
Положительный момент в том, что Stubby допускает конфигурации с использованием нескольких служб на основе DNS по TLS. Файл конфигурации на YAML позволяет настроить несколько служб IPv4 и IPv6 и включает в себя настройки для SURFNet, Quad9 и других сервисов. Однако реализация YAML, используемая Stubby, чувствительна к пробелам, поэтому будьте осторожны при добавлении новой службы (например, Cloudflare). Сначала я использовал табы — и всё поломал.
Клиенты DNS по TLS при подключении к серверу DNS осуществляют аутентификацию с помощью простой инфраструктуры открытых ключей (Simple Public Key Infrastructure, SPKI). SPKI использует локальный криптографический хэш сертификата провайдера, обычно на алгоритме SHA256. В Stubby этот хэш хранится как часть описания сервера в файле конфигурации YAML, как показано ниже:
После установления TCP-соединения клиента с сервером через порт 853 сервер представляет свой сертификат, а клиент сверяет его с хэшем. Если всё в порядке, то клиент и сервер производят рукопожатие TLS, обмениваются ключами и запускают зашифрованный сеанс связи. С этого момента данные в зашифрованной сессии следуют тем же правилам, что и в DNS по TCP.
После успешного запуска Stubby я изменил сетевые настройки сети DNS, чтобы направлять запросы на 127.0.0.1 (localhost). Сниффер Wireshark хорошо показывает этот момент переключения, когда трафик DNS становится невидимым.
Переключаемся с обычного трафика DNS на шифрование TLS
Хотя DNS по TLS может работать как DNS по TCP, но шифрование TLS немного сказывается на производительности. Запросы dig к Cloudflare через Stubby у меня выполнялись в среднем около 50 миллисекунд (у вас результат может отличаться), в то время как простые DNS-запросы к Cloudflare получают ответ менее чем за 20 мс.
Частично замедление работы происходит на стороне сервера из-за лишнего использования TCP. Обычно DNS работает по быстрому протоколу UDP: отправил и забыл, в то время как сообщение TCP требует согласования соединения и проверки получения пакета. Основанная на UDP версия DNS по TLS под названием DNS over Datagram Transport Layer Security (DTLS) сейчас в экспериментальной разработке — она может увеличить производительность протокола.
Здесь тоже имеется проблема с управлением сертификатами. Если провайдер удалит сертификат и начнёт использовать новый, то в настоящее время нет чистого способа обновления данных SPKI на клиентах, кроме вырезания старого и вставки нового сертификата в файл конфигурации. Прежде чем с этим разберутся, было бы полезно использовать какую-то схему управления ключами. И поскольку сервис работает на редком порту 853, то с высокой вероятностью DNS по TLS могут заблокировать на файрволе.
Но это не проблема для лидера нашего хит-парада — DNS по HTTPS. Он проходит через большинство файрволов, словно тех не существует.
Google и Cloudflare, похоже, одинаково видят будущее зашифрованного DNS
DNS по HTTPS: DoH!
И Google, и Cloudflare, кажется, видят протокол DNS по HTTPS, также известный как DoH, как самый перспективный вариант для шифрования DNS. Опубликованный в виде черновика стандарта IETF, протокол DoH инкапсулирует DNS-запросы в пакеты HTTPS, превращения их в обычный зашифрованный веб-трафик.
Запросы отправляются как HTTP POST или GET с телом в формате сообщения DNS (датаграммы из обычных DNS-запросов) или как запрос HTTP GET в формате JSON (если вы не против небольшого оверхеда). И здесь нет никаких проблем с управлением сертификатами. Как и при обычном веб-трафике HTTPS, для подключения через DoH не требуется аутентификация, а сертификат проверяется центром сертификации.
Фиксация DNS-транзакции через DoH. Видно только HTTPS, TLS и ничего больше
HTTPS — довольно громоздкий протокол для запросов DNS, особенно в формате JSON, поэтому придётся смириться с некоторым снижением производительности. Необходимые ресурсы на стороне сервера почти наверняка заставят прослезиться администратора обычного DNS-сервера. Но простота работы с хорошо понятными веб-протоколами делает разработку как клиентского, так и серверного кода для DoH намного более доступной для разработчиков, собаку съевших на веб-приложениях (всего несколько недель назад инженеры Facebook выпустили концепт сервера и клиента DoH на Python).
В результате, хотя на спецификациях RFC для DoH ещё не просохли чернила, уже готов к работе целый ряд клиентов DNS по HTTPS. Правда, некоторые из них заточены под конкретных провайдеров DNS. Потеря производительности во многом зависит от сервера и от качества конкретного клиента.
Например, возьмём клиент туннелирования Argo от Cloudflare (aka cloudflared). Это многофункциональный инструмент туннелирования, предназначенный в первую очередь для установления безопасного канала для связи веб-серверов с CDN-сетью Cloudflare. DNS по HTTPS — просто ещё одна служба, которую теперь поддерживает CDN.
Это можно исправить одним из трёх способов. Первый вариант: установить устройство с локальным хостом ( 127.0.0.1 для IPv4 и ::1 для IPv6) как основной DNS-сервер в сетевой конфигурации, а затем добавить 1.1.1.1 в качестве дополнительного резолвера. Это рабочий вариант, но он не идеален с точки зрения приватности и производительности. Лучше добавить URL сервера из командной строки при загрузке:
Если вы уверены, что хотите перейти на DNS-сервер от Cloudflare, что даёт преимущество автоматического обновления, — то можете настроить его в качестве службы в Linux, используя YAML-файл конфигурации, содержащий адреса IPv4 и IPv6 службы DNS от Cloudflare:
При настройке с правильной восходящей адресацией производительность dig-запросов через Argo широко варьируется: от 12 мс для популярных доменов аж до 131 мс. Страницы с большим количеством межсайтового контента загружаются… немного дольше обычного. Опять же, ваш результат может быть другим — вероятно, он зависит от вашего местоположения и связности. Но это примерно то, чего я ожидал от мрачного протокол DoH.
Как Cloudflare, мы считаем, что туннели иллюстрируют операцию «Арго» лучше, чем Бен Аффлек
Дабы убедиться, что проблема именно в протоколе DoH, а не в программистах Cloudflare, я испытал два других инструмента. Во-первых, прокси-сервер от Google под названием Dingo. Его написал Павел Форемски, интернет-исследователь из Института теоретической и прикладной информатики Академии наук Польши. Dingo работает только с реализацией DoH от Google, но его можно настроить на ближайшую службу Google DNS. Это хорошо, потому что без такой оптимизации Dingo сожрал всю производительность DNS. Запросы dig в среднем выполнялись более 100 миллисекунд.
Во время проверки обработки стандартных запросов службой dns.google.com я наткнулся на альтернативу дефолтному адресу 8.8.8.8 от Google (172.217.8.14, если знаете). Я добавил его в Dingo из командной строки:
Это сократило время отклика примерно на 20%, то есть примерно до того показателя, как у Argo.
А оптимальную производительность DoH неожиданно показал DNSCrypt Proxy 2. После недавнего добавления DoH Cloudflare в курируемый список публичных DNS-сервисов DNSCrypt Proxy почти всегда по умолчанию подключается к Cloudflare из-за низкой задержки этого сервера. Чтобы убедиться, я даже вручную сконфигурировал его под резолвер Cloudflare для DoH, прежде чем запустить батарею dig-запросов.
Все запросы обрабатывались менее чем за 45 миллисекунд — это быстрее, чем собственный клиент Cloudflare, причём с большим отрывом. С сервисом DoH от Google производительность оказалась похуже: запросы обрабатывались в среднем около 80 миллисекунд. Это показатель без оптимизации на ближайший DNS-сервер от Google.
В целом производительность DNSCrypt Proxy по DoH практически неотличима от резолвера DNS по TLS, который я проверял ранее. На самом деле он даже быстрее. Я не уверен, то ли это из-за какой-то особой реализации DoH — может быть, из-за использования стандартного формата сообщений DNS, инкапсулированных в HTTPS, вместо формата JSON — то ли связано с тем, как Cloudflare обрабатывает два разных протокола.
Я не Бэтмен, но моя модель угроз всё равно немного сложнее, чем у большинства людей
Зачем так мучиться?
Я профессиональный параноик. Моя модель угроз отличается от вашей, и я предпочел бы сохранить в безопасности как можно больше своих действий в онлайне. Но учитывая количество нынешних угроз приватности и безопасности из-за манипуляций с трафиком DNS, у многих людей есть веские основания использовать какую-либо форму шифрования DNS. Я с удовольствием обнаружил, что некоторые реализации всех трёх протоколов не оказывают сильно негативного влияния на скорость передачи трафика.
Тем не менее, важно отметить, что одно лишь шифрование DNS не скроет ваши действия в интернете. Если на сервере хостятся несколько сайтов, то расширение TLS под названием Server Name Indicator (SNI), используемое в соединениях HTTPS, всё равно может показать открытым текстом название сайта, на который вы зашли. Для полной конфиденциальности всё равно нужно использовать VPN (или Tor) для такой инкапсуляции трафика, чтобы провайдер или какая-либо другая шпионящая сторона не могла вытянуть метаданные из пакетов. Но ни один из перечисленных сервисов не работает с Tor. И если против вас работает правительственное агентство, то ни в чём нельзя быть уверенным.
Другая проблема в том, что, хотя прекрасные ребята из сообщества DNSCrypt проделали большую работу, но такая приватность по-прежнему слишком сложна для обычных людей. Хотя некоторые из этих DNS-клиентов для шифрования оказалось относительно легко настроить, но ни один из них нельзя назвать гарантированно простым для нормальных пользователей. Чтобы эти услуги стали действительно полезными, их следует плотнее интегрировать в железо и софт, который покупают люди — домашние маршрутизаторы, операционные системы для персональных компьютеров и мобильных устройств.
Интернет-провайдеры наверняка постараются активнее монетизировать обычный DNS-трафик, и никуда не исчезнут государственные агентства и преступники, которые стремятся использовать его во вред пользователю. Но маловероятно, что крупные разработчики ОС стремятся надёжно защитить DNS доступным для большинства людей способом, потому что они часто заинтересованы в монетизации, как и интернет-провайдеры. Кроме того, эти разработчики могут столкнуться с сопротивлением изменениям со стороны некоторых правительств, которые хотят сохранить возможности мониторинга DNS.
Так что в ближайшее время эти протоколы останутся инструментом для тех немногих людей, кто реально заботится о конфиденциальности своих данных и готов для этого немного потрудиться. Надеюсь, сообщество вокруг DNSCrypt продолжит свою активность и продвинет ситуацию вперёд.