Популярные расширения скрытно запускали рекламу, накручивали просмотры онлайн-кинотеатрам и могли получить доступ к соцсетям.
6597 просмотров
«Яндекс» отключил для пользователей «Яндекс.Браузера» расширения Savefrom.net, Frigate и несколько других. Совокупная аудитория проектов превышает восемь миллионов пользователей, но они тайно воспроизводили видео и могли перехватывать авторизацию в соцсетях. Сотрудники «Яндекса» провели расследование и рассказали о нём в блоге на «Хабре».
Как компания узнала о проблеме
На расширения обратили внимание после жалоб пользователей — они начали сообщать о странных звуках, похожих на рекламу, но при этом не видели самих видео. Разработчики «Яндекса» решили, что видео проигрывается в другой вкладке или за пределами видимости экрана, но эта гипотеза не подтвердилась, поэтому у пользователей начали выяснять подробности.
Оказалось, что всех пострадавших объединяло одно и то же — установленное расширение от сервиса SaveFrom.net, который позволяет скачивать ролики или музыку из соцсетей «в один клик». При отключении расширения пропадал и шум, поэтому в «Яндексе» связались с разработчиками инструмента. Те предположили, что дело в «ошибках конвертера», внесли исправления, и жалобы прекратились.
В ноябре 2020 года «Яндекс» получил сигнал, что кто-то использует аудиторию популярных браузеров для накрутки просмотров видео в онлайн-кинотеатрах. При этом пользователи не видели самих роликов, потому что они проигрывались в фоне, но видео потребляли трафик и занимали ресурсы компьютеров.
Так специалисты получили прямой доступ к устройствам с вредоносными расширениями и смогли детально разобраться в происходящем. На всех ноутбуках было установлено одно из трёх расширений — SaveFrom.net, Frigate Light или Frigate CDN. В «Яндексе» изучили код каждого инструмента и выяснили, как именно они могут скрытно запускать видео и перехватывать сессии пользователей из соцсетей.
Как были устроены расширения
Все расширения из семейства Frigate содержали один и тот же код для динамической подгрузки и исполнения JS-скриптов. При этом сама функциональность была спрятана в коде под видом безобидных строчек — это запрещено в Chrome Web Store, через который в том числе можно скачать Frigate.
Расширения совершали запрос к адресу fri-gate.org/config.txt, откуда получали адрес командного сервера для дальнейшей работы — это позволяет менять адрес сервера без обновления самого расширения. На момент анализа сервер базировался на домене gatpsstat.com.
При этом каждый час расширения Frigate делают запрос к командному серверу в обработчик /ext/stat. При первом запросе они получают cookie с идентификатором пользователя, ответ декодируется и попадает в функцию debug(), которая является завуалированной функцией eval() для исполнения произвольного JS-кода.
Savefrom.net устроен по такому же принципу, но получает адрес командного сервера с сайта sf-helper.com/static/ffmpegsignature — соответствующий блок начинается на 19122-й строке файла background.js. В приложении есть строка «x = m(99, 111, 110, 115, 116, 114, 117, 99, 116, 111, 114)”», полностью совпадающая с Frigate, а за загрузку и выполнение JS-кода отвечает длинный switch(). Как выяснили в «Яндексе», на момент изучения оба расширения получали один и тот же адрес — gatpsstat.com.
Чем ещё оказались опасны расширения
Когда разработчики узнали, что все расширения могли выполнять произвольный код, они заподозрили, что скрытая реклама может быть одним из самых безобидных «симптомов». Чтобы поймать и задокументировать другие вредоносные проявления, в «Яндексе» попытались собрать трафик через инструменты браузера, но ничего не нашли.
Тогда специалисты обратились к медленному, но надёжному варианту — весь трафик изучили через Burp Suite — платформу для анализа безопасности веб-приложений. Детальный анализ трафика принёс плоды: выяснилось, что до этого сотрудники ничего не замечали из-за особого списка ограничений — он содержал адреса, после которых расширения прекращали вредоносную деятельность.
В «стоп-листе» помимо прочего были адреса поддержки «Яндекс.Браузера» и служебная страница для анализа трафика. Таким образом даже технически подкованные пользователи не смогли бы сходу догадаться, в чём дело.
В «Яндексе» решили изучить обработчик ext/up, которому передавались данные. Но его ответ оказался сжат и зашифрован под видом gif-картинки, а код обфусцирован, поэтому сотрудникам компании пришлось заняться реверс-инжинирингом.
Самая скрытая часть кода расширений исполнялась в трёх случаях — на фоновой странице расширения, для инъекций в просматриваемые страницы и для передачи кода другому обработчику в /ext/stat. При этом код для страниц bg.js и page.js позволяет внедрять iframe с видео, а в bg.js есть функциональность для перехвата oAuth-токенов во «ВКонтакте». Как отметили в «Яндексе», нельзя однозначно утверждать, что его применяли, но возможность присутствует в коде.
В bg.js также обнаружили код для подмены браузерного API, чтобы просмотры засчитывались даже при скрытом видео. А два других обработчика — /ext/def/ и /ext/beacon/ — отвечают за отдачу задач по открутке видео и запись отчётов о заданиях соответственно.
Что предприняли в «Яндексе»
«Яндекс» отключил Savefrom.net, Frigate Light, Frigate CDN в своём «Браузере» для всех пользователей. При этом пока их всё же можно включить вновь вручную и установить через официальные сайты, либо на сторонних площадках вроде Chrome Web Store.
«Яндекс» также передал результаты технического анализа в «Лабораторию Касперского» и Google. В «Лаборатории Касперского» подтвердили наличие потенциально вредоносного кода и начали распознавать расширения как угрозу, а также блокировать связанные с ними URL-адреса и фрагменты скриптов.
Во время исследования компания также обнаружили более двух десятков менее популярных расширений, которые использовали аналогичный код. Их тоже решили отключить, а экспертов и пользователей призвали присоединиться к поиску других потенциально опасных расширений. Для этого компания попросила присылать результаты наблюдений через специальную форму.