Угрозы конфиденциальности и безопасности в интернете становятся серьёзнее. Мы в Mozilla внимательно их отслеживаем. Считаем своей обязанностью сделать всё возможное для защиты пользователей Firefox и их данных.
Нас беспокоят компании и организации, которые тайно собирают и продают пользовательские данные. Поэтому мы добавили защиту от слежения и создали расширение контейнера Facebook. В ближайшие месяцы появится ещё больше защитных мер.
Сейчас мы добавляем в список ещё две технологии:
- DNS по HTTPS — новый стандарт IETF, в разработке которого мы приняли участие
- Trusted Recursive Resolver — новый безопасный способ резолвить DNS, предоставляется совместно с Cloudflare
Благодаря двум этим инициативам устраняются утечки данных, которые являлись частью системы доменных имен с момента её создания 35 лет назад. И нам нужна ваша помощь в тестировании. Давайте посмотрим, как DNS по HTTPS и Trusted Recursive Resolver защищают наших пользователей.
Но сначала посмотрим, как веб-страницы передаются по интернету.
Если вы уже знаете, как работают протоколы DNS и HTTPS, можете перейти к разделу о том, как помогает DNS по HTTPS.
Краткий курс по HTTP
Когда люди объясняют, как браузер загружает веб-страницу, то обычно объясняют это так:
- Ваш браузер делает запрос GET на сервер.
- Сервер отправляет ответ, который представляет собой файл, содержащий HTML.
Эта система называется HTTP.
Но эта схема слишком упрощена. Ваш браузер не разговаривает напрямую с сервером. Наверное потому что они не близки друг другу.
Сервер может быть за тысячи километров. И вероятно, между вашим компьютером и сервером нет прямой связи.
Таким образом, прежде чем запрос попадёт из браузера на сервер, он пройдёт через несколько рук. То же самое верно для ответа.
Я думаю об этом как о школьниках, передающих друг другу записки в классе. Снаружи в записке написано, кому она предназначена. Ребёнок, написавший записку, передаст её соседу. Затем тот следующий ребёнок передаёт её одному из соседей — вероятно, не конечному получателю, а тому, кто находится в нужном направлении.
— Псст… передай это Сэнди
Проблема в том, что любой по пути может открыть записку и прочитать её. И нет никакого способа узнать заранее, по какому пути будет проходить записка, поэтому неизвестно, какие люди получат доступ к ней.
Она может оказаться в руках людей, которые сделают вредные вещи…
Например, поделятся содержанием записки со всеми.
— О, это пикантно…. Эй народ! Дэнни влюбился в Сэнди!
Или изменят ответ.
— Я тебе тоже нравлюсь?
— Хе-хе, подшучу над ним и напишу «Нет»...
Чтобы устранить эти проблемы, создана новая безопасная версия HTTP. Она называется HTTPS: это словно замок на каждом сообщении.
Только браузер и сервер знают комбинацию для снятия блокировки. Даже если сообщения проходят через несколько маршрутизаторов, только вы и веб-сайт фактически можете прочитать содержимое.
Это решает многие вопросы безопасности. Но между вашим браузером и сервером всё еще есть незашифрованные сообщения. Значит, люди на пути всё ещё могут вмешиваться в ваши дела.
Например, данные по-прежнему открыты во время установки подключения. При отправке исходного сообщения на сервер вы также отправляете имя сервера в поле “Server Name Indication”. Это позволяет операторам сервера запускать несколько сайтов на одном компьютере и в то же время понимать, с кем вы хотите связаться. Этот первоначальный запрос — часть установки шифросвязи, но сам первоначальный запрос не шифруется.
Другое место, где данные открыты — это DNS. Но что такое DNS?
DNS: система доменных имён
В метафоре с передачей записок в классе я сказала, что имя получателя должно быть написано снаружи записки. Это верно и для HTTP-запросов… они должны объявить, куда собираются идти.
Но вы не можете использовать обычное имя сайта. Ни один из маршрутизаторов не понимает, о ком вы говорите. Вместо этого необходимо использовать IP-адрес. Вот как маршрутизаторы по пути понимают, на какой сервер вы хотите отправить запрос.
— Пожалуйста, отправь это на 208.80.154.224
Это вызывает проблемы. Пользователям неудобно запоминать цифры IP-адреса. Хочется дать сайту запоминающееся имя… которое отложится в памяти у людей.
Вот почему у нас есть система доменных имен (DNS). Ваш браузер использует DNS для преобразования имени сайта в IP-адрес. Этот процесс — преобразование доменного имени в IP-адрес — называется разрешением имени домена или резолвингом.
Как браузер решает задачу?
Один из вариантов — завести большой список вроде телефонного справочника в браузере. Но по мере того, как появляются новые веб-сайты или перемещаются на новые серверы, будет трудно поддерживать этот список в актуальном состоянии.
Таким образом, вместо одного списка для всех доменных имён существует много небольших списков, связанных друг с другом. Это позволяет им управляться независимо.
Для получения IP-адреса, соответствующего доменному имени, необходимо найти конкретный список, который содержит нужное доменное имя. Это похоже на поиск клада.
Как выглядит такой поиск клада для сайта вроде англоязычной Википедии, en.wikipedia.org
?
Домен можно разделить на части.
С такими частями можно начать охоту на список, содержащий IP-адрес сайта. Но нам нужна помощь в поисках. Инструмент, который осуществляет эту охоту вместо нас и находит IP-адрес, называется резолвером.
Сначала резолвер обращается к так называемому корневому DNS-серверу. Он знает несколько различных корневых DNS-серверов, поэтому отправляет запрос одному из них. Резолвер спрашивает корневой DNS, где найти дополнительные сведения об адресах в доменной зоне верхнего уровня .org
.
— Вы не знаете, как пройти на en.wikipedia.org?
— Я не знаю ни о чём в зоне .org, но 5.6.7.8 может помочь
Следующий сервер называется сервером имён домена верхнего уровня (TLD). Сервер TLD знает обо всех доменах второго уровня, которые заканчиваются на .org
.
Впрочем, он ничего не знает о поддоменах wikipedia.org
, поэтому тоже не знает IP-адрес en.wikipedia.org
.
Сервер имён TLD посоветует резолверу задать этот вопрос серверу имён Википедии.
— Вы не знаете, как пройти на en.wikipedia.org?
— Иди и спроси у 11.21.31.41, он знает о сайтах в домене wikipedia.org
Резолвер почти закончил. Сервер имён Википедии — это то, что называется авторитативный сервер. Он знает обо всех поддоменах wikipedia.org
. Таким образом, он знает и о en.wikipedia.org
, и об остальных поддоменах, такие как немецкая версия de.wikipedia.org
. Авторитативный сервер сообщает резолверу, по какому IP-адресу можно получить HTML-файлы для этого сайта.
— Вы не знаете, как пройти на en.wikipedia.org?
— О да, просто иди на 208.80.154.224
Резолвер вернёт операционной системе IP-адрес en.wikipedia.org
.
Этот процесс называется рекурсивным разрешением, потому что приходится ходить туда и обратно, задавая разным серверам по сути один и тот же вопрос.
Я говорила, что нам нужен резолвер для помощи в поисках. Но как браузер находит этот резолвер? В общем, он спрашивает у операционной системы.
— Мне нужен резолвер. Можешь помочь?
— Конечно, позволь познакомить тебя с резолвером, который я использую
Как операционная система знает, какой резолвер использовать? Существует два возможных способа.
Вы можете настроить компьютер на использование определённого резолвера, которому доверяете. Но очень немногие люди делают это.
Вместо этого большинство просто использует настройки по умолчанию. И по умолчанию ОС будет использовать любой резолвер, какой скажет сеть. Когда компьютер подключается к сети и получает свой IP-адрес, то сеть рекомендует определённый резолвер.
— Можно мне получить IP-адрес?
— Без проблем! А если тебе понадобится резолвер, рекомендую вот этот
Это значит, что используемый резолвер может изменяться несколько раз в день. Если вы направляетесь в кафе поработать днём, то вероятно используете другой резолвер, чем утром. И так происходит даже если вы настроили свой собственный резолвер, потому что в протоколе DNS нет никакой безопасности.
Как можно эксплойтить DNS?
Так как эта система подвергает опасности пользователей?
Обычно резолвер сообщает каждому DNS-серверу, какой домен вы ищете. Этот запрос иногда включает ваш полный IP-адрес. А если не полный адрес, то всё чаще запрос включает в себя большую часть вашего IP-адреса, что можно легко объединить с другой информацией, чтобы установить вашу личность.
Содержит большую часть вашего IP-адреса…
… и полный домен, который вы ищете
Значит, каждый сервер, который вы попросите помочь с разрешением доменных имен, видит, какой сайт вы ищете. Более того, любой по пути к этим серверам тоже видит ваши запросы.
Существует несколько способов, как подобная система подвергает риску данные пользователей. Два основных — трекинг (отслеживание) и спуфинг (подмена).
Трекинг
Как я говорила выше, по полной или частичной информацию об IP-адресе несложно определить личность того, кто просит доступ к конкретному сайту. Это означает, что DNS-сервер и любой пользователь на пути к этому DNS-серверу (маршрутизатор по пути) может создать профиль пользователя. Они могут составить список всех сайтов, которые вы просмотрели.
И это ценные данные. Многие люди и компании готовы немало заплатить, чтобы увидеть вашу историю посещённых страниц.
Сколько вы готовы заплатить за информацию о том, на что смотрел Джон Доу?
Даже если бы нам не пришлось беспокоиться о потенциально гнусных DNS-серверах или маршрутизаторах по пути, всё равно есть риск, что ваши данные соберут и продадут. Потому что сам резолвер — который вам дала сеть — может оказаться ненадёжным.
Даже если вы доверяете рекомендованному резолверу от сети, то вероятно используете его только дома. Как я уже упоминала, каждый раз в кафе, отеле или в любой другой сети вам, вероятно, дадут другой резолвер. И кто знает, какова его политика сбора данных?
Кроме того, что ваши данные собираются и затем продаются без вашего ведома или согласия, систему используют ещё более опасным способом.
Спуфинг
При помощи спуфинга некто на пути между вами и DNS-сервером меняет ответ. Вместо реального IP-адреса мошенник сообщает вам неправильный IP-адрес для сайта. Таким образом, вам могут заблокировать доступ к реальному сайту или отправить не поддельную версию от мошенников.
Отправь это на 1.6.6.6… это абсолютно правильный адрес, а вовсе не поддельный сайт, который я контролирую
Опять же, здесь и сам резолвер может действовать гнусно.
Предположим, вы делаете покупку в магазине Megastore. Вы хотите сравнить цены и посмотреть, не продаётся ли такой товар дешевле в конкурирующем интернет-магазине big-box.com.
Но если вы пользуетесь Megastore WiFi у них в торговом зале, то вероятно используете их резолвер. Он может перехватить запрос к big-box.com и соврать вам, что сайт недоступен.
Как исправить ситуацию с помощью Trusted Recursive Resolver (TRR) и DNS over HTTPS (DoH)?
Мы в Mozilla твёрдо убеждены, что несём ответственность за защиту пользователей и их данных, и поэтому работаем над устранением данных уязвимостей.
Представляем две новые функции для исправления ситуации: это доверенный рекурсивный резолвер (Trusted Recursive Resolver, TRR) и DNS по HTTPS (DoH). Потому что на самом деле имеется три угрозы:
- Вы можете в конечном итоге использовать ненадёжный резолвер, который отслеживает ваши запросы или подменяет ответы от DNS-серверов.
- Маршрутизаторы по пути могут отслеживать запросы или вмешиваться таким же образом.
- DNS-серверы могут отслеживать DNS-запросы.
Как этого избежать?
- Избегать ненадёжных резолверов с помощью TRR.
- Защищаться от прослушивания и спуфинга с помощью DNS по HTTPS.
- Передавать как можно меньше данных, чтобы защитить пользователей от деанонимизации.
Избегать ненадёжных резолверов с помощью TRR
Сети могут перестать рекомендовать ненадёжные резолверы, которые собирают данные пользователей или подделывают DNS-запросы, потому что очень немногие пользователи знают о рисках или о том, как защитить себя.
Даже для пользователей, которые знают о рисках, отдельному пользователю трудно договориться со своим провайдером или другой организацией о гарантиях, что с его DNS-запросами будут ответственно обращаться.
Тем не менее, мы изучили этих риски… и у нас есть определённое влияние. Мы долго искали компанию, которая поможет нам защитить DNS-данные пользователей. И нашли одну такую: Cloudflare.
Cloudflare предоставляет сервис рекурсивного резолвинга с политикой конфиденциальности для пользователей. Они обязались удалять все привязанные к конкретным людям данные (personally identifiable data) после 24 часов и никогда не передавать эти данные третьим лицам. Будут проводиться регулярные проверки, что данные действительно удаляются, как было обещано.
Благодаря этому у нас есть доверенный резолвер для защиты приватности пользователей. Это означает, что Firefox может игнорировать резолвер сети, а перейти сразу к Cloudflare. Теперь можно не беспокоиться, что злоумышленники используют резолвер для продажи данных пользователей или спуфинга DNS.
Почему мы выбрали один резолвер? Как и мы, Cloudflare озабочен созданием приватной службы DNS. Они вместе с нами разработали хороший прозрачный резолвер DoH. Компания с готовностью пошла на дополнительную защиту сервиса, поэтому мы рады сотрудничать с ними.
Но это не значит, что вы должны использовать Cloudflare. Пользователи могут настроить Firefox на использование любого рекурсивного резолвера с поддержкой DoH. По мере появления новых сервисов мы планируем реализовать простое обнаружение и переключение между ними.
Защищаться от прослушивания и спуфинга с помощью DNS по HTTPS
Но резолвер — не единственная угроза. Маршрутизаторы на пути могут отслеживать и подделывать DNS-запросы, поскольку тоже видят содержимое запросов и ответов DNS. К счастью, в интернете уже есть технология для защиты от прослушивания со стороны маршрутизаторов на пути. Это шифрование, о котором я говорила.
Использование HTTPS для обмена DNS-пакетами защищает DNS-запросы наших пользователей от шпионажа.
Передавать как можно меньше данных, чтобы защитить пользователей от деанонимизации
Вдобавок к доверенному резолверу, который работает по протоколу DoH, мы с компанией Cloudflare работаем над дополнительными мерами безопасности.
Обычно резолвер отправляет полное имя домена каждому серверу: корневому DNS, серверу имён доменов верхнего уровня, второго уровня и т. д. Но сервер Cloudflare будет поступать иначе. Он будет отправлять только ту часть, которая имеет отношение к конкретному DNS-серверу. Это называется минимизация QNAME.
— Вы не знаете, как пройти на сервер .org?
Часто резолвер также включает в запрос первые 24 бита вашего IP-адреса. Это помогает DNS-серверу узнать, где вы находитесь, и выбрать ближайший CDN. Но DNS-серверы могут использовать данную информацию для связывания друг с другом разрозненных запросов.
Вместо этого Cloudflare будет делать запрос с одного из собственных IP-адресов, который находится рядом с пользователем. Это обеспечивает геолокацию без привязки к конкретному человеку. Мы также изучаем, как реализовать ещё лучшую, тонкую балансировку нагрузки с учётом конфиденциальности.
Всё это — удаление ненужных частей домена и IP-адреса — означает, что DNS-сервер может собрать о вас гораздо меньше данных.
Что остаётся за рамками TRR с DoH?
Эти защитные меры сокращают количество людей, которые могут видеть историю посещённых вами страниц. Но они полностью не исключают утечки данных.
После выполнения поиска в DNS для получения IP-адреса по-прежнему необходимо подключиться к веб-серверу по этому адресу. Для этого необходимо отправить запрос. Запрос включает в себя SNI (server name indication) с указанием конкретного сайта на сервере. И этот запрос не шифруется.
То есть ваш интернет-провайдер по-прежнему способен выяснить, какие сайты вы посещаете, потому что они указаны прямо там, в SNI. Информация открыта и для маршрутизаторов, которые передают первоначальный запрос из вашего браузера на веб-сервер.
Но как только вы установили соединение с веб-сервером, всё зашифровано. И самое главное, что данное зашифрованное соединение можно использовать для любого сайта на этом сервере, а не только для того, который вы изначально запрашивали.
Это иногда называют слиянием соединения HTTP/2 (connection coalescing) или просто повторным использованием соединения. Когда вы открываете соединение с совместимым сервером, он сообщит, какие ещё сайты размещаются на нём. Затем вы можете посетить эти сайты, используя существующее зашифрованное соединение.
Почему это полезно? Потому что не нужно открывать новое соединение для подключения к этим другим сайтам. То есть вам не нужно отправлять ещё один незашифрованный первоначальный запрос с указанием SNI и раскрытием информации, на какой сайт вы идёте. Так вы можете посетить любой из других сайтов на том же сервере, не раскрывая их своему провайдеру и маршрутизаторам на пути.
С ростом популярности CDN всё больше отдельных сайтов обслуживаются одним сервером. И поскольку у вас может быть открыто несколько объединённых соединений, вы одновременно подключаетесь к нескольким общим серверам или CDN, посещая все сайты на разных серверах без утечки данных. Так что данная функция всё более эффективно работает как защитный экран.
Каков статус?
Уже сейчас в Firefox вы можете включить DNS по HTTPS, и мы рекомендуем сделать это.
Мы хотим включить DoH по умолчанию для всех пользователей, поскольку каждый человек заслуживает конфиденциальности и безопасности, независимо от того, знает он об утечках DNS или нет.
Но это значительное изменение, и его нужно сначала протестировать. Поэтому мы проводим исследование. Половину наших пользователей Firefox Nightly мы просим помочь собрать данные о производительности.
В тестировании используется резолвер по умолчанию, как и сейчас, но также запросы отправляются на DoH-резолвер Cloudflare. Затем мы сравниваем результат для проверки, что всё работает как положено.
Для участников исследования ответ Cloudflare DNS пока не используется. Мы просто проверяем, что всё работает, а затем выбрасываем ответ Cloudflare.
Выражаем благодарность за поддержку пользователям Nightly, которые каждый день помогают тестировать Firefox. Надеемся, что вы тоже поможете нам.
Автор: m1rko