Skip to content

Новые технологии ломают интернет. Часть 2.

Это вторая часть. Первая часть.

DNS-over-HTTPS (DoH) и split-horizon

DNS используется для разрешения имени сайта в IP адрес. Некоторые сайты могут быть доступны только внутри сети. Когда DNS сервер отвечает по-разному в зависимости откуда пришел запрос - это называется расщепленный горизонт (split horizon).

Пример

  • Локальный DNS сервер для домена example.org
  • DNS сервер при запросе из интернета записи www.example.org отвечает 1.2.3.4
  • DNS сервер при запросе из локальной сети записи www.example.org отвечает 10.20.30.40
  • DNS сервер при запросе только из локальной сети записи pii.example.org будет отвечать

Изначально DNS сервер для разрешения имен указывается в настройках сетевого интерфейса. Запрос к нему отправляется открытым текстом на порт 53.

Проверка какой DNS сервер установлен на интерфейсе

ipconfig /all

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

Однако DNS over HTTPS (DoH) ломает эту последовательность. DoH забирает настройку DNS сервера с уровня сети и перекладывает ее на уровень приложения (веб-браузера). Количество провайдеров DoH невелико. А в некоторых браузерах вшит список DoH серверов, который нельзя поменять.

Таким образом DNS сервер третьей стороны получает доступ ко всему списку сайтов, которые клиент запрашивает. DNS запрос инкапсулируется в HTTPS. Затем зашифрованный запрос отправляется на сторонний DoH сервер на порт 443.

Пример

  • Веб браузер использует DoH
  • Пользователь вводит адрес сайта pii.example.org
  • DNS запрос уходит на DoH сервер в Интернете вместо локального DNS сервера
  • Третья сторона получает информацию о запрошенном сайте. И это проблема

Для работы DoH нужно чтобы веб браузер и DNS сервер поддерживали DoH.

Вывод

  • Все плохо. Существуют политики безопасности, но каждый веб браузер теперь сам решает как работать с DNS
  • Тех. поддержка DNS становиться более затратной. Появляется еще одна точка отказа
  • В корпоративной сети повышается риск утечки информации
  • DoH ломает captive portals. Их используют при аутентификации в корпоративной сети
  • DoH снижает пользу nslookup. Информация из nslookup перестает совпадать с информацией, получаемой веб браузером
  • DoH работает на HTTP/2. О нем в предыдущей части

Проверка записи через DoH

curl -H "Content-Type: application/dns-json" "https://dns.google.com/resolve?name=www.google.com&type=A"

Пример выше использует JSON формат. В DoH также используется бинарных формат (wireformat). Каждый DoH сервер решает сам, какой формат использовать.

В новых версиях Windows 10 появится DoH клиент. И будет включен по умолчанию.

Проверить работу DoH можно через захват пакетов. Запустив поиск по 53 порту. Если на нем нет трафика, а имена разрешаются, значит DoH работает.

Захват пакетов на Windows 10 с помощью новой утилиты захвата пакетов

pktmon filter remove 
pktmon filter add -p 53 
pktmon start --etw -m real-time 
pktmon stop

eSNI в Firefox.

Напрямую это с DoH не связано, но может поломать SNI прокси из прошлой части. Напомню, SNI является адресом сайта, который клиент передает веб серверу открытым текстом. Включение шифрования SNI в TLS

about:config
network.trr.uri — mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled true
network.trr.mode 2
network.trr.bootstrapAddress 1.0.0.1

Комбинируя DoH и eSNI можно защититься от прослушки. DoH будет шифровать запрос адреса сайта у DNS сервера. eSNI будет шифровать запрос сайта у веб сервера. В компаниях это обходиться путем принудительной установки доверенного сертификата прокси сервера. Прокси сервер пропускает через себя весь веб трафик клиентов. Он выпускает сертификаты для всех запрашиваемых сотрудниками HTTPS сайтов и осуществляет расшифровку передаваемого трафика.

Источник 1

Источник 2

Источник 3

Источник 4

Источник 5

Источник 6

Источник 7

Источник 8

Источник 9

Источник 10

Источник 11

Источник 12

Источник 13

Источник 14

Источник 15

Источник 16

Источник 17

Источник 18

Источник 19

Источник 20

HSTS enforcing ssl и .dev домен

OK с этим я сам не сталкивался. Но для веб разработчиков было сюрпризом._

С помощью HSTS веб сервер может указать клиенту подключаться по HTTPS.

Пример

  • Веб сервер настроен отправлять специальный заголовок
  • Веб бразуер подключается к веб серверу
  • Веб сервер посылает специальный HTTP заголовок Strict-Transport-Security
  • Этот заголовок передается только через защищенное HTTPS соединение
  • Этот заголовок изменяет поведение браузера с доменом и опционально поддоменом
  • При первом корректном соединении HTTPS браузер получает HSTS заголовок и сохраняет правило на указанный период
  • Если сертификат на HTTPS некорректный, на сервере с включённым HSTS, то веб браузер запрещает пользователю заходить на сайт

Пример заоголовка Strict-Transport-Security

max-age=63072000; // время кэша браузера
includeSubDomains; // применять политику на поддомены
preload // использовать список обязательного HTTPS (см. ниже)

Почему это проблема:

  • При запросе HTTP:\\www.example.org пользователь ожидает подключение по HTTP протоколу. При HSTS браузер кэширует политику и принудительно переключает коммуникацию на HTTPS. Т.е. самый первый запрос будет идти сразу по HTTPS не смотря на явно указанный протокол HTTP
  • Использование HSTS preload list. В браузер вшит список доменов обязательных для загрузки по HTTPS. Т.е в браузер захардкожены правила, которые невозможно поменять. Имея доступ к веб серверу на определенном домене, можно запросить включение в статический список HSTS для сайта и всех поддоменов.
  • Запрет на подключение с некорректным сертификатом. Изначально, если сайт по HTTPS выдает ошибку неправильного сертификата, то пользователь может продолжить подключение на свой риск. Есть соответствующая кнопка. Веб сервер сайта (и опционально поддомены) с HSTS явно запрещают пользователю подключаться к сайту с проблемным сертификатом. Нет кнопки продолжить, подключиться к сайту невозможно. И это проблема

Пример с DEV доменом

  • При локальной разработке используются "непубличные" домены
  • Их прописывают в локальный hosts файл на машине разработчика
  • Почти любой домен может стать публичным (список запрещенных доменов ограничен)
  • Это произошло с .DEV доменом. Google купил этот домен
  • Google установил политику HSTS на домен и его поддомены
  • Локальный сайт разработчика test.dev перестал работать
  • В браузере вшито требование использовать однозначно HTTPS ко всем сайтам домена DEV и поддоменов
  • Работа разработчика нарушена

Небольшое отклонение_: для защиты от поддельных сертификатов еще используется механизм Certificate Transparency. Его суть в том, что о всех выпускаемых сертификатах CA записывает информацию в публичный лог. Браузер подключаясь к HTTPS сайту, проверяет лог по отметке SCT и если не находит в нем сертификата, значит он поддельный. Специальная отметка может передаваться в заголовке веб севреа или в самом сертификате. Как же работает расшифровка TLS трафика в компаниях? Или при самоподписанных сертификатах (self-signed)? Прокси сервер использует сертификат внутреннего центра сертификации (иначе кто бы ему разрешил выдавать сертификаты на все сайты интернета). А Certificate Transparency работает только для публичных CA.

Проблема с сертифкатом и всей системой PKI в том, что любой центр сертификации (CA) может выдать сертификат к любому сайту.

Вывод

  • Все плохо

Источник 1

Источник 2

Источник 3

Источник 4

Источник 5

Источник 6

Источник 7

Источник 8

Источник 9

Источник 10

Источник 11

Источник 12

Источник 13

Источник 14

Источник 15

Источник 16

Источник 17

Источник 18

Источник 19

Источник 20

Источник 21

Источник 22

Источник 23

Источник 24

Источник 25

Источник 26

Источник 27

Источник 28

Источник 29

Источник 30

Windows Fast Boot и системные драйверы

ОК это не про Интернет, но тоже не работает.

При изменении системных настроек (например установка драйвера) требуется полный перезапуск компьютера. Перезапустив систему новые настройки включаются. В новой версии Windows 10 выключение компьютера было заменено на гибридный сон. При этом название операции - выключить компьютер - осталось.

Пример

  • Устанавить драйвер
  • Требуется перезагрузка
  • Компьюетр перезагружается
  • После перезагрузки драйвер не работает
  • Потому что новые настройки не применяются. Потому что для них нужно полное выключение, а его не происходит.

Вывод

  • Отключить Windows Fast Boot. Это чуть увеличит скорость запуска системы. Но поможет избежать ошибок с применением системных настроек.

Чтобы в Windows 10 отключить Быстрый запуск

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /f /v HiberbootEnabled /t REG_DWORD /d 0

Источник 1