Безопасны ли расширения для браузера
Многие полагают, что если расширение или приложение опубликовано в App Store, Google Play, Microsoft Store или каталоге дополнений Mozilla, то оно проверено и безопасно. К сожалению, это не так.
Механизм добавления их в Chrome Web Store автоматизирован. Так что в магазин постоянно просачиваются вредоносные расширения. Давайте разберёмся, как избежать их установки.
Почему расширения Chrome могут быть опасными
В Chrome Web Store огромное количество расширений. Многие из них попросту бесполезны или дублируют функции друг друга. А некоторые — откровенно вредны. Согласно отчёту Over 20,000,000 of Chrome Users are Victims of Fake Ad Blockers , опубликованному AdGuard, больше 20 миллионов пользователей Chrome устанавливают фальшивые блокировщики рекламы. А расширения, используемые для скрытого майнинга, за последние два месяца подцепили Malicious Chrome extensions infect 100,000-plus users, again 100 тысяч.
Для чего могут использоваться фальшивые расширения? Они умеют похищать ваши конфиденциальные данные, пароли и номера банковских карт. А также способны майнить криптовалюты в вашем браузере или объединять заражённые компьютеры в ботнеты.
Попробуйте набрать AdBlock в поиске Chrome Web Store и посмотрите, сколько расширений найдётся. А теперь угадайте, какое из них полезное, а какое — нет.
Что нужно проверить перед установкой расширения
Популярность расширения
Чем расширение популярнее, тем лучше. Если у одного расширения больше 10 миллионов пользователей, а у его аналога не наберётся и 10 тысяч — выбор очевиден. Фраза про миллионы мух здесь не подходит.
За популярными расширениями чаще стоят крупные компании или сообщества разработчиков, которые дорожат своими пользователями. Им стоит доверять больше, чем разработчикам-одиночкам.
Недобросовестные исполнители могут завоёвывать доверие пользователей, выбирая названия, сходные с обозначениями добропорядочных расширений. Так что внимательно следите, чтобы наименование было написано правильно.
Описание расширения
Прежде чем устанавливать новое расширение, прочтите описание. Изучите его целиком. Если оно написано с орфографическими ошибками, то, скорее всего, это либо студенческая поделка, либо вредоносное расширение.
Конечно, грамотно составленное описание не гарантирует безопасность. Но это важный пункт, на который вы должны обратить внимание.
Сайт разработчика
В Chrome Web Store имя разработчика находится, как правило, сразу под названием расширения. Щёлкните на него и посмотрите на сайт создателя. Если он отсутствует, или, что называется, свёрстан «на коленке», это плохой знак.
Стоит тщательно изучить раздел About us или «О нас» на сайте разработчика, если он имеется. Так вы, по крайней мере, составите мнение об авторах расширения.
Отзывы в Chrome Web Store
Теперь прочтите отзывы к расширению, которые оставляют пользователи Chrome Web Store. Мало отзывов — плохо. Обилие негативных отзывов — плохо. Множество однотипных отзывов в духе «Лучший!», «Всем качать!» — тоже не очень хорошо. Это может быть результатом накрутки.
Информация о расширении в интернете
Перед установкой стоит погуглить названия расширений: самые полезные и популярные из них часто мелькают в новостях и обзорах. Лайфхакер, например, регулярно публикует подборки лучших расширений для Chrome. Этим же занимаются многие другие крупные сайты.
Права доступа
В Chrome существует система прав доступа. В ней показывается, какие действия в вашем браузере собирается выполнять то или иное расширение. Примерно такая же система действует в Android при установке новых приложений.
Исходный код
Да, это вариант далеко не для всех. Однако тем, кто разбирается в создании расширений для Chrome, стоит посмотреть на исходный код устанавливаемого аддона (если он открыт). Именно расширения с открытым исходным кодом всегда заслуживают больше доверия.
Проверяйте свои расширения регулярно
Откройте свой список расширений и проверьте его прямо сейчас. Нередки случаи, когда разработчики популярных расширений продают их менее добросовестным владельцам. Несколько лет назад это произошло с расширением Add to Feedly, которое после смены владельца начало показывать рекламу.
Вы пользуетесь каким-то расширением уже несколько лет и даже забыли, что оно у вас есть? Проверьте его. Прочтите отзывы, загуглите название. Может быть, оно стало бесполезным или вредным?
И помните: чем меньше расширений, тем лучше и для вашей конфиденциальности, и для производительности браузера. Устанавливайте только те, без которых не сможете обойтись.
Когда-то для того, чтобы переписываться с друзьями, слушать музыку или смотреть кино, требовались отдельные программы. Сейчас большинство задач можно решить в браузере. Чем больше данных люди передают через браузер, тем больший интерес он представляет для злоумышленников. Вмешаться в работу браузера можно разными способами. Один из них — вредоносные браузерные расширения.
Что такое расширения
Расширения — это программы-модули, которые подключаются к браузеру и расширяют (отсюда и название) его возможности. С их помощью каждый может добавить в браузер те функции, которые нужны именно ему: например, блокировку неприятной рекламы, автоматический перевод текста на веб-страницах, ночной режим просмотра сайтов или экранную клавиатуру с эмодзи.
В чём опасность
Расширения привлекают злоумышленников по нескольким причинам. Во-первых, у них широкие полномочия. Расширения имеют доступ к данным, которыми обмениваются пользователь и сайт, могут влиять на отображение страниц и менять интерфейс браузера: добавлять новые кнопки, панели или закладки. Во-вторых, расширения живут внутри браузера: их установка никак не сказывается на операционной системе компьютера. Поэтому если с расширением что-то не так, вовсе не факт, что на это отреагирует обычная система антивирусной защиты.
Расширения, созданные злоумышленниками, проявляют себя по-разному. Иногда их действия просто неприятны, а иногда представляют непосредственную угрозу для пользователя. Самое распространённое поведение — это:
Подмена контента. Расширение изменяет содержимое веб-страницы. Злоумышленники могут заменить баннеры на популярных ресурсах или добавить на сайт дополнительные рекламные блоки — на этом можно неплохо заработать.
Вторжение в интерфейс браузера. Расширение изменяет главную страницу или добавляет в закладки сайты, на которых человек никогда не был. Таким способом недобросовестные разработчики накручивают посещаемость своих ресурсов.
Слежка. Расширение собирает данные о действиях человека: например, на какие страницы он заходит. Эту информацию можно использовать для показа рекламы. Некоторые расширения перехватывают данные из форм на веб-страницах.
Активность в соцсетях. Расширение публикует посты от имени пользователя или ставит лайки под сомнительными публикациями. Зачастую жертва не замечает этого, пока ей не сообщают внимательные друзья. Не очень внимательные переходят по ссылкам в постах и тоже становятся распространителями спама.
Расширения могут выполнять сразу несколько нежелательных действий сразу. Некоторые умеют менять поведение, подчиняясь командам, которые отдают злоумышленники. Например, сегодня такое расширение может накручивать клики по рекламным объявлениям мошенников, а завтра — собирать данные о пользователях.
Распространение
Полезные расширения распространяются через магазины. Так называют каталоги, где собраны расширения от разных разработчиков. Как правило, каталогом управляет компания, выпустившая браузер. У магазинов есть системы проверки, которые блокируют нежелательные и вредоносные расширения. Поэтому мошенники продвигают свои программы окольными путями — например:
В комплекте с другими программами. Чаще всего нежелательные и вредоносные расширения люди получают вместе с каким-нибудь полезным файлом. Человек скачивает бесплатный фоторедактор, фильм, музыку или торрент и не замечает предупреждения, что вдобавок загрузится что-то ещё. В случае с программами такие «бонусы» даже могут упоминаться в лицензионном соглашении, но многие принимают условия не глядя.
Иногда в комплекте с загружаемым файлом идёт программа-установщик. Она протаскивает в браузер целый набор нежелательных расширений. Избавиться от них трудно — после удаления и перезагрузки компьютера они появляются снова.
В нагрузку к полезному контенту мошенники дают не только расширения и установщики, но и другой нежелательный и даже опасный софт: трояны, приложения для накрутки кликов, программы для доставки рекламы.
Яндекс.Браузер умеет предупреждать пользователей о сайтах, распространяющих нежелательные программы. Предупреждение показывается заранее — до того, как компьютеру может быть нанесён вред. В 2016 году Браузер выдал 137 млн предупреждений, которые увидели более 15 млн человек.
Обманом — нежелательная программа выдаётся за полезную. В таких случаях мошенники утверждают, что их софт предоставляет пользователю ту или иную нужную возможность. Здесь возможны варианты: либо в дополнение к полезной функции программа обладает одной или несколькими неполезными, либо расширение даже не пытается делать то, что было обещано в описании.
Подобные программы часто распространяют через соцсети. Например, человек натыкается в Facebook на ролик с ярким описанием, но при попытке запустить видео ему говорят, что для просмотра нужен специальный видеоплеер.
Шантажом — пользователя вынуждают поставить расширение. Человек попадает на мошеннический сайт и не может его покинуть. При попытке закрыть вкладку ему сообщают, что это можно сделать только после установки дополнительной программы. Понятно, что от неё не стоит ждать ничего хорошего.
Даже если загружать расширения только из официального магазина, полная безопасность не гарантируется. Чтобы обмануть систему защиты, злоумышленники придумали множество уловок. Например, они создают расширение, которое выглядит невинно и успешно проходит проверку, но после установки догружает со сторонних сайтов дополнительный код. После этого его поведение меняется не в лучшую сторону — скажем, оно начинает встраивать в сайты дополнительную рекламу. Иногда мошенники покупают «хорошие» расширения, написанные энтузиастами, и постепенно превращают их в нежелательные или опасные.
Как защитить себя
Расширения — часть экосистемы браузера. Многие из них сильно упрощают жизнь, поэтому отказываться от расширений только из-за риска встретить злоумышленников не стоит. Чтобы обезопасить пользователей от нежелательных программ, в Яндекс.Браузере предусмотрено несколько механизмов защиты. Все они — часть комплексной системы Protect, встроенной в Браузер.
Во-первых, автоматическая система Яндекса регулярно обходит сайты и проверяет их на наличие нежелательных программ. Если сайт распространяет «плохое» расширение, он попадает в чёрный список. При попытке перейти по адресу из списка Браузер блокирует загрузку сайта и сообщает пользователю о возможных рисках.
Во-вторых, Браузер проверяет все файлы, которые загружает пользователь. Проверка выполняется в момент, когда файл загружен, но ещё не начал исполняться. Браузер изучает файл и его происхождение и выявляет характерные для него свойства — у каждого файла их более двухсот. Эти свойства анализирует система безопасности, основанная на машинном обучении. Она делает вывод о том, опасен файл или нет. Если есть угроза, файл блокируется. Каждый месяц через систему проходят более пяти миллионов уникальных файлов.
Иногда злоумышленники могут подменить установленное из магазина добропорядочное расширение на вредоносное. Такое обычно происходит с расширениями, которые пользователь запускает очень редко. Яндекс.Браузер регулярно сравнивает все установленные расширения с «оригиналами» из магазина. Если найдено несоответствие, программу заменяют на официальный вариант из магазина. Если расширения больше нет в магазине, оно блокируется.
Браузерные расширения в последнее время, к сожалению, всё чаще используются не для того, чтобы приносить пользу, а как инструмент мошенников. Сегодня мы хотим поделиться с вами нашим опытом борьбы с вредоносными разработками, рассказать о мерах и технологиях, которые защищают пользователей Яндекс.Браузера.
Весной 2014 года поддержка Яндекс.Браузера обратила внимание на стремительно растущее число обращений от пользователей, в которых говорилось о «заражении браузера вирусом» и агрессивной рекламе, всплывающей на посещаемых сайтах. Наиболее распространенным симптомом была подмена или добавление новых рекламных блоков на популярных в Рунете сайтах (ВКонтакте, Яндекс, . ). При этом разработчики вредоносных расширений не утруждали себя заботой о пользователях и не брезговали откровенно мошеннической или шок-рекламой. Встречались и другие проявления. Например, автоматическое открытие вкладки с определенным сайтом, подмена поиска по умолчанию или даже воровство данных.
Самое простое и самое быстрое, что мы могли сделать в этой ситуации, — это внедрить черный список расширений. Здесь нам помогли коллеги, отвечающие за безопасность в Яндекс.Поиске и имеющие солидный опыт в борьбе с вредоносными сайтами. Именно их данные лежат в основе технологии Safe Browsing, используемой в Яндекс.Браузере. В результате совместного труда Яндекс.Браузер 14.5 научился блокировать работу расширений, чей ID занесен в список вредоносных дополнений. Сам список регулярно пополнялся, после чего новая версия за считанные часы распространялась среди пользователей через Safe Browsing API.
Это был наш первый серьезный удар по мошенническим расширениям, которые ранее не встречали какого-либо особого сопротивления со стороны браузера. Этот шаг привел к тому, что за считанные недели число жалоб сократилось в 10 раз. К сожалению, эффект длился недолго. Радость от быстрой победы сменилась пониманием, что это лишь начало настоящей борьбы за безопасность пользователей.
Безопасность или свобода?
Весной прошлого года мы научились оперативно выявлять и блокировать широко распространенные вредоносные расширения через черный список. Вот только создатели подобных разработок не растерялись и перешли к новой тактике. Узнали мы об этом из все тех же жалоб. Пользователи периодически присылают нам плохие расширения для анализа. Благодаря такой помощи мы и пополняем наш черный список. Но в какой-то момент к нам стали поступать очень странные образцы. Например, нам прислали расширение под названием NxAxR, ID которого был равен «pioclpoplcdbaefihamjohnefbikjilc». Если вы сейчас поищете этот ID в поиске, то узнаете, что принадлежит он вполне безопасному расширению Evernote Web Clipper, которое опубликовано в Chrome Web Store и уж точно никаких гадостей творить не могло (но мы, кстати, все равно проверили). Причем со временем аудитория подобных подделок стала даже больше, чем у оригинальных расширений. Но мы не могли забанить тот же NxAxR по ID, ведь после подобного шага Evernote был бы забанен тоже.
Почти сразу была отброшена идея взлома аккаунтов Chrome Web Store, которая теоретически могла бы объяснить обновление расширения для хранения заметок до вредоносного рекламного поделия. Аккаунт никто не взламывал, а в каталоге по-прежнему распространялась правильная версия расширения. К счастью, думать пришлось недолго, потому что наши разработчики и сами догадались о механизме, который используют мошенники.
Вредоносная программа, запущенная на компьютере пользователя, устанавливало свое расширение в браузер не через штатные для этого инструменты, а прямым редактированием профиля. При этом подделка маскировалась на уровне ID под известное расширение, которое опубликовано в Web Store. Даже «update_url» (адрес сервера, где браузер должен проверять наличие новых версий) был указан корректно. А чтобы вредоносные функции расширения не пропали после первого же обновления оригинала, злоумышленники выставляли заведомо большую версию. Браузер сравнивал версии в манифесте расширения и на сервере. Если на компьютере новее, то обновление не происходило.
Кстати, со временем создатели опасных расширений поняли, что названия вида «NxAxR» привлекают ненужное внимание пользователя, поэтому стали называться, например, «Переводчик для Chrome». Такое и удалить страшно: вдруг переводчик действительно перестанет работать.
Перед нашей командой стояла большая и интересная задача. Нужно было разработать технологию, которая умела бы выявлять подделки и защищала людей от них. Хотелось бы мне в этом месте рассказать вам про фантастические идеи, которые мы перебрали, но все было куда проще (и быстрее, что особенно важно). Чтобы распознать подделку нам нужно было сравнить ее с эталоном, т.е. с заведомо оригинальной копией, которую пользователь устанавливает из официального каталога. Проблема заключалась в том, что многие расширения распространялись альтернативными способами и никак не были связаны с каталогом. В этом случае никакого эталона просто нет. И вредоносные разработки особенно злоупотребляли подобным. В этой ситуации обеспечить защиту от подделок мы могли лишь предварительно ограничив установку расширений проверенными источниками.
Как вы уже догадались (или даже помните август прошлого года) мы ввели ограничение на установку расширений из сторонних источников. Тем не менее наша команда стремилась к тому, чтобы не только защитить пользователей от вредоносных расширений, но и сохранить право выбора. Пользователи должны иметь возможность выбирать как расширения, так и каталог, из которого их можно установить. Именно поэтому в свое время мы добавили в браузер раздел Дополнения. И именно по этой же причине мы не только ввели ограничения, но и поддержали каталог Opera Addons, устанавливать расширения из которого можно так же просто, как и из Chrome Web Store. К тому же те разработки, что были установлены из сторонних источников, не были заблокированы полностью. Мы лишь отключили их по умолчанию. После перезапуска браузера люди сохранили возможность активировать их вручную и продолжить работу.
Как бы тяжело не было совместить безопасность и свободу выбора, кажется, нам удалось найти баланс между ними.
Проверка подлинности
После введения запрета на установку из сторонних источников, браузер получил возможность выявлять подделки, сравнивая их с эталонами. Но как именно нужно сравнивать? Если сравнивать только содержимое манифеста, то этого недостаточно, потому что мошенники смогут внедряться в существующие js-файлы. Сравнивать содержимое всех js и html файлов? Это долго и может сказаться на производительности. Многие из вас уже могли догадаться, что в конечном счете выбор пал на сравнение хешей. Если расширение устанавливалось из Opera Addons, Web Store или Дополнений, то у Яндекс.Браузера есть хеш безопасной копии. Достаточно сопоставить его с хешем текущего расширения, чтобы быстро выявить те, в которые вносились изменения.
Звучит просто, но на отладку этой технологии ушло немало времени. Нам пришлось искать золотую середину между эффективностью защиты, количеством ложных срабатываний и влиянием на производительность. Просим прощение за то, что не раскрываем тут всех деталей. Надеемся, что вы поймете причину. Многие пользователи заплатили за безопасность неудобствами, связанными с установкой расширений, но в конечном счете эта мера позволила нам повторить успех черного списка и в разы снизить количество «зараженных» браузеров.
Групповые политики и прочие лазейки
Черные списки Safe Browsing, ограничение источников и проверка подлинности значительно усложнили работу мошенников. Они отступили, пересчитали свои потери, но, как и в прошлый раз, нашли альтернативный вариант. Причем в этот раз основной удар принял на себя Chrome Web Store.
Каталог Web Store открыт для свободного добавления расширений и не требует премодерации. Злоумышленники этим и воспользовались. В каталоге мы и раньше находили некоторые, скажем так, не совсем полезные образцы. Но в 2015 году подобная активность явно возросла. Мошенники пытались обойти защитные меры простым количеством: одно популярное расширение быстро попадет в черный список, но если загрузить множество копий, то у некоторых вполне есть шанс выжить и окупить вложения.
В проекте Chromium также существует возможность устанавливать как сам браузер, так и расширения для него средствами групповых политик. Создавались они первоначально для корпоративного сегмента. Но как и в случае с первым способом, основное применение нашлось совсем в другой области. Расширения устанавливаются без какого-либо уведомления. Но самое неприятное здесь то, что в групповых политиках можно прописать запрет на отключение или удаление подобных расширений. И без умения работать с системным реестром пользователь от них избавиться не сможет.
Способы установки расширений через реестр или групповые политики, несмотря на их первоначальное назначение, применялись в основном мошенниками. Проблемы многих тысяч наших пользователей значат больше, чем удобство для нескольких сторонних программ. Поэтому весной этого года мы отключили подобные лазейки.
А что дальше?
Мы бы не хотели спойлерить и лишать удовольствия тех, кто находится по ту сторону баррикад, поэтому не станем рассказывать про наши планы и готовящиеся технологии. Со всеми остальными мы можем поделиться некоторыми собственными наблюдениями.
Во-первых, распространение рекламных и других опасных расширений это целая индустрия, у которой есть деньги, время и лучшие умы для поиска все новых способов обхода защиты. Чтобы успешно противостоять такой угрозе, мы выделили в команде целое направление, ответственное за безопасность пользователей.
Во-вторых, меры, принимаемые как в Яндекс.Браузере, так и в других браузерах и каталогах, постепенно создают для мошенников неблагоприятные условия. Им приходится искать альтернативные каналы для подмены рекламы или воровства данных на компьютере пользователя. И здесь важно не упускать их из виду. В будущих постах мы постараемся рассказать об этом подробнее.
Расширения – это отличный инструмент для добавления новых возможностей в браузер. А еще с их помощью тайно встраивают рекламу, воруют данные, рассылают спам и даже майнят криптовалюты. Сегодня мы поделимся с вами нашим опытом борьбы с подобными расширениями, вы узнаете об основных каналах распространения сомнительных разработок и о способах маскировки вредоносной сущности от модераторов и сканеров.
Яндекс.Браузер изначально поддерживал установку расширений для 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 и теми сайтами, где «предлагаются» расширения или размещена иная реклама. Она нужна по следующим причинам. Во-первых, социальные сети и антивирусы не блокируют по маске все адреса на авторитетных доменах. Во-вторых, генерировать страницы на бесплатных сервисах проще и быстрее, чем регистрировать новый сайт и привязывать его к расширению. В-третьих, такие ссылки выглядят безопасно, и пользователи охотнее по ним кликают.
Пользователь кликает на фейковый скриншот и попадает на сайт, который имитирует внешний вид YouTube и создан на базе сервиса для блогов. При любой попытке запустить видео появится предложение установить расширение.
Если человек соглашается, то теперь уже он против своей воли станет источником спама в фейсбуке.
Причем расширения из этого семейства умеют защищать себя. Обратите внимание на отзыв:
В нем идет речь о том, что расширение не дает открыть в Chromium служебную страницу chrome://extensions (моментально закрывает ее). С помощью этой страницы обычно рекомендуют проверить список расширений и удалить подозрительные. В свое время мы тоже столкнулись с такой хитростью, поэтому в Яндекс.Браузере страница browser://tune изолирована от расширений.
Партнерские программы
Можно не возиться с созданием своих расширений, страниц и спамом, а просто купить готовое популярное расширение и раскатить новую версию с сюрпризом (пользователи не узнают ни о продаже, ни о выходе новой версии). Или даже создать партнерскую программу для разработчиков, которые в обмен на деньги сами добавят в свои расширения ваш скрипт. В среднем по больнице партнеры зарабатывают по 100 рублей в сутки за каждые 1500 пользователей. Найти партнерские программы не трудно. Кстати, очень приятно читать на форумах таких программ подобные комментарии. Не зря работаем ;)
Владельцы партнерской программы готовы не просто дать свою библиотеку, но и создать готовое расширение. От партнера будет требоваться лишь опубликовать и найти трафик.
Как вы понимаете, любое вложение средств хочется отбить, поэтому разработчики сомнительных скриптов работают не только над количеством, но и над «качеством», где под последним мы подразумеваем способность спрятать свою сущность от модераторов и автоматических сканеров. Чем сложнее найти доказательство, тем дольше расширение проработает и тем больше принесет денег. И в этой области за несколько лет произошел значительный скачок.
От конкатенации до стеганографии
Все началось с примитивной конкатенации, когда заведомо опасный код разбивался на отдельные буквенные фрагменты. Примерно так, как на скриншоте. Наивно, но первым изобретателям, возможно, помогало.
Отдельно стоит сказать про обфускацию. Есть миф, что обфускация позволяет замаскировать любую логику, но работает это ровно наоборот. В реальности это самый бездарный способ маскировки, потому что он привлекает к себе внимание примерно всех: антивирусы на него ругаются, пользователи пугаются, модераторы проверяют такие расширения в первую очередь. Хотите, чтобы вас как можно быстрее выкинули из Стора? Используйте обфускацию кода.
Куда умнее поступают те, кто сохраняет видимость приличного кода, но разносят его вредоносные части по разным модулям, запутывают следы, общаются сами с собой с помощью localStorage. Некоторые части могут даже подгружаться с внешнего сервера. Причем не для всех стран (привлечь внимание модераторов где-нибудь в США проще, чем в России), не для всех браузеров (опять же исключения для Яндекс.Браузера, как и в примере выше), не в первые дни работы расширения (чтобы затруднить ручную проверку).
В апреле этого года среди разработчиков сомнительных расширений начала зарождаться новая мода. Взгляните на эту картинку:
Заметили что-нибудь необычное кроме артефактов от сжатия? А теперь давайте посмотрим через отладчик на работу расширения, которое содержит эту картинку:
Расширение извлекает часть кода из картинки. Этот прием называется «стеганографией», и он хорошо известен по вирусам для Windows, но до расширений добрался только весной. Сейчас этот метод комбинируют вместе со всеми вышеописанными, и встречается он в десятках расширений (71 тыс. пользователей, 11 тыс. пользователей). По нашей оценке, во всех этих расширениях используется скрипт от одного автора, а точнее, от одной партнерской программы, за которой мы теперь пристально наблюдаем. Мы эти расширения, конечно же, ловим и отключаем, потому что не полагаемся лишь на свои глаза и руки.
Машинное обучение
Нам удалось наладить полуавтоматический процесс выявления сомнительных расширений и их отключения. Работает это примерно следующим образом. Как только появляется любое новое расширение, и его начинают устанавливать в Яндекс.Браузер, запускается процесс анализа на наших серверах. Мы используем машины, которые постоянно обучаются на уже известных плохих образцах, чтобы оценивать степень опасности новых. Явные злоупотребления блокируются автоматически. Сомнительные случаи проходят через ручной контроль.
Мы научились ловить не только те разработки, которые воруют пароли, перенаправляют на фишинг-страницы или тайно изменяют/добавляют на страницы свою рекламу. Мы также не пропускаем расширения, скрытно подменяющие ссылки на страницах (в том числе для заработка на партнерских программах) и неожиданно открывающие вкладки с рекламируемыми сайтами. Не одобряем добычу криптовалют, если пользователь не дал своего явного согласия. Запрещаем имитировать клики и другие действия пользователей (к примеру, для накрутки лайков или рассылки спама в социальных сетях).
По понятным причинам мы не можем раскрывать детали работы наших сканеров и факторы, используемые в машинном обучении (передаем привет талантливым разработчикам сомнительных скриптов). Скажем лишь, что благодаря этому процессу большинство вредоносных дополнений отключается в Яндекс.Браузере за 1-3 дня после начала своей жизни. Это более сотни уникальных расширений в месяц и десятки тысяч защищенных пользователей.
Как бы удивительно это ни прозвучало, но именно в рунете начинают внедрять новые способы обмана пользователей и браузеров, которые затем «экспортируются» дальше. Сейчас нам противостоят уже не любители, а целая индустрия создателей и распространителей опасных расширений, которые рано или поздно найдут очередной способ нас удивить. Мы верим, что найдем чем им ответить, но идеальной защиты не бывает, поэтому всегда будут существовать вредоносные расширения, которые у нас еще не отключены. И здесь нам пригодится помощь всего сообщества. Если вы столкнетесь с подобными разработками, то можете смело присылать информацию нашей команде (как через поддержку, так и в личку на Хабре). Мы также будем благодарны за любые идеи и информацию, которые помогут защитить пользователей от неприятных сюрпризов.
В этой статье я покажу насколько опасны могут быть расширения в хроме, и чем
расширения в фаерфоксе безопаснее.
Речь пойдёт о расширении FastProxy.
Ни в коем случае не ставьте его в чистом виде в хроме.
Чтобы получить его исходный код — сначала надо поставить другое расширение Chrome extension source viewer.
Иконка CRX при этом станет жётлой — кликнуть на неё и Выбрать "скачать как zip".
Теперь к анализу кода.
1. Manifest (manifest.json) — ядро любого расширения
Ограничения расширения задаются CSP (content security policy) и permissions:
"content_security_policy": "script-src 'self' 'unsafe-eval' https://ssl.google-analytics.com; object-src 'self'",
"permissions": [ "proxy", "tabs", "webRequest", "webRequestBlocking", "management", "\u003Call_urls>", "storage" ],
CSP должна сразу насторожить, она позволяет unsafe-eval (подробнее об этом здесь).
Т.е. исполнять код из любой переданной строки.
- Разрешение management позволяет управлять другмии расширениями.
- Разрешение webRequestBlocking позволяет подменять абсолютно все запросы, проходящие через браузер.
- Разрешение \u003Call_urls> это тоже самое что — позволяет действовать на любом сайте.
Подробнее о разрешениях можно узнать здесь.
Т.е. на базе лишь одного файла манифеста расширение уже имеет огромный уровень доступа ко всему.
Ключевые файлы кода перечислены в
Выполняются по порядку в массиве сразу после установки расширения или сразу после запуска браузера.
- Файл jquery.min.js я сравнил с оригинальным кодом jquery 2.2.4 — они совпадают.
- Файл ga.js это просто код Google Analytics.
- Файл lib.js это CryptoJS.
- Основной код сосредоточен в background.js.
Чтобы было намного легче читать код, я его немного переписал (переименовал функции, поменял запятые на отдельные блоки и т.п.).
Также можно использовать firefox-версию того же расширения, чтобы понять неосновную часть кода.
Использование proxy в фаерфоксе и хроме кардинально отличается.
Переписанный код можно найти по этой ссылке.
Прежде всего нужно понимать что $.ajax выполненный на файле со скриптом внедряет этот скрипт в страницу (в данном случае не в страницу, а в фоновый процесс).
Вбиваем в поиске "антизапрет fastproxy" и открываем 4й результат поиска, раздел "Будьте осторожны".
Выясняется, что FastProxy использует не свои proxy сервера.
Вторая ссылка дает код аналогичный первой, но скрипт уже другой!
Обычно у всех табов есть id. Исключение составляет таб-окно консоли браузера. Т.е. это защита от подсматривания через консоль.
Также этот файл содержит новые урлы, расшифруем их, используя CryptoJS.AES.decrypt( value, "config").toString(CryptoJS.enc.Utf8) и CryptoJS.AES.decrypt( value, "record").toString(CryptoJS.enc.Utf8) .
Первые 2 ссылки совпадают с предыдущими. Но третья отличается:
Для 'record' же все 3 ссылки новые.
config_fastproxy.ga.js
Код также содержит закрытие консоли. Дальше начинается уже интересное.
достает идентификатор расширения, причём это недокументированная возможность.
Текущая документация использует иной метод
Далее идёт разветвление:
^ Запуск майнера Monero. Запомните кстати кошелёк, если увидите где-то в коде аналогичный — это те же люди.
Этот код отключает все расширения, кроме него самого.
Если бы не было разрешения managament, это было бы не возможно.
tabs.onUpdated запускает колбэк при обновлении одной из стадий загрузки таба на другую. Подробнее тут.
Проще говоря действует на каждый таб.
Кроме FastProxy самого. Видимо была серия нескольких расширений, которые работали как вирусы.
Все урлы, кроме тех, что содержит строку google. Видимо потому, что табы с гугл временные. Истиная причина мне не понятна.
И самое страшное — в каждый таб внедряется скрипт после полной загрузки страницы в этом табе:
script1.js
Прогняем его через JS beautifier.
script2.js
Игры с символами можно опустить благодаря console.log.
Самое опасное начинается там где создается тег script.
var l = document.createElement('script');
Меня интересует в первую очередь либо его innerHTML либо src.
Левая часть понятна — протокол текущей страницы. Правая же часть это фактическая ссылка. Поставим туда console.log
script3.js
Аналогично прогоняем через JS beautifier
script4.js
Принцип файла такой же — самая опасная часть это добавление скрипта.
Выходит правая часть к чему-то привязана
Смотрим по коду
упоминается в самовызывающейся функции f
затем f упоминается в
Т.е. через символьные операции в скрипт передаётся посещаемый URL.
Смотрим на сам код скриптов, они совпадают.
script5.js
Опять прогоняем через JS beautifier.
script6.js
Не переписывая код, можно посмотреть на добавления узлов, создание скриптов, замену кук,
создание элементов с нуля, аяксы. Но довольно сложно понять что происходит на самом деле.
Так что попытаемся переименовать эти нумерованные функции.
script7.js
Распутывание этого файла было тяжелым. Тяжелее всего проходить через постоянные создания объектов, которые создают объекты, которые создают объекты… А также тяжело было найти чистые функции чтобы начать распутывать клубок.
Мне не удалось до конца распутать код. Но то, что распутал дает следующее:
Сборка полного отпечатка о пользователе, которая затем конвертируется в уникальную строку через серию битовых операций.
Этот отпечаток включает в себя:
- UserAgent
- Сведения об установленных плагинах (для IE особенно). Особо тут стоит упомянуть строку про Palemoon. Дело в том, что Palemoon позволяет использовать Java.
- Сведения об используемом процессоре
- Сведения об установленных шрифтах (функция getFontData). Причём по коду заложена возможность использовать расширенный список шрифтов, помимо системного. Но используется только системный
- Уникальный отпечаток по canvas (функция get2dCanvasFingerprint). Учитывая что он использует несколько нестандартных символов есть проверка на наличие установленных языков в системе.
- Уникальный отпечаток по webgl (функция getWebglFingerprint)
- Проверка фальшивости поставляемых navigator данных (функция hasFalseBrowser). Особенно в этом плане интересно использование eval.toString(), чтобы понять что за браузер используется на самом деле. Никогда бы об этом не догадался.
Есть функция, которая внедряет флеш на страницу, но по факту она не используется.
Особо посмотрите коды сбора отпечатков canvas / webgl.
Есть внедрение айфрейма на страницу (метод appendBadIframe1).
Теперь посмотрим что находится в этом айфрейме.
iframe1
Прогоняем через JS beautifier.
iframe2
Вернёмся к script7.js
Исполнение файла создает 6 запросов XHR (причём через создание Img), а также при клике на страницу открывается новое окно.
Расшифрованные ссылки для запросов можно найти в коде.
Вернёмся к расширению
Вернёмся к расширению и ссылкам record. Эти ссылки используются как PAC-файл для метода chrome.proxy.settings.set.
Коды файлов можно найти тут:
Т.е. FastProxy использует сервера Антизапрета и Browsec, не имея своих собственых серверов.
При помощи разрешения webrequest + webrequestBlocking можно поменять абсолютно любой запрос, включая внутренние запросы внутри самого хрома.
Т.е. можно полностью поменять HTML-страницы, можно убрать мешающие заголовки в запросах, включая CSP (content security policy) сайта.
При помощи своего прокси можно слить весь траффик пользовтаеля, который идёт через свой прокси.
Политика гугла значительно мягче чем политика мозиллы, они публикуют практически всё.
У мозиллы есть жёсткие требования: unsafe-eval запрещён, запутывание кода запрещено (разрешено, если предоставите полный сборщик).
Также мозилла сама периодически смотрит коды расширений, но не сразу после публикации.
Побробнее можно прочитать здесь и здесь.
По этой причине ставить новые расширения фаерфокса намного спокойней чем расширения хрома.
navigator отдает нереально много уникальных данных о браузере, нежели это было в прошлом. И скорей всего будет отдавать ещё больше в будущем.
eval.toString, также как и иные нативные функции позволят вычислить настоящую версию браузера.
Уникальный отпечаток по canvas и webgl.
Если кто-то работал с webgl, расскажите пожалуйста что делает функция getWebglFingerprint. И что там получается уникального?
Читайте также: