Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

Представьте себе молодой проект Chromium и не менее молодой браузер Chrome на его основе. Он уже известен, но до глобального доминирования ещё очень далеко. Так было 10 лет назад. Именно тогда в него внедрили едва ли заметную пользователями функцию, которая через многие годы создаст большую проблему для корневых DNS-серверов, на которых держится современный интернет.

Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

Примерно так, да

Омнибокс и задачка, которую он породил

Вы ведь помните, чем на старте Хром отличался от других браузеров? Правильно, он объединил адресную и поисковую строки. Пользователь получил возможность вводить в единую строку, названную омнибоксом, всё что угодно. Пишет адрес — попадает на сайт, пишет слова — попадает в поиск.

Примерно в этот момент могли напрячься компании, которые во внутренней сети использовали внутренние веб-страницы с корявыми адресами. К примеру, если сотрудник вводил в адресную строку более древнего браузера слово mail, то внутренняя сеть могла показать ему корпоративный почтовый сервис http://mail. Но вот новенький омнибокс вполне мог посчитать это поисковым запросом и отправить в Google. На радость админам, у которых первой реакцией, я уверен, было желание запретить новый браузер. Запретить же всегда проще.

Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

Сериал IT Crowd. Рекомендую

К счастью, ребята из Google испугались злых админов и продумали этот сценарий. Chrome предусмотрительно отправляет DNS-запросы для одиночных слов, введённых пользователем в омнибокс. Если сеть возвращает что-то осмысленное, то браузер предлагает открыть такой сайт. А вот если в ответ прилетает ошибка NXDOMAIN, то это точно сценарий поиска.

Мир, дружба, жвачка. Все довольны. Но не долго.

Intranet Redirect Detector спешит на помощь

Оказалось, что некоторые провайдеры (особенно американские) и владельцы халявных Wi-Fi точек настолько страх потеряли, что решили перехватывать некорректные, по их мнению, урлы и перенаправлять все такие запросы на заглушку с рекламой. Под капотом это работает так: пользователь вводит одностраничный запрос, Chrome отправляет проверочный DNS-запрос, провайдер видит, что такого сайта нет в реестре … но вместо ошибки решает вернуть IP-адрес своей рекламной заглушки.

Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

Реальный пример рекламной заглушки провайдера

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

И вот тут случился поворотный момент во всей нашей истории. Чтобы не бесить пользователей, нужно выявлять хитропопое поведение провайдера. А для этого придумали фичу Intranet Redirect Detector.

Работает она так. При каждом запуске или при смене источника сети браузер отправляет три DNS-запроса. Да не простые, а для сгенерированных из набора случайных букв слов. Таких доменов с высокой вероятностью не существует в мире, поэтому Хром ожидает получить в ответ три ошибки. Но если мы находимся в сети, в которой провайдер перехватывает и подменяет ошибки на свою страницу, то результат будет другой. Если браузер видит, что как минимум у двух запросов в ответ прилетает один и тот же адрес, то это признак перехвата. Значит, такой сети доверять нельзя. Значит, все одностраничные запросы обрабатываются как поисковые. И никаких вопросов пользователю.

Мир, дружба, жвачка. Все опять довольны. Проходит десять лет…

МИР НА ГРАНИ КОТОСТРОФЫ

Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

Ну, почти

За десяток лет Google Chrome превратился из гиковской игрушки в доминирующий браузер в мире. Более того, на проект Chromium перешли и другие популярные браузеры. А значит, абсолютное большинство браузеров в мире сейчас отправляют по три случайных DNS-запроса при каждом перезапуске.

Само по себе это звучит не страшно. Три запроса это ведь капля в море. Многие страницы в интернете содержат ссылки на десятки разных доменов, браузеры успешно резолвят их адреса в фоне. Но есть одно но. Проверочные «адреса» в Хроме генерируются случайно и в реальности не существуют. И чо, скажете вы.

Давайте на секунду вспомним, как вообще работает сеть DNS-серверов. Как правило, все запросы вашего браузера обрабатывает DNS-сервер вашего провайдера. Если вдруг к нему прилетает домен, который он не знает, то он обращается по цепочке к более верхнеуровневому серверу, который возвращает адрес, который провайдер кэширует к себе, а потом отдает всем своим пользователям. Запросы редко уходят в корень иерархической сети DNS-серверов, потому что адреса для существующих сайтов уже закэшированы на уровне провайдера.

А теперь представьте, что происходит с потоком DNS-запросов с уникальными доменами ото всех браузеров на базе Chromium. Провайдер ответа не знает, потому что в прошлом никогда не встречался с этим доменом. Он передаёт запрос дальше по цепочке. Следующий сервер тоже в шоке. И так далее, и так далее, пока запрос не попадает на самый верхний уровень — к корневому DNS-серверу. Да, он благополучно возвращает ошибку, которая ретранслируется обратно по цепочке и даже закэшируется на каждом слое. Вот только ВСЕ тестовые запросы уникальны. Понимаете? КАЖДЫЙ запрос от КАЖДОГО браузера в МИРЕ проходит всю цепочку и долбит корневой сервер. Корневых серверов, конечно, больше чем один, но их всё равно мало, и вся сеть была сконструирована без учёта такой возможной нагрузки.

В результате сейчас 50% всех запросов к корневым серверам — это фейковые/тестовые запросы от Chrome и других Chromium-based браузеров. И эта доля быстро растёт.

Как незначительная функция браузера Chrome оказалась большой проблемой для всего мира

«Полезная» нагрузка

Чем больше бесполезной нагрузки, тем меньше остаётся ресурсов на полезную. Это значит, что в теории эта старенькая фича браузера Хром может даже привести к перебоям в работе интернета во всём мире.

Но не приведёт. Надеюсь. Потому что разработчики из Google решили таки прекратить ддосить DNS-серверы 60 миллиардами своих фейковых запросов в сутки. Готового решения ещё нет. Но работа уже обсуждается в двух тикетах: один был создан в июне этого года, другой в мае прошлого года. Активная работа в них по совершенно случайному стечению обстоятельств началась сразу после публичной огласки этой проблемы несколько дней назад. Следим!