Эволюция вредоносных расширений и технологий защиты. Опыт Яндекс.Браузера
Расширения — это отличный инструмент для добавления новых возможностей в браузер. А еще с их помощью тайно встраивают рекламу, воруют данные, рассылают спам и даже майнят криптовалюты. Сегодня мы поделимся с вами нашим опытом борьбы с подобными расширениями, вы узнаете об основных каналах распространения сомнительных разработок и о способах маскировки вредоносной сущности от модераторов и сканеров.
Яндекс.Браузер изначально поддерживал установку расширений для Chromium, но в первое время индустрия заработка на дополнениях еще только зарождалась, поэтому особых проблем не было. Вредоносные образцы, конечно же, встречались: мы либо сами находили их вручную, либо узнавали о них из обращений в поддержку. Уникальные идентификаторы (ID) таких разработок вносились в черный список на сервере, к которому через API обращался Яндекс.Браузер и блокировал установку потенциально опасных расширений. Причем сами расширения очень редко маскировались: все их возможности почти всегда были явно описаны на HTML и JS без попыток что-либо скрыть. Но потом все изменилось.
Быстрый рост популярности Chromium и возможность автоматически устанавливать любые расширения без подтверждения со стороны пользователя сыграли злую шутку. Разработчикам опасных дополнений не было нужды даже публиковаться в Web Store и продвигать там свое творение. Достаточно было замаскировать расширение под полезную утилиту, популярную игру или новый фильм, который еще даже до кинотеатра не добрался. Пользователи сами находили, загружали и запускали exe-файлы, которые и подбрасывали crx-расширения в профиль браузера. Как мы об этом узнали? Очень просто: примерно треть обращений в поддержку начала содержать жалобы на низкокачественную и шокирующую рекламу, которая всплывала поверх любимых сайтов в Браузере.
Примерно так у некоторых пользователей начинал выглядеть YouTube. Это свежий скриншот, но за несколько лет симптомы изменились мало. Посчитайте, сколько здесь чужеродных рекламных блоков:
Большинство пострадавших пользователей ничего не знали ни о каких расширениях, обвиняли нас и удаляли Яндекс.Браузер. Спокойное время закончилось.
От черного списка до хэширования
Достаточно быстро мы нашли возможность затормозить рост угрозы. Прежде всего, отключили у себя поддержку тех задокументированных механизмов Chromium, которые упрощали работу для разработчиков плохих расширений. Мы ограничили в обычной версии Браузера возможность устанавливать расширения через ключ реестра и запретили использовать корпоративную политику, которая, к слову, была особенно популярна у разработчиков малвари, потому что не позволяла пользователям удалять расширения.
Мы также создали «штаб» для борьбы с новой угрозой, который в режиме реального времени получал информацию о распространяющихся среди пользователей Браузера расширениях, мог оперативно проверять подозрительные и блокировать их по ID. И на какое-то время это решило проблему.
Любители легких денег, лишившиеся удобных способов установки и преимущества во времени, напряглись и нанесли ответный удар. В операционной системе Windows любое приложение может вмешиваться в работу любого другого приложения, что и начали использовать против Яндекс.Браузера. Сомнительные программы научились подбрасывать расширения прямо в папку профиля браузера, внося изменения в файлы настроек. Но и это не самое интересное.
Хитрецы понимали, что мы узнаем о таких расширениях очень быстро, поэтому нашли простой, но эффективный способ не допустить блокировки по ID. Они просто начали использовать те же ID, что и популярные расширения. Например, мы не могли отключить плохое расширение с идентификаторов pioclpoplcdbaefihamjohnefbikjilc, потому что тогда перестал бы работать хороший Evernote Web Clipper. Хитро. В итоге этот удар мы отбили, но какой ценой.
Решение было найдено в сравнении хэша установленного расширения с хэшем расширения-оригинала из Стора. Если они не совпадают, то перезаписываем папку безопасной копией. Проблема в том, что способ работал только для тех дополнений, которые были опубликованы в Сторе. Всех остальных просто не с чем сравнивать. Поэтому в 2014 году мы разрешили устанавливать расширения только из доверенных источников, к которым относились Web Store, Opera Addons и наш собственный каталог. Этим решением нам удалось загнать большинство вредоносных расширений в Стор, где, как мы надеялись, суровые правила и модерация доведут их число до исторического минимума. Но мы ошибались.
5 долларов. Именно столько стоит завести аккаунт разработчика в каталоге Web Store. Но профессионалы по ту сторону баррикад готовы тратить деньги на генерацию аккаунтов и клонов сомнительных расширений. А дальше им остается лишь найти источник пользователей. И таких способов несколько.
Мимикрия
Можно скопировать название, оформление и даже код у популярного расширения, чтобы попасть в результаты поиска в Web Store. К сожалению, этот способ процветает из-за отсутствия премодерации в каталоге. К примеру, совсем недавно был случай с поддельным AdBlock Plus, которое установило 37 тыс. пользователей. К моменту появления этой публикации в Твиттере оно уже было заблокировано в нашем Браузере. И не только оно. СМИ написали про один случай, но в реальности было около 10 копий фальшивого блокировщика рекламы. Вели они себя относительно скромно: предположительно ничего не воровали, но неожиданно открывали вкладки с рекламой. Например, вкладку с адресом settingsbrowser.online, который перенаправляет на рекламируемые сервисы и приложения.
Распространение с помощью сторонних программ
Берете популярную утилиту и переупаковываете ее так, чтобы установщик не только саму утилиту ставил, но и подбрасывал в папку профиля ваше расширение. Потом создаете фальшивый официальный сайт, на который попадают пользователи через спам. Хотя теперь уже мало кто так заморачивается. Куда проще воспользоваться одной из партнерских программ, к которой подключаются разработчики бесплатных приложений для монетизации. Обычно такой способ легко распознается по скорости распространения дополнения среди пользователей браузера.
Есть еще один способ понять, что мы отключили бесполезное расширение с вредоносными возможностями — ни пользователи, ни разработчики почти не приходят к нам с жалобами. Некоторые, правда, пытаются хитрить и добавляют в код исключение для Яндекс.Браузера. Работает это так. Если у пользователя Яндекс.Браузер, то никаких плохих сюрпризов он не получает, в отличие от пользователей Google Chrome. Казалось бы, это проблема других браузеров на базе Chromium, но нет. Мы такое поведение считаем обманом и блокировку не снимаем.
Inline-установка
У любого сайта есть возможность распространять свое официальное расширение, опубликованное в Chrome Web Store. Достаточно кликнуть по кнопке во всплывающей панели, и дополнение окажется в браузере. Остается лишь уговорить человека кликнуть. К примеру, сайт может перейти в полноэкранный режим и имитировать блокировку браузера, снять которую можно только с помощью расширения (живой пример).
Или рассмотрим другой реальный пример, о котором коллеги рассказывали ещё в прошлом году на Botconf 2016, но эпидемия продолжается и по сей день (это десятки заблокированных нами клонов).
Пользователь Facebook получает личное сообщение от своего знакомого, в котором содержится ссылка на видео.
После клика по ссылке открывается страница (пример, другой пример), созданная на базе авторитетного бесплатного сервиса для хранения файлов, где вместо видео обычный скриншот.
Это прослойка между спамом в Facebook и теми сайтами, где «предлагаются» расширения или размещена иная реклама. Она нужна по следующим причинам. Во-первых, социальные сети и антивирусы не блокируют по маске все адреса на авторитетных доменах. Во-вторых, генерировать страницы на бесплатных сервисах проще и быстрее, чем регистрировать новый сайт и привязывать его к расширению. В-третьих, такие ссылки выглядят безопасно, и пользователи охотнее по ним кликают.
Пользователь кликает на фейковый скриншот и попадает на сайт, который имитирует внешний вид YouTube и создан на базе сервиса для блогов. При любой попытке запустить видео появится предложение установить расширение.
Важное уточнение: прямо сейчас страница на docs.google.com может перенаправлять не на указанный сайт, а на другую рекламу, потому что расширение только что заблокировали в каталоге, и автору нужно потратить время на создание новой связки сайт-расширение. Мы уже отключили у себя более 50 расширений из этого семейства, но они продолжают появляться.
Если человек соглашается, то теперь уже он против своей воли станет источником спама в фейсбуке.
Причем расширения из этого семейства умеют защищать себя. Обратите внимание на отзыв:
В нем идет речь о том, что расширение не дает открыть в Chromium служебную страницу chrome://extensions (моментально закрывает ее). С помощью этой страницы обычно рекомендуют проверить список расширений и удалить подозрительные. В свое время мы тоже столкнулись с такой хитростью, поэтому в Яндекс.Браузере страница browser://tune изолирована от расширений.
Партнерские программы
Можно не возиться с созданием своих расширений, страниц и спамом, а просто купить готовое популярное расширение и раскатить новую версию с сюрпризом (пользователи не узнают ни о продаже, ни о выходе новой версии). Или даже создать партнерскую программу для разработчиков, которые в обмен на деньги сами добавят в свои расширения ваш скрипт. В среднем по больнице партнеры зарабатывают по 100 рублей в сутки за каждые 1500 пользователей. Найти партнерские программы не трудно. Кстати, очень приятно читать на форумах таких программ подобные комментарии. Не зря работаем ;)
Владельцы партнерской программы готовы не просто дать свою библиотеку, но и создать готовое расширение. От партнера будет требоваться лишь опубликовать и найти трафик.
Как вы понимаете, любое вложение средств хочется отбить, поэтому разработчики сомнительных скриптов работают не только над количеством, но и над «качеством», где под последним мы подразумеваем способность спрятать свою сущность от модераторов и автоматических сканеров. Чем сложнее найти доказательство, тем дольше расширение проработает и тем больше принесет денег. И в этой области за несколько лет произошел значительный скачок.
От конкатенации до стеганографии
Все началось с примитивной конкатенации, когда заведомо опасный код разбивался на отдельные буквенные фрагменты. Примерно так, как на скриншоте. Наивно, но первым изобретателям, возможно, помогало.
Отдельно стоит сказать про обфускацию. Есть миф, что обфускация позволяет замаскировать любую логику, но работает это ровно наоборот. В реальности это самый бездарный способ маскировки, потому что он привлекает к себе внимание примерно всех: антивирусы на него ругаются, пользователи пугаются, модераторы проверяют такие расширения в первую очередь. Хотите, чтобы вас как можно быстрее выкинули из Стора? Используйте обфускацию кода.
Куда умнее поступают те, кто сохраняет видимость приличного кода, но разносят его вредоносные части по разным модуля, запутывают следы, общаются сами с собой с помощью localStorage. Некоторые части могут даже подгружаться с внешнего сервера. Причем не для всех стран (привлечь внимание модераторов где-нибудь в США проще, чем в России), не для всех браузеров (опять же исключения для Яндекс.Браузера, как и в примере выше), не в первые дни работы расширения (чтобы затруднить ручную проверку).
В апреле этого года среди разработчиков сомнительных расширений начала зарождаться новая мода. Взгляните на эту картинку:
Заметили что-нибудь необычное кроме артефактов от сжатия? А теперь давайте посмотрим через отладчик на работу расширения, которое содержит эту картинку:
Расширение извлекает часть кода из картинки. Этот прием называется «стеганографией», и он хорошо известен по вирусам для Windows, но до расширений добрался только весной. Сейчас этот метод комбинируют вместе со всеми вышеописанными, и встречается он в десятках расширений (71 тыс. пользователей, 11 тыс. пользователей). По нашей оценке, во всех этих расширениях используется скрипт от одного автора, а точнее, от одной партнерской программы, за которой мы теперь пристально наблюдаем. Мы эти расширения, конечно же, ловим и отключаем, потому что не полагаемся лишь на свои глаза и руки.
Машинное обучение
Нам удалось наладить полуавтоматический процесс выявления сомнительных расширений и их отключения. Работает это примерно следующим образом. Как только появляется любое новое расширение, и его начинают устанавливать в Яндекс.Браузер, запускается процесс анализа на наших серверах. Мы используем машины, которые постоянно обучаются на уже известных плохих образцах, чтобы оценивать степень опасности новых. Явные злоупотребления блокируются автоматически. Сомнительные случаи проходят через ручной контроль.
Мы научились ловить не только те разработки, которые воруют пароли, перенаправляют на фишинг-страницы или тайно изменяют/добавляют на страницы свою рекламу. Мы также не пропускаем расширения, скрытно подменяющие ссылки на страницах (в том числе для заработка на партнерских программах) и неожиданно открывающие вкладки с рекламируемыми сайтами. Не одобряем добычу криптовалют, если пользователь не дал своего явного согласия. Запрещаем имитировать клики и другие действия пользователей (к примеру, для накрутки лайков или рассылки спама в социальных сетях).
По понятным причинам мы не можем раскрывать детали работы наших сканеров и факторы, используемые в машинном обучении (передаем привет талантливым разработчикам сомнительных скриптов). Скажем лишь, что благодаря этому процессу большинство вредоносных дополнений отключается в Яндекс.Браузере за 1–3 дня после начала своей жизни. Это более сотни уникальных расширений в месяц и десятки тысяч защищенных пользователей.
Что дальше?
Как бы удивительно это ни прозвучало, но именно в рунете начинают внедрять новые способы обмана пользователей и браузеров, которые затем «экспортируются» дальше. Сейчас нам противостоят уже не любители, а целая индустрия создателей и распространителей опасных расширений, которые рано или поздно найдут очередной способ нас удивить. Мы верим, что найдем чем им ответить, но идеальной защиты не бывает, поэтому всегда будут существовать вредоносные расширения, которые у нас еще не отключены. И здесь нам пригодится помощь всего сообщества. Если вы столкнетесь с подобными разработками, то можете смело присылать информацию нашей команде (как через поддержку, так и в личку на Хабре). Мы также будем благодарны за любые идеи и информацию, которые помогут защитить пользователей от неприятных сюрпризов.