Как стать автором
Обновить

Комментарии 32

>Мы внутри команды пришли к соглашению, что расширения, которые лезут в контент страницы и позволяют себе изменять контент «идут лесом», но верно ли это в 100% случаев?
Нет. Adblock как пример

>3. И самое главное, почему спокойно себе живут сайты в духе: metabar.ru/, cpatext.ru/?
Я их не одобряю, но кушать-то всем хочется, поэтому и живы.
>Нет. Adblock как пример
К счастью, на нашем сайте нет баннерной рекламы :) Если же говорить точнее, то с помощью CSP в аспекте джаваскрипта возможно ограничить только обработку скриптов из «штатных» недоверенных источников (с доменов не из белого списка, инлайновых скриптов страницы). Непосредственный код плагинов браузера считается доверенным контентом и не подлежит ограничениям со стороны CSP. Срабатывания блокировок вылезают только когда расширения манипулируют DOM страницы и, например, инъектируют подгрузку внешнего js. Конкретно Adblock поэтому будет работать нормально.
Т. е. если этот плагин будет качать скрипт внутри себя и инлайтить в страницу, ваше решение не поможет?
Совершенно верно. От расширений браузера абсолютной защиты нет (и слава богу).
Ghostery еще.
Я правильно понимаю, что у пользователя стоит плагин, который он с большой вероятностью приткнул «условно сам» а не «получил от малваре»?
В системах, подобных metabar, по задумке предполагается, что пользователь сознательно поставит предлагаемый экстеншн. С другой стороны, есть подтверждения о троянах, которые вызывают подобные эффекты. В большинстве случаев, правда, их все-равно в том или ином виде требуется установить вручную
Ну я думаю что из соображений технократического гуманизма пользователей надо предупредить что у них стоит «подозрительный плагин», но вообще «глобально» сделать ничего нельзя — если пользователь собственноручно-добровольно сунул в свой браузер плагин, то с этим можно только смириться (и авторам плагина / хозяевам подозрительного сайта, если нет доказательств малварьности, предъявить нечего — мопед не их)
Совершенно верно. Был подобный случай, клиент жаловался на некоторые ссылки по ключевым словам на своем сайте, которые он не ставил.
В результате в плагинах оказался левый плагинчик, как он попал — клиент не знал. После удаления плагина все починилось.
условно да.

впрочем, такие плагины как правило находятся у (или после) юзеров, которые сами по себе ходячая малварь. есть такие странные люди, у которых руки даже не оттуда, откуда они сидят, а похоже вообще из пяток — и некоторые из них еще вдобавок нажимают на ВСЕ ссылки и ВСЕ баннеры, что видят. а потом «ой у меня компьютер тормозит». при 3 антивирусах с тухлыми базами, 4 браузерах и двух десятках разных тулбаров в них, хорошо если суммарно. флеш с макафи? пожалуйста! кипу с поиском от «подставить по вкусу»? не вопрос. и т.д, и т.п. наверное, они и «обновления оперы мини» качают на своих телефонах.
Недавно вылавливал такой: в опере подменял ссылки, в хроме вытаскивал ошибку (в логах)… Если в хроме нашел экстеншн, то с оперой пришлось мучиться… Итого нашел его в программах и компонентах и через обычное удаление программ он ушел.
Удивило, но точно знаю, что сам не ставил
2. Какие best practices при решения подобных вопросов с зараженными пользователями на крупных сайтах?
Никаких достойных сведений гуглением найти не удалось.

Ну а каких решений вы ждете. Заразить ведь можно все — браузер, пользовательский режим ОС, ядро ОС, а в вашем распоряжении только открываемый в браузере web-ресурс.
Как вариант-дополнение к Content-Security-Policy, поставьте обработчик на все сссылки.

$('a').click(function(e){
    if ( $(this).attr('href') && $(this).attr('href').indexOf(window.location.protocol + '//' + window.location.host)!==0)
    {
        alert('У вас на компьютере вирус или в браузере расширение, подделывающее наши ссылки, пожалуйста, проверьте или обратитесь к нам в техподдержку');
        e.preventDefault();
    }
});
Большинству сайтов все-таки требуется иногда показывать полезные внешние ссылки, а ведение глобального белого списка их хостов выливается в многие тысячи элементов… Соответственно, придется реализовывать сильно усложненную логику вайтлистинга хостов внешних ссылок для каждой отдельной страницы. Хотя можно конечно попробовать фильтр, криптоподписывающий все внешние ссылки из серверного ответа, и применять ваш скрипт только для всех неподписанных.
Так ведь и перенаправление с вашего сайта никто не отменял, более того это best practice в плане защиты от всяческих уязвимостей, например такой. Так что:
<a href="http://site.com/redirect.php?out=http://extern-site.cocm">Внешний сайт</a>
К сожалению, редиректоры на сайте сами зачастую приводят к уязвимости CWE-938/CWE-601 ( www.owasp.org/index.php/Top_10_2013-A10-Unvalidated_Redirects_and_Forwards ), для избавления от которой опять же требуется вести белый список доверенных хостов или придумывать кастомную логику в стиле криптоподписи ссылок. И к тому же это не очень честно с сеошной точки зрения. Хотя конечно если бы хоть какая-то часть обсужденных нами способов была массово реализована, то веб стал бы чище.
По поводу SEO, ссылку можно подменить и по событию onclick. По поводу описанной уязвимости — ну я не знаю конкретно вашей ситуации с внешними ссылками (откуда берутся и куда ставятся), но думаю тоже решается просто.
Вы как будто ищете решение для всех случаев на свете, но тогда повторюсь — можно взломать и браузер и тогда хоть что придумывайте — ничего уже не поможет.
В вашем коде есть уязвимость: например, с домена example.com он будет пропускать ссылки вида
http://example.com.badguys.com/...
Нужно добавить еще один слеш в конце аргумента indexOf.
Я даже больше скажу — код вообще не очень, но это был всего лишь пример на скорую руку. Лучше вообще у элемента a проверить параметр host.
$('a').click(function(e){
    if ( $(this).attr('href') && this.host !== window.location.host)
    {
        alert('У вас на компьютере вирус или в браузере расширение, подделывающее наши ссылки, пожалуйста, проверьте или обратитесь к нам в техподдержку');
        e.preventDefault();
    }
});

.
Проблема усугубляется тем, что если раньше вредоносные действия имели локальный эффект (показать рекламный баннер или подменить текст на партнерскую ссылку), то в 2014 году начали действовать трояны, которые сразу проводят комплекс атак: одновременно инъектируются скрипты metabar, показывающие рекламные баннеры; скрипты cpatext, рандомно подменяющие текст на ссылки; появляются фишинговые ложные виджеты-формы входа в FB, VK, OK и т.п.
При этом многие схемы лавируют на грани легальной рекламы и вредоносного кода, поэтому далеко не все из них определяются и лечатся пользовательскими антивирусами.
По нашей статистике в среднем из 1000 внешних кликов 50 приходятся на подмененные спам-линки. И это только клики, а не факты инъекции js. А ведь эти скрипты в любой момент могут начать снифать платежные данные банковских карт или просто выступить в роли XSS-прокси для доступа к защищенной внутренней инфраструктуре организаций…
Тот у кого стоит такой плагин может выключить обработку CSP вроде
CSP выключается не плагином, а параметрами командной строки. Для трояна это несколько сложнее, чем просто поставить плагин.
Для Firefox есть security.csp.enable в about:config
Расширение эту настройку выключить может?
тогда как минимум плагин имеет право читать и изменять хедеры полученные от сервера. он может просто удалять CSP
Можно фильтровать хидеры, как уже написали.
Ещё я встречал такой фокус: если для доступа к данным нет API (как например для HTML5 storage), extensions не брезгуют открывать sqlite-базу в профайле юзера и читать/писать настройки напрямую.

Когда мне была интересна тема взаимодействия расширений с LocalStorage, я посмотрел код Self-Destructing Cookies и Foundstone HTML5 Local Storage Explorer — они ходят в базу webappsstore.sqlite. Изменения видны браузеру сразу.
Есть идея сделать некое API, которое будет детектить подобное и выводить пользователю предупреждение с просьбой проверить комп на вирусы или подробными инструкциями на удаление.
Только массовые публичные расстрелы подобных рекламщиков спасут Интернет!
С другой стороны, подмена ссылок может быть нужна самому владельцу сайта. Особенно, если он участвует в лидогенерации (работает с разными партнерскими программами). Например, чтобы избежать потери трафика (денег).
Если это нужно владельцу сайта — то это будет происходить с его ведома, не так ли?
Конечно.

Я привлек внимание к этой стороне проблемы потому что в других комментариях в основном рассматривался случай malware.
Возможно, это было потому что сам пост написан про малварю?..
Возможно. Я просто клюнул на cpatext, т.к. сам разрабатываю cpa-движок и думал о подобном сервисе (подмена ссылок) для вебмастеров.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий