Я много мог бы рассказать о кэшировании: о том, как это ускорило загрузку веб-сайтов, об удобстве работы с «тяжелыми» страницами, что за кэшированием будущее и Google убеждает веб-мастеров максимально кэшировать все, что только возможно… Но я специалист в области безопасности и буду говорить о другом: о том, что кэшированные сайты хранятся у вас на компьютере, что кэш веб-сайта можно украсть, а вместе с ним и ценную информацию, что кэш сайта может нести угрозу для вашей анонимности…
Когда вы загружаете веб-сайт с сервера, вам на компьютер поступает набор кода. Вот так выглядит код сайта Google.
Этот код обрабатывается вашим браузером, превращая в веб-сайт, который вы привыкли видеть.
Средняя страница современного веб-сайта весит около 5 МБ. Это не много, но пользователи ожидают от сайтов максимально быстрой загрузки, а веб-мастера (создатели и менеджеры сайтов), подбадриваемые Google, делают все возможное для ускорения повторной загрузки сайта.
Откройте сайт google.com. Теперь закройте его и снова откройте. Что-нибудь изменилось? Ничего? Согласитесь, нет никакого смысла загружать на ваш компьютер этот сайт второй раз, достаточно просто сохранить его там. Вот и весь смысл кэширования. Загрузить с компьютера всегда быстрее, нежели с сервера, кроме того, кэширование снижает общую нагрузку на сети в мире.
К слову, кэшируют сайты не только браузеры, но и прокси-сервера. Прокси-сервер один раз загружает у себя сайт и при повторном запросе предоставляет пользователям кэшированную на сервере версию страницы. Это существенно ускоряет загрузку пользователем веб-сайта.
Если подменить кэш сайта на уровне сервера, можно загрузить пользователям вредоносную версию сайта. Эта атака называется Web Cache Poisoning, о ней мы подробнее поговорим в главе о прокси-серверах.
Кэш браузера – как новый пин-код к банковской карточке: первый раз вы вводите его по бумажке, затем стараетесь сохранить у себя в голове, так как оттуда извлекать его быстрее и удобнее, чем лезть за бумажкой. Бумажка вам потребуется снова только в случае изменения пин-кода.
Зачем может потребоваться удалить кэш? Вот как это объясняется в одном из блогов в интернете.
Беда в том, что подобные блоги в основном пишут люди, у которых на жестком диске всего 100 ГБ, 3/4 которого уже заняты папкой ХХХ. На практике кэшированные сайты редко занимают больше 1 ГБ. Вы сами можете ограничить объем места, выделенного браузеру под хранение информации, никакой необходимости удалять весь кэш нет.
У кэша есть некоторые особенности, которые вам стоит запомнить. Одна из них – ограниченность места, выделяемого браузеру на жестком диске. Когда место заканчивается, новые данные постепенно начинают вытеснять старые.
Честное слово, ничего дурного не хочу сказать об авторе, но меня расстраивает такой подход, когда материалы пишут ради того, чтобы написать. Есть ключевые слова «кэш браузера» и «удалить кэш», и по ним пишут статью, взяв материалы из другого аналогичного блога, написанного таким же «экспертом». А потому совет в этой главе будет весьма необычным.
Совет
Не читайте сомнительные веб-сайты и блоги, посвященные вопросам оптимизации компьютера и сетевой безопасности.В следующей главе я вернусь к разговору о необходимости очистки кэша, но только после обсуждения угроз, которые могут исходить от кэша браузера.
Browser Cache Poisoning
Эта атака звучит довольно грозно, но сегодня она не является популярной. Как правило, цель атакующего – поменять сохраненные в кэше скрипты JavaScript на вредоносные для дальнейшего исполнения их на компьютере жертвы. Как и другие MITM-атаки, Browser Cache Poisoning можно провести против жертвы, например, взломав Wi-Fi, к которому она подключена, или имея доступ к VPN или proxy, который она использует.
Browser Cache Poisoning предоставляет злоумышленнику возможность запуска в браузере жертвы вредоносных скриптов. Целью может быть сбор данных, получение логинов, паролей и другой вводимой в браузере информации, загрузка вредоносного ПО, переадресация на сайт злоумышленника.
Небольшая популярность Browser Cache Poisoning связана с низкой эффективностью в сравнении с другими типами атак. Например, современная MITM- атака позволяет перенаправить пользователя на сайт атакующего или просто перехватывать информацию без лишних действий, таких как заражение кэша.
Cache Timing
Если переводить на русский, это атака, основанная на измерении времени загрузки кэша браузера. В интернете немного пишут про эту атаку, уходя в дебри ее реализации и практического применения. Основная задача этой атаки – получить информацию, открывался ли когда-либо ранее тот или иной сайт.
Опишу ее общий смысл на простейшем и всем понятном примере. Вы взяли компьютер друга и открываете на нем один из популярных порносайтов. Ваш друг может очистить историю, и браузер не будет помнить, чтобы этот сайт когда-либо открывался. Но если он открывал этот сайт, вероятнее всего, у него сохранилась кэшированная версия.
Вы открываете сайт в приватном режиме браузера и в обычном, сравнивая скорость загрузки. Если скорость одинаковая, значит, сайт открывается впервые, если в обычном режиме сайт загружается быстро, а в приватном долго, значит, на компьютере имеется кэшированная версия, которая и ускоряет загрузку в обычном режиме. Вот и весь смысл тайминга кэша.
Geo-Inference Attack
Это один из методов тайминг-атаки, цель которой – установить точную страну, город, адрес и язык браузера пользователя без его разрешения. Geo-Inference Attack крайне интересная атака, и с вашего позволения я уделю ей чуть больше внимания.
Как проводится Geo-Inference Attack?
Зайдите на сайт Google.com. Если вы житель России, вы будете переадресованы на региональный сайт google.ru. Он сохранен в кэше вашего браузера.
А вот какая картинка сохраняется в кэше у пользователя из Германии.
А вот такая у пользователя из Японии.
Не то чтобы сильно оригинально, но это разные картинки. Злоумышленник сохраняет у себя все возможные варианты логотипа Google, это понадобится для осуществления Geo-Inference Attack.
Пользователю пытаются загрузить картинки. Первый раз картинка загружается с пометкой «не проверять наличие в кэше», и измеряется время загрузки. Таким образом мы узнаем, какое время займет загрузка изображения без использования кэша. Пусть это будет условно 10 миллисекунд.
Затем мы пробуем загрузить эту же картинку, но уже с использованием кэша.В таком случае браузер проверит наличие данной картинки в кэше и возьмет ее, это в разы сократит время загрузки, например, до 3 миллисекунд. Если мы видим, что пользователь с IP-адресом из Германии никогда не загружал немецкую версию Google, но картинка Google Россия сохранена у него в кэше, вряд ли это житель Германии, согласны?
Как определяется город? Абсолютно так же: есть сервисы, сайты которых отличаются в зависимости от города пользователя. Но самое интересное – это определение адреса, а вернее, посещаемых адресов. Вы, наверное, уже догадались, что сайты вроде Google Maps и Яндекс.Карты кэшируют данные, поэтому вы можете узнать, какие адреса загружал пользователь.
Как защититься от Geo-Inference Attack?
Единственным эффективным методом остается запрет кэширования данных на сайтах, имеющих уникальные версии для каждой страны или города, например Google. Приватный режим браузера может помочь лишь в некоторой степени. Браузер забудет все данные по завершении сеанса приватного режима, но в процессе сеанса вы посетите Google, а затем сайт со скриптом для Geo-Inference Attack – и атака сработает.
Есть еще пара методов защиты. Первый – ввести в заблуждение атакующего с помощью версии Google другой страны. Например, находясь в России, вы можете использовать IP-адрес Украины и украинскую версию Google. Атакующий увидит использование вами Google Украина, русского языка и украинского IP-адреса, ну как тут не поверить?
Второй метод защиты –ограничение исполнения скриптов на сайте. Для проверки скорости кэширования картинок атакующий использует скрипты, если не дать им запуститься, провести Geo-Inference Attack невозможно. Ограничение выполнения скриптов на сайте безусловно правильный с точки зрения безопасности шаг, о нем мы подробнее поговорим позже.
Кэш скомпрометированного сайта
Одна из самых опасных угроз, которую может нести кэш информации из браузера. Например, сайт был взломан, и у вас в браузере кэшируется версия сайта с вредоносным контентом. Даже когда владельцы восстановят права над сайтом, у вас загрузится первоначально сохраненная на жестком диске версия. Она с высокой долей вероятности по-прежнему будет содержать вредоносный контент, представляющий угрозу для вас. Потому в случае загрузки ранее скомпрометированного сайта очистка кэша обязательна.
Используете только крупные сайты и думаете, что их не взломают? Истории известны взломы таких популярных сайтов, как MySQL.com, linuxmint.com и многих других. Конечно, не всегда злоумышленники изменяют сайт так, что у пользователей кэшируется вредоносная информация: например, MySQL.com просто заражал всех посетителей, на linuxmint.com изменили ссылку на скачивание, содержащую скомпрометированный образ Linux Mint, однако риск кэширования вредоносной информации весьма высок.
Криминалистический анализ кэша браузера
Анализ кэша браузера может показать, какие сайты вы посещали и когда, а потому он, естественно, используется при комплексном криминалистическом анализе устройства.
Более того, кэш часто выдает, авторизовались ли вы на сайте, так как интерфейс многих сайтов до авторизации и после нее отличается, например в социальной сети Facebook. Во многом именно поэтому в программу экстренного удаления ценной информации Panic Button (проект закрыт в 2021 году) мы добавили удаление кэша браузера в комплексную очистку браузера.