
The Web Exploit Detector — это приложение на Node.js, используемое для обнаружения возможных заражений, вредоносного кода и подозрительных файлов в средах веб-хостинга.

Детектор веб-эксплойтов — это приложение на Node.js (и NPM-модуль), используемое для обнаружения возможных заражений, вредоносного кода и подозрительных файлов в средах веб-хостинга. Это приложение предназначено для запуска на веб-серверах, обслуживающих один или несколько сайтов. Запуск приложения генерирует список файлов, которые потенциально заражены, вместе с описанием заражения и ссылками на онлайн-ресурсы, связанные с ним.
Начиная с версии 1.1.0 в приложение также включены утилиты для создания и сравнения снимков структуры каталогов, что позволяет пользователям видеть, были ли файлы изменены, добавлены или удалены.
Приложение размещено здесь, на GitHub, чтобы другие могли извлечь из него пользу, а также чтобы другие могли внести свои собственные правила обнаружения.
Самый простой способ установить Web Exploit Detector — установить его как глобальный NPM-модуль:
npm install -g web_exploit_detector
Если вы используете Linux или другую Unix-подобную ОС, возможно, вам потребуется выполнить эту команду от root (например, sudo npm install -g web_exploit_detector).
Модуль следует регулярно обновлять, чтобы все новейшие правила обнаружения были на месте. Запуск вышеуказанной команды всегда загружает последнюю стабильную (протестированную) версию. Чтобы обновить уже установленную версию, просто выполните следующее:
npm update -g web_exploit_detector
Опять же, возможно, вам придётся использовать команду sudo, как указано выше.
Вы также можете клонировать Git-репозиторий и запустить скрипт напрямую, следующим образом:
git clone https://github.com/polaris64/web_exploit_detectorcd web_exploit_detectornpm installЕсли вы установили Web Exploit Detector как NPM-модуль (см. выше), то запуск сканера осуществляется простой командой с указанием пути к вашему веб-руту (расположению файлов вашего сайта):
wed-scanner --webroot=/var/www/html
Доступны и другие параметры командной строки — просто выполните wed-scanner --help, чтобы увидеть сообщение справки с их описанием.
Запуск скрипта таким образом выводит удобочитаемый результат в консоль. Это очень полезно, например, при запуске скрипта через cron, так как вывод можно отправлять по электронной почте при каждом выполнении скрипта.
Скрипт также поддерживает запись результатов в более удобный для машинной обработки формат JSON. Чтобы включить этот вывод, используйте аргумент командной строки --output.
Просто вызовите скрипт через node и укажите путь к вашему веб-руту следующим образом:
node index.js --webroot=/var/www/html
Web Exploit Detector также включает две утилиты, помогающие выявить файлы, которые могли неожиданно измениться. Успешная атака на сайт обычно включает удаление файлов, добавление новых или изменение существующих файлов тем или иным способом.
Снимок (как он используется в этих утилитах) — это JSON-файл, который перечисляет все файлы, а также содержит описание их содержимого на момент создания снимка. Если снимок был создан, например, в понедельник, а затем сайт был атакован во вторник, то последующее сравнение этого снимка с текущими файлами сайта покажет, что один или несколько файлов были добавлены, удалены или изменены. Таким образом, цель этих утилит — позволить создавать эти снимки и выполнять сравнения при необходимости.
Снимок хранит путь к каждому файлу вместе с SHA-256 хешем содержимого файла. Хеш, или дайджест, — это краткое представление сообщения, которым в данном случае является содержимое файла. Если содержимое файла изменяется, даже совсем незначительно, хеш становится полностью другим. Это хороший способ обнаружения любых изменений содержимого файла.
Следующие две утилиты также устанавливаются как часть Web Exploit Detector:
wed-generate-snapshot: эта утилита позволяет создать снимок для всех файлов (рекурсивно) в каталоге, указанном с помощью --webroot. Снимок будет сохранён в файл, указанный в опции --output.wed-compare-snapshot: после создания снимка его можно сравнить с текущим содержимым того же каталога. Снимок для проверки указывается с помощью опции --snapshot. Базовый каталог для проверки хранится внутри снимка, но если базовый каталог изменился с момента создания снимка, можно использовать опцию --webroot.Снимки можно создавать так часто, как это необходимо, но, как правило, их следует создавать, когда сайт находится в чистом (не заражённом) состоянии и когда были внесены легитимные изменения. Для сайтов на CMS, таких как WordPress, снимки следует создавать регулярно, так как новые загрузки приведут к тому, что новое состояние будет отличаться от сохранённого снимка. Для сайтов, файлы которых никогда не должны меняться, можно создать один снимок и затем использовать его бессрочно, чтобы убедиться, что на самом деле ничего не меняется.
Скрипт src/web-exploit-detector.js является ES6-модулем, который экспортирует набор правил как rules, а также ряд функций:
executeTests(settings): выполняет проверку эксплойтов на основе переданного объекта settings. Использование — смотрите в скрипте index.js.formatResult(result): принимает один результат теста result из массива, возвращённого executeTests(), и генерирует строку с результатами, готовую к выводу для этого теста.getFileList(path): возвращает массив файлов из базового пути path, используя readDirRecursive().processRulesOnFile(file, rules): обрабатывает все правила из массива rules для одного файла file (строковый путь).readDirRecursive(path): рекурсивная функция, которая возвращает Promise, разрешаемый массивом всех файлов в path и подкаталогах.Скрипт src/cli.js — это простой интерфейс командной строки (CLI) к этому модулю, используемый скриптом wed-scanner, поэтому его чтение покажет один из способов использования этого модуля.
Проект использует Babel для компиляции ES6-модулей из "src" в обычные JavaScript-модули в "lib". Если вы используете старую версию Node.js, модули можно подключать через require() из каталога "lib".
Пакет содержит Babel в качестве dev-зависимости и скрипты "build" и "watch:build". При выполнении скрипта "build" (npm run build) ES6-модули из "./src" будут скомпилированы и сохранены в "./lib", откуда они подключаются скриптами CLI.
Каталог "./lib" включён в репозиторий, чтобы любой пользователь мог клонировать репозиторий и запустить приложение напрямую, без необходимости устанавливать dev-зависимости и собирать приложение.
Иногда правила, особенно помеченные тегом suspicion, могут опознать чистый файл как потенциальный эксплойт. Поэтому реализована система, позволяющая исключать файлы из проверки для определённого правила.