Расширение браузера (.xpi) для всестороннего сканирования вредоносного ПО, которое проверяет множество распространённых приёмов вредоносных программ, таких как: тактики обфускации похитителей учётных данных, стеганография, base64-полезные нагрузки, zip-уловки, удалённое выполнение кода, полиглот-приёмы и трюки с метаданными, чтобы предоставить аналитику информацию о том, где требуется более глубокий анализ.
Инструмент командной строки, анализирующий файлы расширений Firefox (.xpi) на наличие признаков вредоносного ПО, обфускации, скрытых полезных нагрузок, стеганографии и других методов, используемых для протаскивания вредоносного кода мимо групп проверки расширений.
extension-scanner.py вскрывает расширение Firefox и выполняет набор проверок безопасности для каждого файла внутри него. Затем он создает цветной отчет с результатами, отсортированными по степени серьезности.
| Категория | Что ищет |
|---|---|
| Разрешения | Опасные или чрезмерно широкие разрешения (nativeMessaging, <all_urls>, debugger, desktopCapture и т.д.) |
| Политика безопасности контента | unsafe-inline, unsafe-eval, внешние источники скриптов в CSP |
| Обфускация JavaScript | eval(), atob(), злоупотребление конструктором Function(), шестнадцатеричные escape-последовательности, сборка через split/join/reverse, закодированные строковые литералы, setTimeout с строковыми аргументами |
| Подозрительные URL | Жестко заданные внешние домены, классифицированные как известно-вредоносные (попадание в черный список → HIGH), неизвестные (не в белом списке → MEDIUM) или известно-безопасные (в белом списке → подавлено). Выполните --update-blocklist для обновления черного списка доменов из URLhaus и списка Питера Лоу. |
| Учетные данные и секреты | Жестко заданные ключи API, токены (AWS, GitHub, Slack, Google), пароли, закрытые ключи и IP-адреса |
| Полезные нагрузки Base64 | Декодирует встроенные base64-блоки и сканирует их на наличие исполняемых файлов, скриптов и сетевого кода |
| Стеганография PNG | Обнаруживает данные, добавленные после маркера IEND PNG, и автоматически декодирует трейлер (base64, zlib, gzip и их комбинации); декодированные полезные нагрузки рекурсивно сканируются на обфускацию JS, учетные данные и подозрительные URL. Также обнаруживает неизвестные типы чанков, аномалии в канале LSB и необычно высокую энтропию пикселей |
| Метаданные файлов | Определение магических байт исполняемых файлов (.exe, .elf, .dylib), двойные расширения (например, photo.png.js), подозрительные имена файлов (keylog, miner, wallet) |
| Полиглот-файлы | Файлы, которые одновременно являются валидными в двух форматах (например, HTML + ZIP) |
| Трюки с ZIP | Записи с обходом пути (path traversal), нулевые байты в именах файлов, дублирующиеся записи, которые могут обмануть парсеры, ZIP-комментарии с полезной нагрузкой |
| Удаленный код | Фоновые страницы или сервис-воркеры, загружаемые с удаленных URL |
| Высокая энтропия | Файлы или строковые литералы с подозрительно высокой энтропией (вероятно, зашифрованные или сжатые полезные нагрузки) |
| Злоупотребление API | Вызовы API расширений браузера, указывающие на кражу данных или эксфильтрацию: cookies.getAll({}), tabs.query({}), history.search, клавиатурные слушатели, чтение буфера обмена, scripting.executeScript с динамической функцией. Повышается до CRITICAL, когда вызов сбора данных сочетается с исходящей сетевой отправкой в одном файле. |
| Скрытые элементы | Динамически созданные невидимые iframe (display:none, нулевые размеры), внедренные в DOM — тихие партнерские пинги или каналы C2. Отслеживающие пиксели через new Image().src, указывающие на внешние URL. |
| Бомба замедленного действия | setTimeout/setInterval с задержками ≥ 5 минут; арифметические ворота Date.now(); проверки даты установки через localStorage, активирующие поведение через несколько дней после первого запуска; пороговые ворота Math.random(), срабатывающие только на доле загрузок страниц. |
| Анти-анализ | Проверки navigator.webdriver; сравнения нулевой ширины/высоты окна; голые операторы debugger; арифметика performance.now(), используемая для обнаружения песочницы по времени. |
CRITICAL — Почти наверняка вредоносное; требуется немедленное расследованиеHIGH — Сильно подозрительно; требует тщательной проверкиMEDIUM — Потенциально рискованно; проверять в контекстеLOW — Незначительное беспокойство; информационноINFO — Метаданные (хэш, размер файла и т.д.)python3.11, python3.12 или python3.13**python3-venv** — Требуется при использовании виртуальных окруженийИспользование виртуальных окружений:
sudo apt install python3 python3-venv
git clone https://github.com/ernos/extension-scanner.git
cd extension-scanner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
**python3-numpy** — Рекомендуется для стеганографии, системная установка (иначе pip install -r requirements.txt)git clone https://github.com/ernos/extension-scanner.git
cd extension-scanner
chmod +x extension-scanner.py
mkdir -p ~/.local/share/bin
ln -s $PWD/extension-scanner.py ~/.local/share/bin/extension-scanner
# Требуется для анализа стеганографии LSB (необязательно, но рекомендуется)
pip install pillow numpy
# ВАРИАНТ 1. Только для текущего пользователя:
# Включить автодополнение bash для удобства (TAB для автодополнения команд)
mkdir -p ~/.local/share/bash-completion/completions
cp extension-scanner-completions ~/.local/share/bash-completion/completions
echo "source ~/.local/share/bash-completion/completions/extension-scanner-completions" >> ~/.bashrc
# ВАРИАНТ 2. Включить автодополнение глобально для всех пользователей (должно автоматически загружаться из вашего .bashrc)
cp extension-scanner-completions /usr/share/bash-completion/completions
Если Pillow/NumPy не установлены, инструмент всё равно работает — проверки LSB и энтропии пикселей просто пропускаются, выводится предупреждение.
usage: xpiscanner [-h] [--update-blocklist] [--min-severity {CRITICAL,HIGH,MEDIUM,LOW,INFO}] [--json] [--compact] [-v] [-m] [--scans CHECK [CHECK ...]]
[targets ...]
Firefox Extension Scanner - Сканирует XPI-файлы на наличие рисков безопасности и индикаторов вредоносного ПО
positional arguments:
targets Один или несколько XPI-файлов или каталогов, содержащих XPI для анализа