Der Zero-Day-Exploit Log4Shell gefährdet zahlreiche Server in Unternehmen. Das Bundesamt für Sicherheit in der Informationstechnik (BSI) warnt, dass die kritische Schwachstelle in der weit verbreiteten Java-Bibliothek Log4j zu einer extrem kritischen Bedrohungslage führe. Mit Checkmk können Systemadministratoren automatisch gefährdete Systeme in ihrer IT-Infrastruktur identifizieren und Gegenmaßnahmen treffen.

Mit Log4Shell ist seit letzten Freitag eine neue Zero-Day-Schwachstelle bekannt geworden, die zahlreiche Server gefährdet. Der Exploit ermöglicht es, einen Fehler in der beliebten Java-Bibliothek Log4j auszunutzen und eine Shell auf einem Server zu erhalten. Dadurch lässt sich auf dem Server beliebiger Code ausführen und das System kompromittieren.

Für Systemadministratoren ist es daher besonders wichtig, jetzt sämtliche Systeme in ihrer IT-Infrastruktur identifizieren zu können, die Log4j verwenden. Nur so lassen sich die Systeme vor einer Kompromittierung schützen und Sicherheitsmaßnahmen einleiten, wie das Einspielen von Sicherheits-Updates. Mit Checkmk sind Sie in der Lage, diese Systeme in Ihrer IT-Infrastruktur automatisiert zu identifizieren.

Erweitern Sie Ihr Checkmk um einen Service zur Identifizierung von Log4j2-Modulen

Dies ist dank der schnellen Erweiterbarkeit von Checkmk möglich. So ist die Monitoring-Software in der Lage, mit einem lokalen Check, das Filesystem auf einem Server gezielt nach den betroffenen Log4j2-Modulen zu suchen. Die lokalen Checks in Checkmk erlauben es Ihnen, schnell und einfach eigene Services für Ihr Monitoring zu erstellen. Diese kleinen Skripte können Sie anschließend auf die entsprechenden Hosts verteilen und erhalten so einen Überblick über alle Server, auf denen Log4j2-Bibliotheken installiert sind.

Update vom 20. Dezember:

In der Zwischenzeit hat die Checkmk Community ein ausgekügeltes Plugin entwickelt, das Sie als Erweiterungspaket für Ihr Monitoring installieren können. Das Plugin hilft Ihnen, alle System in Ihrer IT-Infrastruktur zu erkennen, die von dem Log4j-Exploit betroffen sind. Alle Informationen zum Plugin finden Sie weiter unten.

Update vom 27. Januar:

Wir haben auch ein kurzes Video über das Plugin erstellt, indem wir darüber sprechen, wie es dabei hilft, von der Schwachstelle betroffene Dateien zu finden. Außerdem zeigen Mathias und Robin, wie man das Plugin in Checkmk konfiguriert:

Schwachstellen-Scanner und Abwehr-Patch für Log4j2

Die Checkmk Community hat sehr schnell auf den Zero-Day-Exploit reagiert und nach kurzer Zeit die ersten eigenen Skripte für Checkmk im Forum geteilt, um von Log4Shell betroffene Log4j2-Module in der eigenen IT-Infrastruktur aufspüren zu können. Forumnutzer Doc hat zum Beispiel basierend auf log4j2-scan ein Kommandozeilen-Tool für das Scannen nach  CVE-2021-44228-Schwachstellen programmiert. Das Skript lässt sich als lokaler Check auf Linux-Servern ausführen.

#!/bin/bash

# Christian Wirtz, 2021-12-15
# Wrapper around:
# https://github.com/logpresso/CVE-2021-44228-Scanner
# for checkmk usage - used Logpresso CVE-2021-44228 Vulnerability Scanner 1.6.2
# https://github.com/logpresso/CVE-2021-44228-Scanner/releases/download/v1.6.2/logpresso-log4j2-scan-1.6.2-linux.tar.gz
# extract this into ../../bin/

DESTPATH="/usr/"
COUNT=0
RESULT=`/usr/lib/check_mk_agent/bin/log4j2-scan $DESTPATH`

FILES_VUL=`echo "$RESULT" | grep "vulnerable files" | grep -v "potentially vulnerable files" | awk '{ print $2 }'`
FILES_POTVUL=`echo "$RESULT" | grep "potentially vulnerable files" | awk '{ print $2 }'`
FILES_MIT=`echo "$RESULT" | grep "mitigated files" | awk '{ print $2 }'`
SCANNED=`echo "$RESULT" | grep "Scanned"`
RUNTIME=`echo "$RESULT" | grep "Completed in" | awk '{ print $3 }'`
SHORT="$FILES_VUL vulnerable files, $FILES_POTVUL potentially vulnerable files, $FILES_MIT mitigated files, $SCANNED, Runtime: $RUNTIME s"

LONG=`echo "$RESULT" | awk 1 ORS='\\\\n'`

# if someone needs the count metric uncomment the next line and delete the following
#PERFDATA="count=$FILES_VUL;1;1|vulnerable=$FILES_VUL;1;1|potential_vulnerable=$FILES_POTVUL;1;1|mitigated=$FILES_MIT;;|real_time=${RUNTIME};;;1;"
PERFDATA="vulnerable=$FILES_VUL;1;1|potential_vulnerable=$FILES_POTVUL;1;1|mitigated=$FILES_MIT;;|real_time=${RUNTIME};;;1;"

echo "P CVE-2021-44228_log4j_$DESTPATH $PERFDATA $SHORT (searchpath: $DESTPATH)\n$LONG"

Bitte denken Sie daran, dass Sie das Skript und die Bins in das richtige Verzeichnis des Monitoring-Agenten auf dem Host ablegen. Die Struktur unter /usr/lib/check_mk_agent/ sollte wie folgt sein:

|-- bin
|   `-- log4j2-scan
`-- local
    `-- 86400
        `-- check_CVE-2021-44228_log4j.sh

Mit dem lokalen Check erkennt Checkmk alle von der Log4Shell-Schwachstelle betroffenen Dateien

CVE-2021-44228_log4j lässt sich einfach als lokaler Check für das Monitoring des jeweiligen Hosts mit Checkmk verwenden. Achten Sie darauf, dass Sie die aktuelle Version der Binaries log4j-scan UND log4j2-scan.exe in den richtigen Ordner eingefügt haben. Beide Binaries finden Sie auf GitHub.

Sie können mit einem lokalen Check auch von der Log4Shell-Schwachstelle betroffene Windows-Server in Ihrer Infrastruktur aufspüren.

Mit beiden Skripts, kann Ihnen Checkmk dabei helfen, sämtliche von der Log4j-Schwachstelle betroffenen System in Ihrer gesamten IT-Infrastruktur aufzuspüren.

Log4Shell-Schwachstelle auf Windows-Servern aufspüren

Basierend auf der Arbeit von Doc, hat thl-cmk das Windows-Skrip auf die aktuelle Version von log4j2-scan.exe (v.1.6.2) angepasst:

<#
 thl-cmk@outlok.com, 2021-12-15
 Wrapper around: https://github.com/logpresso/CVE-2021-44228-Scanner
 for checkmk usage based on the bash script by Christian Wirtz
#>

$RESULT=(C:\ProgramData\checkmk\agent\bin\log4j2-scan.exe --all-drives)
$FILES_VUL=((echo $RESULT | Select-String -Pattern "vulnerable files" | Select-String -Pattern "potentially vulnerable files" -NotMatch | Select-String -Pattern "Fixed" -NotMatch) -split ' ')[1]
$FILES_POTVUL=((echo $RESULT | Select-String -Pattern "potentially vulnerable files") -split ' ')[1]
$FILES_MIT=((echo $RESULT |  Select-String -Pattern "mitigated files") -split ' ')[1]
$SCANNED=(echo $RESULT | Select-String -Pattern "Scanned" | Select-String -Pattern "Running scan" -NotMatch)
$RUNTIME=((echo $RESULT | Select-String -Pattern "Completed in" ) -split ' ')[2]
$DRIVES_SCANNED=((echo $RESULT | Select-String -Pattern "Scanning drives" ) -split ' ')[2]
$SHORT="Files: $FILES_VUL vulnerable, $FILES_POTVUL potentially vulnerable, $FILES_MIT mitigated, $SCANNED, Runtime: $RUNTIME s, drives: $DRIVES_SCANNED"
$PERFDATA="vulnerable=$FILES_VUL;1;1|potential_vulnerable=$FILES_POTVUL;1;1|mitigated=$FILES_MIT;;|real_time=${RUNTIME};;;1;"
$LONG=$RESULT -join "\n"

# if someone needs the count metric uncomment the next line (count and vulnerable metric are identical)
#$PERFDATA="count=$FILES_VUL;1;1|vulnerable=$FILES_VUL;1;1|potential_vulnerable=$FILES_POTVUL;1;1|mitigated=$FILES_MIT;;|real_time=${RUNTIME};;;1;"

echo "P CVE-2021-44228_log4j $PERFDATA $SHORT\n$LONG"

Den lokalen Check für Windows-Plattformen müssen Sie auf dem Ziel-Host im Verzeichnis %ProgramData%\checkmk\agent\local ablegen. Das Binary für das Skript log4j2-scan.exe laden Sie von GitHub herunter und fügen es anschließend im Verzeichnis %ProgramData%\checkmk\agent\bin\ ein. Dann sollte der Check funktionieren.

Schnelle Reaktion auf Log4Shell-Exploit

Der spanische Nutzer a3093 war einer der ersten Mitglieder der Checkmk Community, der ein Skript für Checkmk geschrieben hat, dass nach Log4j2-Modulen in der IT-Infrastruktur sucht. Wenn Sie an der Diskussion interessiert sind, können Sie diese im Checkmk Forum nachlesen. Das Skript scant alle Systeme nach potentiell betroffenen .jar-Dateien.

Eine ausführliche Anleitung, wie Sie lokale Checks auf Ihren Systemen ausrollen, um Log4j2-Module auf ihren Windows-Servern oder Linux-Systemen zu identifizieren, können Sie in unserer Dokumentation detailliert nachlesen.

Checkplugin scannt nach von Loggj-Exploit betroffene Systeme

Aktualisiert am 21.12.2021 um 19 Uhr

Dank der hervorragenden Zusammenarbeit in der Checkmk Community ist aus den oben erwähnten Skripts von Doc und thl_cmk inzwischen ein ausgekügeltes Plugin für Checkmk entstanden. Es rollt nicht nur den CVE-2021-44228-Scanner von Logpresso (Version 2.3.1 für Linux und Windows vom 19.12.2021) aus, sondern berücksichtigt auch die unterschiedlichen Ausgaben, die das Tool seit den neueren Versionen liefert. Auf diese Weise ist es möglich, verwundbare Log4j-Bibliotheken auf Windows- und Linux-Systemen in Ihrer IT-Infrastruktur zu erkennen und die Zeitreihen-Daten für den Service in Checkmk anzupassen.

Das Plugin spürt folgende Log4j-Schwachstellen auf:

Sie können das Plugin als MKP hier herunterladen. Nach dem Download können Nutzer der Checkmk Enterprise Edition es über die Agent Bakery auf den Zielsystem(en) bequem ausrollen. Achtung: Bevor Sie das Paket installieren, müssen Sie alle Älteren Versionen oder die mit diesem Plugin verbundenen lokalen Checks entfernen.

Wenn Sie das Plugin mit der Checkmk Raw Edition verwenden wollen, folgen Sie bitte dieser Anleitung von thl_cmk. Sie erklärt außerdem die Verwendung des Plugins auf AIX/Solaris-Systemen und beinhaltet einige Hilfen bei der Fehlersuche, falls das Plugin nicht funktionieren sollte.

Eine solch flexible Methode in Checkmk zur Verfügung zu haben, ist oft sehr nützlich, besonders wenn es um Sicherheitslücken geht, wie es das Beispiel von Log4j2 zeigt.


Related Articles

Checkmk Benachrichtigungen über Telegram versenden
Checkmk Benachrichtigungen über Telegram versenden
In diesem Artikel erfahren Sie, wie Sie die bekannte Messaging-Plattform Telegram für das Senden von Benachrichtigungen aus Checkmk verwenden können.
Falsch-positive Alarme mit Checkmk minimieren
Falsch-positive Alarme mit Checkmk minimieren
Ein gutes IT-Monitoring steht und fällt mit seiner Präzision. Es muss das IT-Team genau dann benachrichtigen, wenn etwas fehlerhaft ist. Aber wie in…
Die versteckten Kosten von falsch-positiven Alarmen
Die versteckten Kosten von falsch-positiven Alarmen
Der erste Artikel dieser Serie hat erläutert, warum sich die meisten IT-Ops-Teams bei der Alarmierung eher für die vorsichtige Variante entscheiden.…