Защита DNS и сохранение собственной анонимности

Защита DNS и сохранение собственной анонимности

DNSSEC (Domain Name System Security Extensions) — это набор расширений протокола DNS IETF, который сводит к минимуму атаки, связанные со спуфингом DNS-адреса во время разрешения доменного имени. Его цель — предоставить клиентам DNS (термин преобразователя) подлинные ответы на запросы DNS (или достоверную информацию о том, что данные отсутствуют) и обеспечить их целостность. При этом используется криптография с открытым ключом. Доступность данных и конфиденциальность запросов не гарантируются. Безопасность DNS имеет важное значение для общей безопасности в Интернете.

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

Особенность заключается в том, что DNSSec использует два типа ключей: один подписывает зону (ZSK, ключ подписи зоны), другой подписывает набор ключей (KSK, ключ подписи ключа). Это было сделано по следующим причинам: зона может быть достаточно большой, чтобы найти закрытый ключ, поэтому ее нужно менять чаще, и ее можно сделать короче, чтобы зоны подписывались быстрее; KSK используется для небольших объемов данных, поэтому его можно увеличить и менять реже. Более того, хеш из открытой части KSK необходимо отправлять в родительскую зону, что хотелось бы делать не слишком часто.

Защита DNS и сохранение собственной анонимности

Абстрактный пример работы

Допустим мы хотим узнать адрес test.bar.example.com:

  1. Мы запрашиваем доменное имя у резолвера;
  2. Резолвер выставляет бит DO и запрашивает test.bar.example.com у корневого сервера;
  3. Резолвер знает, что корневая доменная зона подписана — у него указан ключ или хэш ключа для нее (так называемый trust-anchor), поэтому он запрашивает у корневого сервера DNSKEY записи для корневой зоны и сверяет полученное с имеющимся;
  4. Корневой сервер не знает такого доменного имени, да и вообще максимум что ему известно — на каких серверах располагается зона com, он и сообщает адреса этих серверов нашему резолверу вместе с подписанной DS записью для зоны com;
  5. Резолвер валидирует DS запись полученным и проверенным ZSK ключом корневой зоны;
  6. Теперь резолвер знает, что зона com подписана, так что он спрашивает у ее DNS сервера DNSKEY и валидирует их, после чего интересуется про bar.example.com. Естественно, что сервер зоны com про таких не знает, ему только известно, что зона example.com живет на ns.example.com и ns1.example.com, именно это он и отвечает резолверу вместе с — да-да — DS записью;
  7. Так резолвер выстроил цепочку доверия до example.com, где он узнает серверы имен зоны bar.example.com и ее DS;
  8. В конце концов резолвер итеративно узнает адреса DNS серверов, отвечающих за bar.example.com, идет к ним и наконец-то получает желаемое, валидирует всю информацию и отдает нам адресную запись, выставив в ответе бит AD.

Зачем использовать DNSSec?

Во-первых, о проблемах, создаваемых DNSSec:

  • в первую очередь нужно организовать надежное хранилище ключей;
  • во-вторых, необходимо постоянно следить за ротацией ключей;
  • в-третьих, опять же, нужно следить за сроком действия подписей;
  • в-четвертых, DNSSec усиливает amplified ddos.

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

Практика

Описание конфигурации DNSSec для серверов под управлением Windows Server и Linux выходит за рамки нашей статьи, и, по сути, все эти «административные манипуляции» больше относятся к администрированию, чем к искусству взлома. Поэтому ниже я приведу пример конфигураций DNSSec для указанных платформ в виде ссылок на отдельные пошаговые инструкции:

1) Примеры самих настроек DNSSec на базе BIND для Linux (CentOS и Ubuntu)

2) Настройка DNSSec для Windows Server 2012

DNSCrypt шифрование

Любой, кто использует сервисы конфиденциальности, такие как VPN, TOR или даже Tails, вероятно, думает, что они надежно защищены от посторонних глаз. К сожалению, это не всегда так. Существует очень важный канал утечки вашей личной информации — служба DNS. Но, к счастью, для этого есть решение. И сегодня я расскажу вам, как зашифровать ваш DNS-трафик с помощью утилиты DNSCrypt.

Когда вы используете HTTPS или SSL, ваш HTTP-трафик зашифрован, то есть защищен. Когда вы используете VPN, весь ваш трафик уже зашифрован (конечно, все зависит от настроек VPN, но, как правило, это так). Но иногда, даже при использовании VPN, ваши DNS-запросы не шифруются, они передаются как есть, что открывает огромное пространство для «творчества», включая атаки MITM, перенаправление трафика и многое другое.

Здесь на помощь приходит утилита с открытым исходным кодом DNSCrypt, разработанная создателями хорошо известной вам OpenDNS — программы, позволяющей шифровать DNS-запросы. После установки на свой компьютер ваши соединения также будут защищены, и вы сможете более безопасно пользоваться Интернетом. Конечно, DNSCrypt — не панацея от всех проблем, а лишь один из инструментов безопасности. Вам по-прежнему необходимо использовать VPN-соединение для шифрования всего трафика, но оно будет более безопасным в сочетании с DNSCrypt. Если вас устраивает такое краткое объяснение, вы можете сразу перейти к разделу, где я опишу установку и использование программы.

Защита DNS и сохранение собственной анонимности

Принцип работы DNSCrypt

Допустим, клиент (ноутбук на рисунке) пытается получить доступ к google.com. Первый шаг — преобразовать символическое имя хоста в IP-адрес. Если конфигурация сети такова, что используется DNS-сервер провайдера (незашифрованное соединение, красная линия на рисунке), символическое имя преобразуется в IP-адрес через незашифрованное соединение.

Да, никто не узнает, какие данные вы передадите на dkws.org.ua. Но есть очень неприятные моменты. Во-первых, провайдер, изучив журналы DNS, сможет узнать, какие веб-сайты вы посетили. Во-вторых, высока вероятность атак: подмена DNS и отслеживание DNS. Я не буду их подробно описывать, об этом написано много статей. Вкратце, ситуация может быть следующей: кто-то между вами и провайдером может перехватить DNS-запрос (а поскольку запросы не зашифрованы, перехватить запрос и прочитать его содержимое будет несложно) и отправить «ложный ответ». В результате вы вместо посещения google.com зайдете на сайт злоумышленника, как две горошины в пакете, похожем на тот, который вам нужен, введете свой форумный пароль, а дальше развитие событий, я думаю, понятно.

Такая ситуация называется DNS leaking (утечкой DNS). Утечка DNS происходит, когда ваша система, даже после подключения к серверу VPN или Tor, продолжает запрашивать DNS-серверы провайдера для разрешения доменных имен. Каждый раз, когда вы посещаете новый веб-сайт, подключаетесь к новому серверу или запускаете какое-либо сетевое приложение, ваша система использует поставщика DNS для преобразования имени в IP. В результате ваш интернет-провайдер или любой, кто находится на «последней миле», то есть между вами и интернет-провайдером, может получить все имена узлов, к которым вы обращаетесь. Вышеупомянутый вариант со спуфингом IP-адреса совершенно жесток, но в любом случае можно отслеживать посещенные вами веб-сайты и использовать эту информацию в своих целях.

Если вы «боитесь» своего интернет-провайдера или просто не хотите, чтобы он видел, какие сайты вы посещаете, вы можете (конечно, помимо использования VPN и других инструментов безопасности) дополнительно настроить свой компьютер для использования DNS-серверов Проект OpenDNS (www.opendns .com)

На данный момент это следующие серверы:

  • 87.98.175.85 (ns10.fr): 99.74% uptime
  • 130.255.73.90 (ns3.nw.de): 97.45% uptime

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

Но проблема перехвата DNS-соединений все еще остается. Да, вы уже получаете доступ не к DNS провайдера, а к OpenDNS, но все равно можно перехватывать пакеты и видеть, что в них находится. То есть при желании можно узнать, к каким узлам вы обращались.

Итак, мы подошли к DNSCrypt. Эта программа позволяет зашифровать ваше DNS-соединение. Теперь ваш интернет-провайдер (и все между вами и ними) не будет точно знать, какие сайты вы посещаете! Я повторюсь. Эта программа не заменяет Tor или VPN. Как и раньше, остальные передаваемые вами данные передаются без шифрования, если вы не используете VPN или Tor. Программа шифрует только DNS-трафик.

DNS Leak

Сайт http://dnsleak.com/ позволяет определить «утечку» DNS. Просто зайди на этот сайт. Нажав кнопку Check for DNS leaks now, ты получишь список DNS-серверов, через которые могут проходить твои запросы. Следовательно, ты увидишь, кто именно может узнать, какие сайты ты посещаешь.

Защита DNS и сохранение собственной анонимности

Установка DNSCrypt

Прежде всего, загрузите сам DNSCrypt с GitHub. Чтобы загрузить программу с GitHub, нажмите кнопку «Загрузить ZIP». Будет скачан архив с исходниками DNSCrypt. Уже скомпилированная версия находится в каталоге DNSCrypt архива. Распаковать файлы. По сути, вам нужен только один файл — dnscrypt-proxy.exe. Он находится в том же каталоге. Все остальное (источники) можно удалить.

Но это еще не все. Если ты уже погуглил, то, значит, видел скриншоты DNSCrypt. Запустив dnscrypt-proxy.exe, ты понял, что что-то не то. Программа запустилась в окне командной строки. Все правильно, ты скачал сам прокси, а теперь еще нужно скачать к нему оболочку. На GitHub есть еще один проект — необходимая нам оболочка (https://github.com/Noxwizard/dnscrypt-winclient).

Таким же образом скачайте ZIP-архив и распакуйте его куда-нибудь. Каталог двоичных файлов / Release / содержит программу dnscrypt-winclient.exe. Скопируйте этот файл в каталог, в котором находится файл dnscrypt-proxy.exe.

Осталось только запустить dnscrypt-proxy.exe. В появившемся окне выберите сетевые адаптеры, которые вы хотите защитить, и нажмите кнопку «Пуск». Если все в порядке, то рядом с кнопкой «Стоп» появится DNSCrypt is running (кнопка «Старт» изменится на нее).

Установка DNSCrypt

Установка DNSCrypt

Еще один вариант защиты — DNS-over-TLS

Еще один более современный способ защиты DNS-трафика — это протокол DNS-over-TLS, описанный в стандарте RFC7858, то есть инкапсуляция данных в стандарте TLS. Для доступа рекомендуется использовать порт 853.

Как и в случае с DNScrypt, предполагается, что DNS-клиент, который обычно является тем же локальным кэширующим DNS, связывается с удаленными серверами, которые поддерживают DNS-over-TLS (см. Текущий список).

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

Unbound как клиент DNS-over-TLS

Для работы в качестве клиента DNS-over-TLS Unbound требует лишь список серверов в той же секции forward-zone файла конфигурации.

root@my:~ # cat /usr/local/etc/unbound/unbound.conf
server:
...
forward-zone:
        name: "."
        # Quad9
        forward-addr: 9.9.9.9@853
        forward-addr: 2620:fe::fe@853
        ...
        forward-ssl-upstream: yes
...

Unbound как сервер DNS-over-TLS

Настроить Unbound в качестве сервера, обслуживающего запросы DNS-over-TLS, несложно. Для этого можно использовать существующие сертификаты TLS, например от Let’s Encrypt.

root@my:~ # cat /usr/local/etc/unbound/unbound.conf
server:
...
        interface: 127.0.0.1
        interface: ::1
        interface: 0.0.0.0@853
        interface: ::0@853
        tls-service-key: "/usr/local/etc/letsencrypt/live/my.domain/privkey.pem"
        tls-service-pem: "/usr/local/etc/letsencrypt/live/my.domain/cert.pem"
        tls-port: 853
...

В данном случае Unbound по умолчанию обслуживает стандартные нешифрованные DNS запросы на локальном интерфейсе 127.0.0.1 и ::1, однако в данном случае понадобилось это указать в конфигурации в явном виде. Теперь также он доступен и для внешних запросов доступен исключительно по протоколу DNS-over-TLS на порту 853.

 

root@my:~ # sockstat -46 | grep unbound
unbound  unbound    18533 3  udp4   127.0.0.1:53          *:*
unbound  unbound    18533 4  tcp4   127.0.0.1:53          *:*
unbound  unbound    18533 5  udp6   ::1:53                *:*
unbound  unbound    18533 6  tcp6   ::1:53                *:*
unbound  unbound    18533 7  udp4   *:853                 *:*
unbound  unbound    18533 8  tcp4   *:853                 *:*
unbound  unbound    18533 9  udp6   *:853                 *:*
unbound  unbound    18533 10 tcp6   *:853                 *:*

Выводы

Провайдер VPN предоставит вам безопасный туннель для передачи ваших данных, а DNSCrypt защитит ваши DNS-соединения. Конечно, услуги VPN-провайдеров платные, но ведь за безопасность нужно платить, неправда ли?
Вы, конечно, можете использовать Tor, но Tor относительно медленный, и, что бы там ни говорилось, это не VPN — не весь трафик можно «торифицировать». В любом случае (какой бы вариант вы ни выбрали) ваши DNS-соединения теперь защищены. Остается только определиться с инструментом шифрования трафика, если вы еще этого не сделали.

 

 

Click to rate this post!
[Total: 2 Average: 5]

Leave a reply:

Your email address will not be published.