Beispiel: Log4Shell-Sicherheitslücken erkennen

Sicherheitslücken CVE-2021-44228 und CVE-2021-45046 in den Apache Log4j Bibliotheksversionen 2.0 bis 2.15. Das Apache Log4j-Dienstprogramm wird häufig für Logging-Anfragen verwendet. Diese Sicherheitslücke, auch Log4Shell genannt, kann dazu führen, Apache Log4j-Versionen 2.0 bis 2.15 kompromittiert werden sollte, weil Angreifer beliebigen Code ausführen.

Diese Sicherheitslücke wirkt sich nicht auf Cloud Logging oder die Agents aus, die Logs zum Erfassen von Anwendungen von Drittanbietern bereitstellen. Wenn Sie Log4j 2 verwenden, sind Ihre Dienste jedoch möglicherweise betroffen.

Sie können mit Cloud Logging mögliche Angriffe identifizieren. In diesem Dokument wird Folgendes beschrieben:

  • Fragen Sie Ihre Logs über den Log-Explorer ab, um vorhandene Versuche der Log4j 2-Sicherheitslücke auszunutzen.
  • Prüfen Sie, ob Ihre aktivierten Minderungstechniken wie Google Cloud Armor Sicherheitsrichtlinien und die Zugriffssteuerung für Identity-Aware Proxy richtig konfiguriert und erwartungsgemäß funktionieren, indem sie diese Log4j 2-Exploits blockieren.
  • Erstellen Sie eine Benachrichtigungsrichtlinie, die Sie benachrichtigt, wenn eine mögliche Exploit-Nachricht in Ihre Logs geschrieben wird.

Lesen Sie die Log4j 2-Sicherheitswarnungen von Google Cloud für unsere aktuelle Bewertung der Google Cloud-Produkte und -Dienste. Sie können Ihre Gefährdung anhand des Berichts zu Sicherheitslücken vom National Institute of Standards and Technology (NIST) für CVE-2021-44228 bewerten.

Cloud Logging-Erkennung

Cloud Logging-Abfrageergebnisse enthalten nur Logs, die bereits die in Log-Buckets gespeichert sind und sich auch in den vom Nutzer festgelegten Aufbewahrungsdauer. Während die meisten Google Cloud-Dienste standardmäßig Logs aktiviert haben, sind Logs, die deaktiviert oder ausgeschlossen sind, nicht in den Abfragen enthalten. Wir empfehlen, Logs in Ihrer gesamten Umgebung zu aktivieren, um die Sichtbarkeit der Umgebung zu erweitern.

Wenn Sie einen HTTP(S)-Load-Balancer verwenden, muss Logging aktiviert sein, damit die Anfragelogs in Cloud Logging verfügbar sind. Wenn Sie Webserver wie Apache oder NGINX auf einer VM ausführen, den Ops-Agent oder den Logging-Agent jedoch nicht installiert haben, gelten diese Logs für ist in Cloud Logging nicht zugänglich.

Mit dem Log-Explorer können Sie potenzielle Angriffe auf Ihren Dienst erkennen, die die Log4j 2-Sicherheitslücke ausnutzen. Wenn Sie Cloud Logging verwenden, um Anfragen an Ihren Dienst zu protokollieren, können Sie die httpRequest-Felder mit nutzergenerierten Inhalten auf potenzielle Exploits prüfen.

Die Werte in den Feldern httpRequest können String-Token wie ${jndi:ldap:// enthalten. Es gibt jedoch viele Variationen der Ausnutzung dieser Sicherheitslücke. Es gibt beispielsweise viele Möglichkeiten, Escapezeichen oder Unicode zu verwenden, um die Erkennung zu vermeiden. Die folgenden Strings zeigen einige gängige Beispiele, die auf Explorationsversuche mit Ihrem System hinweisen. Diese Liste ist jedoch nicht vollständig.

${jndi:
$%7Bjndi:
%24%7Bjndi:
${jNdI:ldAp
${jndi:${lower:l}${lower:d}${lower:a}${lower:p}:
${${lower:j}${lower:n}${lower:d}i:
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}:
${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}

Sie können im Log-Explorer Abfragen erstellen, die nach einigen möglichen Exploit-Strings suchen. Die folgende Abfrage versucht beispielsweise, verschiedene verschleierte Varianten des Strings ${jndi: in Feldern des Typs httpRequest in HTTP(S)-Load-Balancer-Anfragelogs abzugleichen. Die in der Abfrage verwendeten regulären Ausdrücke erkennen nicht alle Varianten und können zu falsch positiven Ergebnissen führen:

resource.type="http_load_balancer"
httpRequest.requestUrl=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR
httpRequest.userAgent=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR
httpRequest.referer=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)"

Sie können die vorherige Abfrage verwenden, um Anfragelogs in anderen Diensten zu scannen. Ändern Sie dazu den Wert von resource.type.

Die vorherige Abfrage kann sehr lange dauern, wenn Sie ein großes Logvolumen scannen. Um Ihre Abfragen schneller auszuführen, können Sie indexierte Felder wie resource.type, resource.labels oder logName verwenden, um Ihre Abfrage auf eine Gruppe bestimmter Dienste oder Logstreams zu beschränken.

Die Erkennung übereinstimmender Logeinträge bedeutet nicht, dass der Vorgang erfolgreich manipuliert wurde. Wenn etwas erkannt wird, empfehlen wir, den Reaktionsprozess Ihrer Organisation zu befolgen. Eine Übereinstimmung kann darauf hinweisen, dass jemand versucht, die Sicherheitslücke in Ihrem Projekt oder Ihrer Arbeitslast auszunutzen. Oder es kann ein falsch-positives Ergebnis sein, wenn Ihre Anwendung Muster wie ${jndi: in den HTTP-Anfragefeldern verwendet. Prüfen Sie Ihre Logs darauf, dass dieses Muster nicht Teil des normalen Anwendungsverhaltens ist. Verfeinern Sie die Abfrage so, dass sie für Ihre Umgebung sinnvoll ist.

Nach fehlerhaften IP-Adressen suchen

Wenn Sie übereinstimmende Ergebnisse finden und die Remote-IP-Adressen zusammenfassen möchten, die solche Anfragen senden, fügen Sie das Feld remoteIp dem Bereich Logfelder in den Log-Explorer hinzu. Klicken Sie auf den Feldwert in einem übereinstimmenden Logeintrag und wählen Sie Feld zum Logfeld hinzufügen aus, wie im folgenden Screenshot gezeigt, um das Feld remoteIp hinzuzufügen:

Fügen Sie das Feld "remoteremoteIp" zum Bereich "Logfelder" hinzu, um die IP-Adressen zu ermitteln, die die am besten übereinstimmenden Anfragen senden.

Sie sehen jetzt die Top-Remote-IP-Adressen, die übereinstimmende Anfragen senden im Bereich Logfelder:

Die oberen IP-Adressen zum Entfernen werden im Log-Explorer angezeigt.

Sie erhalten eine Aufschlüsselung, wo diese Log4j 2-Exploit-Scans auf Sicherheitslücken ausgeführt wurden. von denen Sie stammen. Bei einigen dieser Dateien kann es sich um legitime Scans von einer Anwendung handeln. Tool zum Scannen auf Sicherheitslücken, das Sie möglicherweise konfiguriert haben, z. B. Web Security Scanner Wenn Sie Web Security Scanner über Security Command Center verwenden, notieren Sie sich die statischen IP-Adressbereiche, die von Web Security Scanner verwendet werden.

Nach ausgewählten Anwendungen suchen und Techniken zur Schadensbegrenzung überprüfen

Sie können auch die Zielanwendungen aggregieren und ermitteln, dass schädliche Anfragen in Ihren Anwendungen angekommen sind. Wenn Sie mit Sicherheitsrichtlinien von Google Cloud Armor oder der Zugriffssteuerung durch Identity-Aware Proxy (IAP) können Sie auch anhand der in HTTP(S) protokollierten Informationen überprüfen, ob sie wie erwartet funktionieren. Load-Balancer-Logs.

Um die Zielanwendung dem Bereich Logfelder hinzuzufügen, wählen Sie zuerst eine der Logeintragsergebnisse, maximieren Sie resource.labels und klicken Sie auf resource.labels.backend_service_name Feldwert und wählen Sie dann Feld zum Bereich „Logfelder“ hinzufügen aus.

Sie können jetzt Ihre Top-Anwendungen oder Back-End-Dienste sehen, Log4j 2-Exploit-Scans Um festzustellen, ob diese Exploit-Versuche Ihren Back-End-Dienst verwenden, verwenden Sie das vom HTTP(S)-Load-Balancer ausgefüllte Feld jsonPayload.statusDetails, um erfahren, ob die Anfrage an das Back-End weitergeleitet oder erfolgreich blockiert wurde wie IAP oder Google Cloud Armor. Klicken Sie auf jsonPayload.statusDetails. aus dem Ergebnis des Logeintrags und wählen Sie Feld zum Bereich „Logfelder“ hinzufügen aus.

Im Bereich Logfelder wird jetzt eine Aufschlüsselung der Verarbeitung der Anfragen angezeigt:

Die am häufigsten ausgewählten Back-End-Dienste werden in der
Log-Explorer

In diesem Beispiel wurden die meisten Anfragen von IAP blockiert. die bei Aktivierung in einem Backend-Dienst die Identität des Nutzers überprüft und den Kontext verwendet bevor du den Zugriff erlaubst. Bei diesen von IAP blockierten Anfragen ist statusDetails auf handled_by_identity_aware_proxy festgelegt. Zusätzlich (oder alternativ), falls mit Google Cloud Armor mit der richtigen Sicherheitsrichtlinie, die an einen Back-End-Dienst angehängt ist, Für alle von Google Cloud Armor blockierten Anfragen ist statusDetails auf denied_by_security_policy festgelegt. Weitere Informationen zum Anwenden der neuen vorkonfigurierten WAF-Regel cve-canary auf Google Cloud Armor Sicherheitsrichtlinien finden Sie unter Google Cloud Armor-WAF-Regel zum Beheben der Apache Log4j-Sicherheitslücke.

Um nach zulässigen Anfragen zu filtern, die tatsächlich einen Backend-Dienst erreichen, wählen Sie response_sent_by_backend aus. unter statusDetails im Bereich Logfelder. Sie können IAP für diese Back-End-Dienste aktivieren und/oder eine Google Cloud Armor-Sicherheitsrichtlinie mit der vorkonfigurierten cve-canary-WAF-Regel anwenden, um diese Ausnutzungsversuche zu blockieren.

Logbasierte Benachrichtigung erstellen

Nachdem Sie eine Abfrage entwickelt haben, die betroffene Logs in Ihrem Dienst findet, können Sie mit dieser Abfrage eine logbasierte Benachrichtigung erstellen, die Sie benachrichtigt, wenn neue Logeinträge mit der Abfrage übereinstimmen. Diese Benachrichtigung kann an Ihr das Security Operations Center (SOC) des Unternehmens oder eine entsprechende Reaktion auf Vorfälle Team.

Informationen zum Erstellen einer logbasierten Benachrichtigung finden Sie unter Logbasierte Benachrichtigung erstellen (Log-Explorer). Verwenden Sie beim Erstellen der Benachrichtigung Ihre Abfrage für den Exploit-String anstelle der im Beispiel angegebenen Abfrage.

Benachrichtigungsrichtlinie für einen logbasierten Messwert erstellen

Erstellen Sie eine Benachrichtigungsrichtlinie für einen logbasierten Messwert, um zu überwachen, welche Endpunkte oder Dienste mögliche Exploit-Versuche protokollieren:

  1. Logbasierten Messwert zum Zählen der Vorkommen möglicher Exploit-Strings in den Logs erstellen. Sie können beispielsweise die Methode Google Cloud CLI, um einen solchen Messwert zu erstellen:

    gcloud logging metrics create log4j_exploits \
    --description="Detect log4j exploits" \
    --log-filter='httpRequest.requestUrl=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR httpRequest.userAgent=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR httpRequest.referer=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)"'
    

    Weitere Informationen zum Erstellen logbasierter Messwerte finden Sie unter Konfigurieren Sie Zählermesswerte.

  2. Erstellen Sie eine Benachrichtigungsrichtlinie, um Sie zu benachrichtigen, wenn eine ausgewählte Anzahl von Vorkommen erreicht ist. Informationen zum Einrichten einer Benachrichtigungsrichtlinie finden Sie unter Benachrichtigungsrichtlinie für einen Zählermesswert erstellen.

Nächste Schritte