Блокируем сторонние скрипты в браузере. Инструкция

Dec 20, 2018 14:35

Сейчас фыспук накрыло очередной эпидемией вирусных саморазмножающихся постов. Открываешь внешнюю ссылку, и вдруг обнаруживаешь что ты уже эту ссылку разместил у себя, хотя этого явно не делал. Поскольку для атаки использовались действительно прикольные картинки, лента ими сразу наводнилась...

Как типа компьютерный специалист, я сейчас коротко объясню как это работает, и подробно расскажу как с этим бороться. (Я надо сказать тоже не рыжий, как все пошел по ссылке, картинки прикольные и уважаемый мной человек перепостил, но из-за принятых мной заранее мер на удочку не попался)

Update: судя по поступившим позднее данным эта атака шла не через веб версию, а через приложение, и там вообще не надо было никуда переходить. Это ничуть не отменяет всего здесь написанного, а лишь в дополнении подтверждает тезис о том, что приложения вещь гораздо более уязвимая чем бразуер. Браузеры вылизывали годами в том числе на очень критичных задачах. А вот приложение, хрен пойми кто их пишет и какое внимание уделяет безопасности.

Во-первых как и почему это работает. Если не предпринимать особых мер, то любой сайт который вы откроете в браузере, может исполнить любой скрипт с любого сайта в интернете. При этом исполняемый скрипт будет знать все то, что знает браузер о его родительском сайте. Если вы были залогинены на родительском сайте, то у скрипта будет эта информация. Этой информации не будет у того, кто этот скрипт запустил, но сам скрипт этой информацией располагает. Поэтому задача атакующего обмануть скрипт таким образом, чтобы он или сделал то-что атакующий хочет, или выдал ему саму секретную информацию, и далее атакующий сам справится...

В теории когда разрабатываются скрипты для сайтов, такую возможность имеют в виду, и пишут скрипты так, чтобы ими нельзя было воспользоваться для того чего не надо... Но это только в теории... Практику мы видим сами.

Идеальным решением было бы конечно вообще запретить всем сайтам использовать скрипты, но это к сожалению в современном мире не возможно. Без этого они просто работать не будут.

Поэтому относительно адекватным решением будет разрешить сайтам исполнять только свои собственные скрипты, а скрипты с других сайтов исполнять только после вашего явного одобрения (временного или постоянного). Это, особенно по-первости, пока вы не разрешили всем своим сайтам все что им надо, создает определенный геморрой, но в последствии спасает от большого количества бед и взломов.

Как это делается. Есть расширение uMatrix. Для Хрома и FireFox'а

Если его поставить, то справа от адресной строки появится красно-зеленый квадратик. Если на него нажать, то появится вот такая вот табличка




это табличка правил разрешений/блокировки скриптов для данного сайта. Смотрится дико. Дико так же читать пояснения которые я написал (их тоже было дико писать ;-) но на самом деле, эта табличка очень логичная и интуитивно понятная, когда с ней немного повозишься. Просто такого интерфейса нам до этого не встречалось, поэтому сначала требуется время чтобы вникнуть в логику ее работы. А так, ребята которые ее придумали просто гении...

Общие принципы:
По-вертикали: список доменных имен которые задействованы при отображении сайта, по-горизонтали - какого рода контент используется (помимо скриптов еще куки и много чего хорошего-полезного). На пересечении циферка - сколько раз с данного доменного имени был использован этот тип контента.

Вся эта таблица, включая шапку раскрашена в цвета. Семантическое значение цветов такое: ярко-красный - явным образом запрещено, ярко-зеленый - явным образом разрешено. Светло-красный - запрещено потому что попадает в какую-то запрещенную категорию, светло зеленый - разрешено потому что попадает в какую-то разрешенную категорию.

Категории могут быть либо по типу данных: на пример на картинке явно разрешены все картинки (image), и поэтому везде где нет явного запрета, эти столбец картинок подсвечен светло-зеленым. Либо категории могут быть по доменным именам. У меня явно разрешено все для xx.fbcdn.net (в левом столбце подсвечен темно зеленым), поэтому всем его поддоменам будет можно то же, что можно ему самому: scontent.fbcdn.net подсвечен светло-зеленым именно поэтому.

Отдельной категорией в этой таблице идет строка 1st-party, что означает сам сайт который мы просматриваем. 1st-party тут явным образом разрешено все, а поскольку мы смотрим facebook.com, то автоматически можно все всем его поддоменам (они светло-зелененькие)

Менять эти правила можно нажимая мышкой на верхнюю или нижнюю половины каждой ячейки. Нажатие на нижнюю половину - явно запретить (или снять явное разрешение если оно было), нажатие на верхнюю половину - явно разрешить (или снять явный запрет если он был)

Изменения эти временные. Их можно сохранить нажав на иконку замочка вверху менюшки, можно отменить нажав на иконку сильно-стилизованного ластика.

Изменения немедленного влияния на страницу не оказывают, чтобы они подействовали надо страницу перезагрузить. Это можно сделать тут же, кнопкой со стрелочками идущими по кругу...

Еще есть кнопка выключения, которая позволяет временно блокировку скриптов вообще выключить. Ее я использовать не рекомендую :-)

И последний элемент интерфейса о которой стоит упомянуть это серо-синяя надпись www.facebook.com в левом верхнем углу. Это scope (область видимости) к которой данные настройки применяются... Доменное имя может быть длинным aaa.bbb.ccc.nataraj.su. Часто этим подразумевается какая-то группа сайтов. И в некоторых случаях например хочется, когда смотришь aaa.bbb.ccc.nataraj.su установить правила для ccc.nataraj.su и пусть они применяются ко всем его поддоменам. Для этого можно потыкать мышкой по доменному имени в левом углу, и добится того чтобы синим стало именно ccc.nataraj.su. Тогда все правила будут применяться именно к нему и его поддоменам... В нашем случае на картинке www - серое, а facebook.com синее. Значит область действия наших правил -- facebook.com плюс поддомены. Отдельная область действия -- это "*" которая правее facebook.com она позволяет задавать правила для всех сайтов.

В блокировщик уже встроены правила запрета всякого рода счетчиков и анализаторов. На картинке это красный pixel.facebook.com. Я его сам не запрещал, он уже так был. Остальное все запрещать или разрешать придется самостоятельно. Об этом ниже.

* * *

Так, окей, у нас есть этот инструмент. Как с этим жить дальше?
Сразу скажу, мучительно. Сразу все перестанет работать, потому что большинство сайтов не разборчиво в связях. Для любимых сайтов придется аккуратно поштучно прописывать правила разрешающее все домены из их разветвленной инфраструктуры. Для не любимых... А они вам точно нужны?

Алгоритм действий примерно такой. Я сбросил все правила и начинаю работать как-бы с нуля. Все работает, вау... Долистываю до видео с ютуба, нажимаю плей, "Requests to the server have been blocked by an extension.". Резонно, ютуб сторонний сайт, ему без разрешения нельзя... Нахожу в uMatrix упоминание youtube, там на пересечении iframe горит единичка (ну да они встроили свой плеер в сайт, логично), видео я смотреть хочу, ютубу в данном контексте верю, значит разрешу. Явно разрешаю youtube.com явно разрешаю в нем iframe'ы. Перезагружаю, нажимаю play, плеер появляется и бесконечно крутит загрузкой. Иду в umatrix, там вижу, что www.google.com пытался исполнить скрипты, а два неудобочитаемых поддомена googlevideo.com желали сделать XHR перенаправления. Посылая проклятия криворуким разработчикам разрешает все доменам google.com и googlevideo.com, сохраняем, перезагружаем. Видео заработало.

Плохая новость, так придется делать на каждом сайте для каждого источника встраеваемого контента. Хорошие новости: 1. если сделать это правильно, то делать это придется ровно один раз. 2. а всякую гадость которую вы не хотите видеть, можно и не разрешать. Я вижу на всяких левых сайтах гораздо меньше мусора, чем все остальные.

Вообще конечно так быть не должно. Практика держания запчастей сайта на разных не связанных друг с другом доменах - порочна. В случае с ютубом на мой взгляд было бы достаточно одного разрешения, если бы не их развитая доменная инфраструктура. Может быть если больше людей будут правильно блокировать скрипты, разработчики как-то поменяют свой подход. Технически это исполнимо. Ниже, пример того как выглядят скрипты на сайте здорового человека.




Для тех кто не в курсе дискорд - популярная система чатов для геймеров, она развесистая, ява-скрипта в ней много. Но они смогли сделать это аккуратно. Им мой респект.

Вместо эпилога: Блокирование скриптов ­- практика которую я бы рекомендовал всем и каждому. К сожалению сейчас для того чтобы это делать придется начать немного разбираться в том как работает веб, хотя бы до уровня чтобы узнать что такое iframe cookie и XHR, и что обычно означает cdn в имени домена. Но для меня это обязательный элемент личной гигиены, который если применять его совместно с другими базовыми принципами (не открывать дверь незнакомым, не тащить на компьютер и телефон непонятные левые программы), способен уберечь от большого количества информационных угроз. Поэтому крайне рекомендую завести себе такую привычку...

Оригинал этой записи находится на https://nataraj.dreamwidth.org/972007.html. ( комментарии
) ( комментировать )

инструкции, безопасность, web

Previous post Next post
Up