Новые технологии ломают интернет. Часть 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 сайтов и осуществляет расшифровку передаваемого трафика.
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) может выдать сертификат к любому сайту.
Вывод
- Все плохо
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