Расширение Хром: знакомимся ближе.

21.01.2019 0 Автор GodKnowses

Расширение Хром: где находится, что устанавливает и о чём следует помнить?

Вы не задумывались о том, чем же конкретно занимается устанавливаемое лично вами расширение для браузера Google Chrome? С поставляемыми во время установки самого браузера вроде бы всё ясно… Нужные и не очень сервисы Google будут отнимать ресурсы компьютера фоном всякий раз, пока запущен сам браузер. А какие файлы устанавливает расширение Хром, и как можно увидеть код этого расширения при помощи сервиса Google? Давайте познакомимся с ними поближе.

Для чего расширения нужны?

Установленные расширения отображаются в шапке браузера соответствующими иконками (встроенных в браузер это не касается):

Основное их назначение – расширение функций браузера. Блокировка рекламы, оптимизация используемой памяти (да, есть и такие), управление паролями, копирование контента страницы, безопасность, вскрытие информации о сайте и т.д. и т.п. Однако следует помнить, что подавляющее большинство расширений имеет корыстную подоплёку, благодаря которой производитель может подсовывать или считывать нужную информацию (в том числе управлять рекламой и надоедливыми оповещениями, следить за посещениями браузера). При этом работая фоном и незаметно для вас, даже изменяя внешний облик страницы. Среди наиболее неприятных свойств вредоносных приложений нужно отметить вероятность засасывания вашего компьютера через браузер в ботнет для DDOS атак и сбор конфиденциальной информации. А это куда серьёзнее, чем та роль маленькой гирьки, которая тащит скорость вашего браузера вниз, которую расширению часто приписывают в надежде ускорить работу Google Chrome. Дочитайте до конца, и вы поймёте почему это сделать в принципе почти невозможно.

Куда расширение Хром устанавливается?

Все расширения по умолчанию устанавливаются по пути:

C:\Пользователи\Имя_Пользователя\AppData\Local\Google\Chrome\User Data\Default\Extensions

Напомню, что папка AppData скрыта по умолчанию, что можно поправить в Свойствах папки в Настройках системы. И, открыв указанный путь, вы увидите несколько папок с произвольным набором символов в имени. Этот набор из 32-х символов (название папки) – ни что иное, как идентификатор расширения.

Как обнаружить расширение среди прочих?

Я приведу самые простые способы. Если вы просто проверяете список установленного, для поиска расширения можно воспользоваться адресной строкой Chrome:

chrome://extensions/

Как уже говорилось, самым действенным вариантом поиска (в проводнике Windows) расширения является его ID. Идентификатор обнаруживается на странице с расширением:

Если расширений немного, можно, прогуливаясь по папкам, выцепить используемые расширением значки, ярлыки, иконки и т.д. Наиболее распространённым содержимым каждого также являются html-документы, Java-скрипты, шрифты и т.п. Всё это располагается в подпапке с номером версии расширения. Практически все файлы открываются с помощью текстовых редакторов, например, Блокнота. Однако для корректного просмотра рекомендуется использовать специальные текстовые процессоры типа Notepad++ или AkelPad. Для более тщательного знакомства с расширением Google придумало… ещё одно расширение, которое позволяет просматривать код чужого прямо из браузера. Оно называется Chrome extension source viewer и после установки будет встроено в контекстное меню Google Chrome, доступное по клику правой кнопкой мыши:

Любое расширение Хром всегда доступно для скачивания в архиве из магазина Chrome, если, конечно, оно оттуда уже не удалено. CRX поможет скачать расширение и посмотреть на его код (перед установкой на странице магазина):

Архитектура расширений Chrome или немного теории не помешает…

Браузер Chrome использует архитектуру мультипроцессинга, при этом любой процесс от движка браузера запускается в привилегированном статусе. Это значит, что браузер имеет доступ к системным и аппаратным функциям от имени множества процессов визуализации. А это уже означает, что как минимум один отдельный процесс управляет отдельной вкладкой. Плюсом то, что во вкладке на данный момент исполняется. Но процесс виртуализации запускается в некоем облаке (песочнице), благодаря чему браузер ограничен во влиянии на системные файлы и на сам процесс обмена данными с сетью. Эти процессы могут только посылать запросы типа XMLHttpRequest в сам Chrome.

Так вот, к расширениям, созданным для него, Chrome (с самого начала заточенный именно на безопасный серфинг и никак не ресурсосберегающий) относится изначально как к неопасному, но “бажному” (от баг – ошибка). Chrome “разрешает” создавать плагины только если они соответствуют принципам:

  • минимум привилегий
  • разделение привилегий
  • абсолютная изоляция

Если вы хоть немного обеспокоены безопасными методами сетевого сёрфинга, то наверняка знаете, что наиболее опасным “местом на странице” любого сайта является участок с Java-скриптом. Chrome об этом также в курсе, и потому принцип “один процесс следит за одним элементом” позволяет контролировать поведение бесчисленных скриптов. А это прежде всего защита ваших системных файлов.

Расширение Хром чаще всего включает в себя исполнительные скрипты и ядро расширения. Скрипт содержания – это JavaScript, и он может быть инжектирован во время загрузки странички. Он запускается в визуализированном пространстве, которое обеспечивает доступ к древовидной модели DOM стандартного интерфейса управления HTML-объектами. Однако скрипт загружаемого контента благодаря такой архитектуре не способен получить доступ к данным вне этого пространства. В итоге мы имеем картину, когда страница, загруженная в Google Chrome, представляет собой несколько изолированных визуализированных процессов, которые обобщаются на экране… правильно – движком вашего прожорливого браузера. Так же работает и принцип –safe-plugins для запуска Chrome-плагинов (плагины и расширения – вещи разные, не путаем).

Безопасность расширений

Браузер отводит ограниченный набор разрешений каждому из расширений, включая исполнение кода, доступ к сайтам и таким модулям браузера, как вкладки, закладки пользователя, история просмотров, кукисы и местоположение. И каждое из расширений должно задокументировать свои “претензии” на права в обязательном файле manifest.json. И за содержанием Google старается следить, предлагая скачивать расширения только из “родной” галереи. Скрипт может получать доступ к напрямую к содержимому контента, однако по умолчанию ни одно из расширений не имеет доступа ни к одному из модулей Chrome. Кроме, конечно, обращений к ядру расширения через postMessage. Да, у ядра привилегий больше, чем у других функций расширения, но и оно изолировано от страницы в сети. И с целью дальнейшего контроля над потенциально опасным или бажным расширением, Chrome ввёл процедуру зон изоляции. Их три, и в общих чертах смысл каждого таков:

  • Зона 1: каждое расширение имеет право на внедрение или изменение объектов в соответствии с присвоенным на этапе создания специальным ключом (перекрёстное разрешение декларируется уже в manifest.json).
  • Зона 2: мультипроцессинг Хрома запускает несколько процессов на каждый из обрабатываемый на странице объект; один процесс контролирует один рекламный баннер, другой – игру флеш-плеера, а для безопасности (если что-то на странице “упадёт” или попытается изменить без вашего метода) третий процесс на уровне ядра самого Chrome погружает эти процессы в облако, контролируя работу каждого.
  • Зона 3: скрипты содержимого страницы (вкладки) запускаются отдельным JavaScript-движком. И скрипты различного происхождения запускаются также отдельно.

Однако, несмотря на казалось бы внушительные оборонительные рубежи и тотальный контроль над расширениями со стороны Google галереи,  спектр вероятных атак с их стороны весьма широк. Немалое количество популярных расширений имеют непомерный аппетит в отношении браузера. А потому утечки в безопасности в части установленных расширений мы разберём в рамках отдельной статьи.

Успехов нам.