Так ли безопасны «топовые» сайты: исследуем рейтинг Alexa
Если посмотреть на Top-1000 сайтов рейтинга Alexa в зоне .ru, то в первых трех сотнях будут сайты Яндекса, Google, Mail.ru и других крупных проектов и компаний, а дальше пойдут, в основном, развлекательные, игровые ресурсы, торренты и профильные СМИ (а еще временами будут встречаться домены тизерных партнерских сетей).
У сайтов, занимающих не самые топовые позиции из первой тысячи, посещаемость бывает порядка 10 000 — 80 000 уникальных хостов в сутки, а иногда и выше. Для хакеров подобные ресурсы привлекательны тем, что, с одной стороны, сайты имеют высокую посещаемость, а с другой — низкий уровень защиты (обычно, вообще никакого), поскольку владельцы подобных сайтов часто не уделяют должного внимания вопросам безопасности (не знают, не умеют, не хотят). Например, ресурс с посещаемостью 85000 уникальных хостов в сутки может работать на Wordpress с уязвимыми версиями плагинов. Получается, что соотношение затрат на взлом к «профиту» от него для данной категории сайтов максимально, и это лакомый кусок, которым, как минимум, один злоумышленник да воспользуется. В теории все вроде бы логично, но хотелось бы в этом убедиться на практике, поэтому я решил просканировать большой массив топовых ресурсов (например, первые 50 000 сайтов Alexa в зоне .ru) на предмет взлома/заражения, редиректов и других проблем безопасности. Что из этого получилось — ниже в статье.
Чтобы сэкономить время читателей, сразу приведу результаты: примерно 2% сайтов (если быть точным, 971 сайт) оказались «больны». Среди проблем был полный набор: редиректы на загрузку зараженных apk и exe файлов, скрытые мобильные редиректы на wap-click партнерки, фишинг и даже два дефейса. Несмотря на то что процент проблемных сайтов вроде бы небольшой, опасность оказалась существенной, так как скрытые редиректы обнаружились на популярных сайтах с посещаемостью 60K хостов в сутки.
Для более эффективного обнаружения вредоносного кода я использовал несколько индикаторов заражения, поскольку зловреды не всегда возможно определить только по сигнатурам или только с помощью поведенческого анализа. Для анализа в совокупности учитывались:
- редиректы при открытии страниц с различными параметрами User Agent+Referer,
- сигнатуры вредоносных скриптов (регулярными выражениями),
- присутствие домена или фрагмента URL в базах опасных, подозрительных или вредоносных,
- наличие сайта в «черных списках» поисковых систем (safe browsing) и антивирусных сервисов (по базе virus total)
Для минимизации числа ложных срабатываний применялись «белые списки» доменов и фрагментов URL. Например, не учитывались редиректы при клике с баннеров и баннерных плагинов, редиректы на мобильные версии сайтов и т.п. При проверке каждого сайта отправлялась серия запросов к стартовой странице, производилась навигация на слинкованные страницы, на которых выполнялись некоторые действия, как если бы на сайт заходили реальные посетители с различными параметрами (браузер, реферер, платформа, и пр). После чего результат по всем страницам объединялся и формировался общий отчет. И так для каждого из 50 000 проверяемых ресурсов. Стандартный phantomjs для подобной задачи не подошел из-за ограничений на некоторые readonly объекты DOM, которые мне нужно было переопределять, поэтому пришлось их вместе с WebKit’ом хорошенько «допиливать».
Анализ большого массива сайтов выявил некоторые общие паттерны заражения и типичные способы внедрения зловредов в код скриптов и страниц (например, частое использование сервиса сокращения ссылок, наподобие goo.gl, vk.cc для сокрытия адреса скриптов, добавление кода в начало или конец jquery*.js файлов, семейство недобросовестных тизерных/рекламных партнерских сетей и т.п).
Детали покажу на паре примеров. Первым будет ресурс, находящийся на 750 позиции рейтинга ru сайтов Alexa. Это достаточно популярный торрент. У него закономерно высокая посещаемость — чуть больше 60 000 уникальных посетителей в сутки (согласно счетчику liveinternet).
Попробуем открыть сайт с мобильного: вбиваем адрес сайта в поисковой строке Google, переходим в подраздел и кликаем по кнопке загрузки в тексте страницы. Вместо загрузки .torrent файла нас начинает редиректить на сторонние сайты, и в итоге нам предлагают загрузить и установить .apk файл по имени download.apk.
Чтобы оперативно проверить файл на «вредоносы», загружаем его на Virustotal и получаем вполне ожидаемый результат — SMS.Agent (т.е. смс шпион):
Если повторить эксперимент еще несколько раз, то иногда появляется предложение скачать ускоритель загрузки, который, как вы уже, наверное, догадались, ускоряет разве что перехват ваших смс:
Чтобы вредоносный код обнаружили как можно позднее, хакер всячески старается его замаскировать: внедряет код динамически и использует многоэтапную проверку в рантайме. По этой причине поймать редирект, не зная всех нюансов, автоматизированными сканерами чрезвычайно сложно. В данном случае редирект обладал следующими свойствами:
- вредоносный инжект находился в подгружаемом скрипте scrolltop.js
- код отрабатывал у посетителя 1 раз в 4,5 месяца (ставились куки)
- код внедрялся динамически только если посетитель пришел с поисковой системы
- сам редирект срабатывал только при клике по определенным ссылкам
- загрузка .apk стартовала, если посетитель зашел с android устройства (проверялось в цепочке редиректов на вредоносный ресурс)
Ниже приведен фрагмент кода, который внедрял загрузчик:
Если не выполнится хотя бы одно из перечисленных условий, то перенаправления не произойдет. Несмотря на составное условие возникновение редиректа, сканером удалось вычислить вредонос по характерной сигнатуре и инжекту скрипта с подозрительного домена:
Можно примерно оценить «масштаб бедствия» для этого сайта. При взломе и заражении ресурса с посещаемостью порядка 50–60K в среднем приходит где-то 400–500 посетителей с мобильных устройств. На вскиду, сотня посетителей может загрузить зараженный .apk файл.
Рассмотрим еще один «топовый» пример из списка зараженных. На этот раз это фитнес-портал, занимающий примерно 450 место (то есть еще более посещаемый). Этот «пациент» перекидывал поочередно то на сервис платных подписок, то на софт, предлагающий ускорение android.
При очередном редиректе ради любопытства нажал кнопку «Продолжить просмотр» и тут случилась магия: меня автоматически подписали на платный контент, о чем незамедлительно пришло уведомление по смс. Никаких вопросов или подтверждений, что я хочу это сделать, никаких дополнительных телодвижений не потребовалось.
Проверил в списке подключенных услуг в личном кабинете МТС — действительно появилась платная подписка за 20 руб. Отписался.
Что интересно, на момент генерации страницы с кнопкой «продолжить просмотр» скрипт уже знает ваш номер телефона, поскольку смс-подписка делается с «благословения» самого мобильного оператора, который предоставляет необходимый интерфейс и информацию об абоненте.
Так что процесс подписки до нельзя автоматизирован. И если не следить за смс-уведомлениями, можно попасть на несколько десятков рублей в день просто посещая различные порталы (это без учета clickjacking«а, где вы сами того не ведая кликните в нужное место и одобрите подписку или загрузку вредоноса).
Механика внедрения на этом сайте проще: в один из javascript файлов хакер добавил следующий фрагмент:
Этот код загружал скрипт с домена yadro24.ru, а тот, в свою очередь, перенаправлял пользователей на wap-click портал при условии, что посетитель был подключен через 3G/LTE интернет (по javascript-коду видно, какие возможны редиректы).
Если же мобильный посетитель сайта пришел через WI-FI, никаких редиректов на wap-click партнерки не происходило. Это, кстати, большая проблема для определения wap-click редиректов онлайн-сервисами, поскольку все запросы требуется отправлять через 3G/LTE определенных сотовых операторов.
Аналогичные варианты заражения были обнаружены и на других сайтах из топа Alexa. Иногда внедряют код в начало скриптов, иногда в конец.
Рассмотренные примеры — это явный целевой взлом сайтов и внедрение кода хакерами. Но среди проверенных сайтов часто встречался и другой вариант: добровольное размещение виджета со скрытыми редиректами или тизерной партнерской сети, которая выполняет перенаправление мобильных пользователей на опасные сайты или wap-click партнерки. При этом владельцы сайтов или не в курсе того, что происходит, или, в погоне за высоким заработком, закрывают на это глаза.
Сводная статистика по различным категориям заражения получилась такой:
Любопытный факт: большинство ресурсов, которые попали в список «проблемных» (те, которые выполняют загрузку вредоносных файлов или перенаправляют посетителей на опасные сайты и wap-click партнерки) не отмечены в Yandex/Google Safe Browsing как «malware» или даже «unwanted». То ли поисковики не успевают их проверять, то ли не обнаруживает, хотя последнее вряд ли. Правда, некоторые сайты все же удалены из результатов поисковой выдачи мобильного поиска.
Ну, а напоследок хотел бы посоветовать две вещи:
- Если вы посетитель подобных популярных ресурсов — не стоит надеяться, что все они безопасны. Даже если у вас установлен антивирус, он не спасет от таких проблем, как wap-click редиректы на смс-подписки, потому что это не вирус (вас просто незаметно подписывают на платную услугу и снимают ежедневно по 20 руб) Да и, откровенно говоря, от drive-by атак антивирусы защищают далеко не в 100% случаев, особенно на Android«е. Поэтому хорошая практика — самостоятельно проверять подобные сайты специализированными сервисами, если возникает какое-то подозрение.
- Если вы владелец подобных ресурсов и еще не задумывались о безопасности сайта, или вам кажется, что вас не взломают — самое время провести полную диагностику сайта: просканировать файлы на хостинге на предмет хакерских веб-шеллов, бэкдоров (для этого есть утилиты AI-BOLIT, ClamAv, Maldet), возможно даже сделать пентест проекта, а также проверить доступными сервисами проблемы безопасности (например, с помощью rescan.pro, quttera.com, sitecheck.sucuri.net). А еще, не поленитесь перейти из результатов поисковой выдачи на свой сайт с мобильного устройства через 3G/LTE подключение, прокликайте выборочно ссылки сайта, загляните в код, проверьте, нет ли каких аномалий.
Стоит отметить, что некоторые ресурсы к моменту написания статьи уже справились с заражением и в настоящий момент не несут угрозы, но остается достаточно большая часть посещаемых сайтов, у которых даже спустя 10 дней ситуация не изменилась: