
Обнаружения CVE-2021-44228 внутри вложенных бинарных файлов
Этот репозиторий содержит набор YARA-правил для обнаружения версий Log4j, уязвимых для CVE-2021-44228, CVE-2021-45046 и/или CVE-2021-45105, путем поиска ряда признаков, присутствующих в затронутых версиях.
Этот инструмент рекурсивно работает с бинарными файлами, такими как образы Docker, системные пакеты, образы файловых систем и даже установочные носители. Полный список поддерживаемых форматов файлов см. в разделе «Как это работает?».
JndiManager (< 2.15.0).Interpolator, не импортирующие JndiManager (< 2.16.0).AbstractConfiguration, не импортирующие ConfigurationStrSubstitutor (< 2.17.0).Хотя существует ряд ресурсов для обнаружения небезопасного использования Log4j с помощью CodeQL или Semgrep, на данный момент нет доступных ресурсов для обнаружения потенциально уязвимых версий Log4j внутри бинарных артефактов.
Это создает проблему для организаций, использующих корпоративные приложения, которые не были разработаны внутри компании или исходный код которых недоступен командам, проводящим первичную проверку.
Поскольку данная уязвимость, скорее всего, будет обнаружена в различных «неожиданных» местах, этот инструмент предназначен для помощи в обнаружении уязвимых версий Log4j внутри скомпилированных артефактов, которые затем могут быть вручную проверены для определения возможности эксплуатации.
Обфусцированный код приведет к ложноотрицательным результатам, когда потенциально уязвимый виджет не может быть обнаружен из-за использования обфускации.
Чтобы запустить этот инструмент, клонируйте репозиторий и выполните следующие шаги. Предполагается, что Docker и jq установлены.
artifacts/./quickstart.sh)В качестве альтернативы запуск можно настроить с помощью следующей команды:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
Если вы хотите искать только CVE-2021-44228, можно использовать следующую команду:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
Если вы хотите искать только CVE-2021-45046, можно использовать следующую команду:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
Если вы хотите искать только CVE-2021-45105, можно использовать следующую команду:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
Этот инструмент также можно запускать без Docker. Инструкции по установке STACS без Docker см. в разделе STACS.
Чтобы просканировать образ Docker, его сначала необходимо экспортировать в каталог артефактов для сканирования. Это можно сделать с помощью следующей команды:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
В качестве альтернативы можно экспортировать работающий контейнер, используя просто:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Вам необходимо исследовать использование log4j в приложении, чтобы понять, уязвим ли продукт. Если это невозможно из-за отсутствия доступа к исходному коду или по другим причинам, вам следует проверить, публиковал ли поставщик какие-либо рекомендации по этому вопросу.
Нет никакой гарантии, что включение уязвимой версии log4j означает, что продукт уязвим!
Если вы не можете найти никаких рекомендаций, обратитесь к поставщику и спросите его о влиянии этой уязвимости на продукт.
Также ознакомьтесь с мерами по смягчению последствий, опубликованными проектом log4j. В качестве альтернативы и предпочтительного варианта обновитесь до незатронутой версии Log4j.
Хотя этот инструмент не предназначен для этой цели, он использует движок STACS для массовой декомпозиции и анализа бинарных файлов.
STACS — это статический сканер учетных данных на основе YARA, который поддерживает бинарные форматы файлов, анализ вложенных архивов, настраиваемые наборы правил и списки игнорирования, а также отчеты в формате SARIF.
В качестве примера этот инструмент может анализировать tar-архив, содержащий экспортированный образ Docker, в котором где-то в файловой системе находится JAR-файл, затронутый этой уязвимостью.
Он также может анализировать вложенные tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso и т. д.
Пожалуйста, откройте Issue на GitHub с описанием проблемы и, по возможности, ссылкой на затронутый бинарный артефакт.
Запросы на вытягивание (Pull requests) для корректировки наборов правил также будут весьма признательны!
См. каталог validation/ для набора файлов журналов проверки этого набора правил.