
Erkennungen für CVE-2021-44228 in verschachtelten Binärdateien
Dieses Repository enthält eine Reihe von YARA-Regeln zur Erkennung von log4j-Versionen, die anfällig für CVE-2021-44228, CVE-2021-45046 und/oder CVE-2021-45105 sind, indem nach einer Reihe von Merkmalen gesucht wird, die in betroffenen Versionen vorkommen.
Dieses Tool arbeitet rekursiv auf Binärdateien wie Docker-Images, Systempaketen, Dateisystem-Images und sogar Installationsmedien. Eine vollständige Liste der unterstützten Dateiformate finden Sie im Abschnitt „Wie funktioniert es?“.
JndiManager-Konstruktors (< 2.15.0).Interpolator-Klassen, die JndiManager nicht importieren (< 2.16.0).AbstractConfiguration-Klassen, die ConfigurationStrSubstitutor nicht importieren (< 2.17.0).Obwohl es eine Reihe von Ressourcen gibt, um unsichere Verwendung von log4j mit CodeQL oder Semgrep zu erkennen, wurden bisher keine Ressourcen zur Erkennung potenziell anfälliger log4j-Versionen in Binärartefakten bereitgestellt.
Dies stellt eine Herausforderung für Organisationen dar, die Unternehmensanwendungen betreiben, die nicht intern entwickelt wurden oder deren Quellcode den Teams, die die erste Sichtung durchführen, nicht sofort zur Verfügung steht.
Da diese Sicherheitslücke wahrscheinlich an verschiedenen „unerwarteten“ Stellen auftauchen wird, soll dieses Tool dabei helfen, anfällige Versionen von log4j in kompilierten Artefakten zu erkennen, die dann manuell überprüft werden können, um die Ausnutzbarkeit zu bestimmen.
Verschleierter Code führt zu falsch negativen Ergebnissen, bei denen ein potenziell anfälliges Widget aufgrund der Verwendung von Verschleierung nicht erkannt werden kann.
Um dieses Tool auszuführen, klonen Sie dieses Repository und befolgen Sie die folgenden Schritte. Es wird vorausgesetzt, dass Docker und jq installiert sind.
artifacts/ ein../quickstart.sh).Alternativ kann der Durchlauf mit folgendem Befehl angepasst werden:
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"
Wenn Sie nur nach CVE-2021-44228 suchen möchten, kann der folgende Befehl verwendet werden:
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"
Wenn Sie nur nach CVE-2021-45046 suchen möchten, kann der folgende Befehl verwendet werden:
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"
Wenn Sie nur nach CVE-2021-45105 suchen möchten, kann der folgende Befehl verwendet werden:
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"
Dieses Tool kann auch ohne Docker ausgeführt werden. Bitte beachten Sie die STACS-Installationsanleitung, um STACS ohne Docker zu installieren.
Um ein Docker-Image zu scannen, muss es zunächst in das Verzeichnis artifacts/ zum Scannen exportiert werden. Dies kann mit dem folgenden Befehl erfolgen:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
Alternativ kann ein laufender Container einfach exportiert werden mit:
# Ersetzen Sie CONTAINER_ID durch die korrekte Container-ID.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Sie müssen die Verwendung von log4j in der Anwendung untersuchen, um zu verstehen, ob das Produkt anfällig ist. Wenn dies nicht möglich ist, z. B. wegen fehlendem Zugriff auf den Quellcode, sollten Sie prüfen, ob der Anbieter entsprechende Sicherheitshinweise veröffentlicht hat.
Es gibt keine Garantie, dass die Einbindung einer anfälligen Version von log4j bedeutet, dass das Produkt anfällig ist!
Wenn Sie keine Sicherheitshinweise finden, wenden Sie sich an den Anbieter, um ihn nach den Auswirkungen dieser Sicherheitslücke auf das Produkt zu fragen.
Konsultieren Sie auch die vom log4j-Projekt veröffentlichten Maßnahmen zur Schadensbegrenzung. Alternativ und vorzugsweise aktualisieren Sie auf eine nicht betroffene Version von log4j.
Obwohl nicht für diesen Zweck entwickelt, verwendet dieses Tool die STACS-Engine zur massenhaften Binär-Zerlegung und -Analyse.
STACS ist ein YARA-basierter statischer Credential-Scanner, der binäre Dateiformate, Analyse von verschachtelten Archiven, zusammensetzbare Regelsätze und Ignorierlisten sowie SARIF-Berichte unterstützt.
Als Beispiel kann dieses Tool ein Tarball analysieren, das ein exportiertes Docker-Image enthält, das wiederum ein JAR irgendwo im Dateisystem enthält, das von dieser Sicherheitslücke betroffen ist.
Sie kann auch verschachtelte tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso usw. analysieren.
Bitte öffnen Sie ein Github-Issue, das das Problem beschreibt und – sofern möglich – auf das betroffene Binärartefakt verweist.
Pull Requests zur Anpassung der Regelsätze wären ebenfalls sehr willkommen!
Im Verzeichnis validation/ finden Sie eine Reihe von Logdateien zur Validierung dieses Regelsatzes.