Многим уже известно, что Ростелеком при поддержке Mail.ru начал внедрение своих рекламных баннеров на сайтах не защищённых протоколом HTTPS. Защититься от их появления на своём сайте можно переводом его на HTTPS. Но что делать, если у вас нет такой возможности или для вас это слишком трудоёмко? Я провёл своё небольшое исследование и хочу поделиться простым и пока ещё эффективным способом против этой заразы.
На Хабре уже были расследования на эту тему и я опирался на них:
- Вы не смотрите рекламу во время разработки? Непорядок
- DPI: Deep Packet INJECTION, или конспирологическая теория о заговоре между RTK и MRG
Известно, что баннеры внедряются путём подмены оригинального JavaScript файла на вредоносный через редирект. А уже он вставляет на страницу сайта баннер и загружает оригинальный файл. Таким образом, при проверке на вирусы невозможно сразу обнаружить как на сайте появилась реклама, т.к. оригинальные файлы не изменяются, а редирект выполняется с определённым интервалом и обнаружить его достаточно сложно.
Для исследования нужен сайт работающий по протоколу HTTP и содержащий JS файлы. В качестве примера я взял сайт Музеи Кирова. С некоторой периодичностью на нём можно наблюдать баннеры.
Я написал специальную утилиту. Она делает запрос по определённому URL через равные промежутки времени и сравнивает полученное содержание с предыдущим. Если содержание ответа отличается — оно сохраняется для изучения. При анализе запросов к небольшому скрипту
http://muzey43.ru/js/script-eye.js
обнаружилось, что всегда возвращается одинаковое содержание — редиректа нет.Тогда каким образом появляется баннер? При изучении исходного кода сайта обнаружился ещё один JS файл, который загружался по HTTP, но с другого хоста:
http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js
. При анализе этого запроса периодически наблюдаем получение содержания вредоносного файла.Из скриншота видно, что вредоносное содержимое загружается приблизительно два раза в минуту, но могут быть и недолгие перерывы в работе редиректа. Содержимое зловреда каждый раз меняется путём обфускации кода и содержит ссылку на оригинальный скрипт.
Скорее всего, существует некий «белый список» хостов, JS редирект для которых запрещён. Например, сайт Министерства культуры Кировской области. Несмотря на то, что он работает через HTTP протокол, баннеры на нём не появляются. А вот на сайте Музеи Кирова баннер присутствует, хотя редиректа для его скриптов и нет, но через редирект скрипта с другого хоста в него внедряется баннер. Чтоб устранить уязвимость в данном случае, скорее всего, достаточно запрашивать файл по HTTPS протоколу, т.е. просто заменить URL скрипта на
https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js
Но что делать, если ваш сайт не в «белом списке» и нужно использовать собственные скрипты? Я обнаружил простой способ избежать JS редиректа. Достаточно в URL скрипта добавить произвольный параметр:
https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js?banner=off
и редирект выполняться не будет.Вероятно, это сделано, чтоб редирект не нарушал работу сложных динамических JS сайтов, либо нужные файлы просто определяются по расширению
.js
. Но в любом случае, достаточно дописать к URL-ам скриптов на страницах вашего сайта случайные параметры и рекламные баннеры Ростелекома на нём появляться не будут.P.S. Как верно указывают в комментариях, самым правильным решением для владельцев сайтов будет переход на HTTPS, тем более что сейчас некоторые хостинги предлагают установку бесплатного сертификата прямо из панели одной кнопкой. Ведь завтра Ростелеком легко может подкрутить алгоритм редиректа и решение приведённое выше перестанет работать. А просто блокировка редиректа фильтром на клиенте, как некоторые предлагают, сможет решить проблему только клиента — баннера не будет, но не будет и подстановки скрипта который он подменил и при этом функционал сайта может пострадать.
CyclusVitalis
Можно еще написать заявки во все блокировщики рекламы на бан
http://p.analytic.press/
http://r.analytic.press/
и (так как домен еще активен)
http://p.analytic.host/
http://r.analytic.host/
А то сейчас реклама от mail.ru блокируется, но скрипты ее вызывающие свободно выполняются на открытых сайтах.
Ded_Keygen
Первые два хоста uBlock Origin блокирует через список AdGuard Tracking Protection. Но этот список в дефолтной установке не включен, надо включать вручную.
CyclusVitalis
Спасибо за информацию!
Смотрел как-то списки фильтров в uBlock Origin, но не нашел этих доменов. Видимо криво просматривал.
Bytexpert Автор
Основную проблему блокировки подменяющего скрипта дописал в PS к статье. Для посетителя сайта это проблему решит — да, баннер показан не будет. Но в этом случае не будет загружен и оригинальный скрипт, который зловред заблокировал, т.к. он кроме рекламы вставляет на страницу и скрипт, который подменил. В этом случае сайт потеряет функциональность, т.к. нужный скрипт не будет загружен.
CyclusVitalis
Я, как простой пользователь, а не владелец сайта, решаю проблему подмены скриптов со своей стороны доступными средствами. У меня нет желания запускать подставляемые скрипты с непонятным функционалом.
P.S. Идея для браузерного расширения, чтобы пользователь не терял функционал, если владелец сайта о пользователе не побеспокоился: Если на странице есть вызов скрипта по http протоколу и у скрипта нет параметров, то добавить параметр при вызове.