AWS WAF-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie die AWS-WAF-Logs (Web Application Firewall) erfassen, indem Sie einen Google Security Operations-Feed einrichten. Der Parser wandelt Roh-JSON-Logs in ein strukturiertes Format um, das dem Google SecOps-UDM entspricht. Es werden Felder wie IP-Adressen, URLs, User-Agents und Details zu Sicherheitsregeln extrahiert und entsprechenden UDM-Feldern zugeordnet, um eine einheitliche Darstellung und Analyse zu ermöglichen.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen erhöhte Zugriffsrechte für AWS.

Amazon S3-Bucket konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen
  2. Speichern Sie den Namen und die Region des Buckets für später.
  3. Erstellen Sie einen Nutzer gemäß der Anleitung IAM-Nutzer erstellen.
  4. Wählen Sie den erstellten Nutzer aus.
  5. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  6. Klicken Sie im Bereich Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
  7. Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
  8. Klicken Sie auf Weiter.
  9. Optional: Fügen Sie ein „description“-Tag hinzu.
  10. Klicken Sie auf Zugriffsschlüssel erstellen.
  11. Klicken Sie auf CSV-Datei herunterladen, um den Zugriffsschlüssel und den Secret Access Key zur späteren Verwendung zu speichern.
  12. Klicken Sie auf Fertig.
  13. Wählen Sie den Tab Berechtigungen aus.
  14. Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
  15. Wählen Sie Berechtigungen hinzufügen aus.
  16. Wählen Sie Richtlinien direkt anhängen aus.
  17. Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
  18. Klicken Sie auf Weiter.
  19. Klicken Sie auf Berechtigungen hinzufügen.

WAF-Web-ACL (Access Control List) erstellen

Wenn Sie AWS WAF noch nicht eingerichtet haben, müssen Sie eine WAF-Web-ACL (Access Control List) erstellen. Bei bestehenden Konfigurationen können Sie mit dem nächsten Schritt fortfahren.

  1. Suchen Sie in der AWS-Konsole nach AWS WAF & Shield und wählen Sie diese Option aus.
  2. Klicken Sie auf Web-ACL erstellen.
  3. Geben Sie die folgenden Einstellungen an:
    • Name: Geben Sie der ACL einen Namen, z. B. my-waf-web-acl.
    • Region: Wählen Sie die Region aus, in der die WAF angewendet werden soll.
    • CloudWatch-Messwerte: Aktivieren Sie die Messwerterfassung, um die Aktivität und die ausgelösten Regeln zu erfassen.
  4. Wählen Sie nach dem Erstellen die Web-ACL aus, für die Sie die Protokollierung aktivieren möchten.

AWS WAF-Logging konfigurieren

  1. Rufen Sie in der AWS WAF Console den Tab Logging Ihrer Web-ACL auf.
  2. Klicken Sie auf Logging aktivieren.
  3. Wählen Sie Amazon S3 als Ziel für Ihre Protokolle aus.
  4. Wählen Sie den zuvor erstellten S3-Bucket aus, um die Protokolle darin zu speichern.
  5. Optional: Konfigurieren Sie ein Log-Präfix zum Organisieren der Protokolle (z. B. waf-logs/).
  6. Klicken Sie auf Speichern.

Berechtigungen für den S3-Bucket prüfen

Der S3-Bucket muss die richtigen Berechtigungen für AWS WAF zum Schreiben von Protokollen haben.

  1. Rufen Sie die S3 Console auf.
  2. Wählen Sie den Bucket aus, in dem die Protokolle gespeichert werden sollen.
  3. Fügen Sie auf dem Tab Berechtigungen die folgende Bucket-Richtlinie hinzu, damit AWS WAF Protokolle schreiben kann:

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. Klicken Sie auf Speichern.

Feed in Google SecOps für die Aufnahme der AWS WAF-Logs konfigurieren

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. AWS WAF-Protokolle.
  4. Wählen Sie als Quelltyp Amazon S3 aus.
  5. Wählen Sie AWS WAF als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Region: die Region, in der sich der Amazon S3-Bucket befindet.
    • S3-URI: der Bucket-URI.
      • s3://your-log-bucket-name/waf-logs/
        • Dabei gilt:
          • your-log-bucket-name: der tatsächliche Name des Buckets.
    • URI ist ein: Wählen Sie Verzeichnis oder Verzeichnis mit Unterverzeichnissen aus.
    • Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.
    • Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
    • Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
    • Asset-Namespace: der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
  8. Klicken Sie auf Weiter.

  9. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Aktion security_result.action Wenn die Aktion „ALLOW“ (Zulassen) ist, setzen Sie „security_result.action“ auf „ALLOW“ und „security_result.severity“ auf „INFORMATIONAL“. Wenn „action“ auf „BLOCK“ gesetzt ist, setzen Sie „security_result.action“ auf „BLOCK“. Wenn „action“ „CAPTCHA“ ist und „captchaResponse.responseCode“ den Wert „405“ hat, setze „security_result.action“ auf „BLOCK“ und „security_result.action_details“ auf „CAPTCHA {captchaResponse.failureReason}“.
captchaResponse.failureReason security_result.action_details Wird in Verbindung mit „action“ und „captchaResponse.responseCode“ verwendet, um „security_result.action_details“ zu bestimmen.
captchaResponse.responseCode security_result.action_details Wird in Verbindung mit „action“ und „captchaResponse.failureReason“ verwendet, um „security_result.action_details“ zu bestimmen.
httpRequest.clientIp principal.ip, principal.asset.ip Direkt principal.ip und principal.asset.ip zugeordnet.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid Durchläuft jeden Header in httpRequest.headers. Wenn der Headername „host“ oder „Host“ lautet, wird der Wert den Ziel-Hostnamen und dem Ziel-Asset-Hostnamen zugeordnet. Wenn der Headername „User-Agent“ oder „user-agent“ lautet, wird der Wert dem Attribut „network.http.user_agent“ zugeordnet und in „network.http.parsed_user_agent“ analysiert. Wenn der Headername „Referer“ oder „referer“ lautet, wird der Wert network.http.referral_url zugeordnet. Wenn der Headername „(?i)time-zone“ lautet, wird der Wert „target.location.country_or_region“ zugeordnet. Wenn der Headername „authorization“ lautet, wird der Wert decodiert, der Nutzername extrahiert und target.user.userid zugeordnet. Alle anderen Header werden als Schlüssel/Wert-Paare zu „target.resource.attribute.labels“ hinzugefügt.
httpRequest.httpMethod network.http.method Wird direkt auf network.http.method zugeordnet.
httpRequest.requestId network.session_id Wird direkt mit „network.session_id“ abgeglichen.
httpRequest.uri target.url Direkt auf „target.url“ zugeordnet.
httpSourceId target.resource.name Wird direkt auf „target.resource.name“ zugeordnet.
httpSourceName metadata.product_event_type Wird direkt mit „metadata.product_event_type“ abgeglichen.
Labels security_result.rule_labels Durchläuft jedes Label in „labels“. Wenn der Labelname nicht leer ist, wird er als Schlüssel/Wert-Paar zu „security_result.rule_labels“ hinzugefügt.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels Durchläuft jede Regel in „nonTerminatingMatchingRules“. Wenn die Aktion „ALLOW“ (Zulassen) und die Regelaktion „CAPTCHA“ ist, legen Sie „security_result.action_details“ auf „CAPTCHA SUCCESSFUL“ (CAPTCHA SUCCESSFUL) fest und fügen Sie security_result.rule_labels die Regel-ID mit dem Schlüssel „nonTerminatingCaptchaRuleName“ hinzu. Wenn die Aktion „BLOCK“ oder „ALLOW“ ist und die Regelaktion „COUNT“ lautet, legen Sie „COUNT RULE“ als Wert für „security_result.action_details“ fest und fügen Sie der Regel-ID „security_result.rule_labels“ den Schlüssel „nonTerminatingCountRuleName“ hinzu. Wenn die Aktion „BLOCK“ oder „ALLOW“ ist und die Regelaktion „CHALLENGE“ lautet, legen Sie für „security_result.action_details“ den Wert „COUNT RULE“ fest und fügen Sie der Regel-ID in „security_result.rule_labels“ den Schlüssel „nonTerminatingChallengeRuleName“ hinzu.
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description Wenn „terminatingRuleType“ auf „RATE_BASED“ gesetzt ist, wird jede Regel in „rateBasedRuleList“ durchgegangen. Wenn „terminatingRuleId“ mit dem Regelnamen übereinstimmt, werden die Regel-ID, der Regelname und die Beschreibung den Variablen „security_result.rule_id“, „security_result.rule_name“ und „security_result.description“ zugeordnet.
responseCodeSent network.http.response_code Wird direkt auf „network.http.response_code“ zugeordnet und in eine Ganzzahl umgewandelt.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields Durchläuft jede Regelgruppe in „ruleGroupList“. Die Regelgruppen-ID wird als Schlüssel/Wert-Paar zu „intermediary.labels“ hinzugefügt. Wenn „terminatingRuleType“ „MANAGED_RULE_GROUP“ ist und „terminatingRuleId“ mit der Regelgruppen-ID übereinstimmt, werden die Regel-ID, der Regelname und die Regelbeschreibung den Variablen „security_result.rule_id“, „security_result.rule_name“ und „security_result.description“ zugeordnet. Wenn „terminatingRuleType“ „GROUP“ ist, wird die ID der Endregel extrahiert und security_result.rule_name und security_result.description zugeordnet. Die ID der Endregelgruppe wird security_result.rule_labels mit dem Schlüssel „terminatingRuleGroupName“ hinzugefügt. Wenn „terminatingRuleType“ den Wert „REGULAR“ hat, wird die Aktion der Endregel extrahiert und den Feldern von „security_result.detection“ mit dem Schlüssel „terminatingRuleAction{index}" hinzugefügt.
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description Wenn „terminatingRuleType“ den Werten „RATE_BASED“, „MANAGED_RULE_GROUP“ oder „REGULAR“ entspricht, wird „terminatingRuleId“ den Werten „security_result.rule_id“ und „security_result.rule_name“ zugeordnet und verwendet, um „security_result.description“ zu erstellen.
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields Durchläuft alle Übereinstimmungen in „terminatingRuleMatchDetails“. Legt „security_result.description“ auf „Terminating Rule“ fest. Wenn der Bedingungstyp nicht leer ist, wird er zu „security_result.category_details“ hinzugefügt. Wenn der Standort nicht leer ist, wird er security_result.detection_fields mit dem Schlüssel „location“ hinzugefügt. Für jedes übereinstimmende Datenelement wird es mit dem Schlüssel „matchedData“ zu „security_result.detection_fields“ hinzugefügt.
terminatingRuleType security_result.rule_type Wird direkt security_result.rule_type zugeordnet.
timestamp metadata.event_timestamp In einen Zeitstempel umgewandelt und mit „metadata.event_timestamp“ verknüpft.
webaclId intermediary.resource.name Wird direkt mit „intermediary.resource.name“ abgeglichen.
metadata.vendor_name Legen Sie diesen Wert auf „AMAZON“ fest.
metadata.product_name Legen Sie „AWS Web Application Firewall“ fest.
metadata.log_type Legen Sie diesen Wert auf „AWS_WAF“ fest.
network.application_protocol Legen Sie diesen Wert auf „HTTP“ fest.
metadata.event_type Legen Sie „NETWORK_HTTP“ fest, wenn httpRequest.headers den Header „host“ oder „Host“ enthält. Andernfalls setzen Sie „STATUS_UPDATE“.

Änderungen

2024-03-14

  • Die Verarbeitung ungültiger Escape-Zeichen in Protokollmeldungen wurde verbessert, um eine korrekte JSON-Formatierung zu gewährleisten.

2023-12-29

  • Die Zuordnung von „user-agent“-Informationen zum entsprechenden UDM-Feld wurde standardisiert.
  • Nutzer-IDs aus dem „Authorization“-Header in HTTP-Anfragen extrahiert.

2023-12-08

  • Mehrere Fehler im Zusammenhang mit der Hostnamenzuordnung, der Extraktion der Ziel-URL und der Regelverarbeitung wurden behoben.
  • Die Fehlerbehandlung in bestimmten Bereichen des Parsers wurde verbessert.

2023-12-11

  • Durch ein neues Grok-Muster wurde die Unterstützung für ein neues Protokollformat hinzugefügt.

2023-08-16

  • Die Zuordnung von Sicherheitsregelaktionen zum UDM-Feld für Erkennungsfelder wurde verbessert.

2022-12-16

  • Die Logik für die Datumsfilterung wurde optimiert und die Verarbeitung ungültiger JSON-Daten verbessert.
  • User-Agent-Informationen aus HTTP-Headern, die einem speziellen UDM-Feld zugeordnet sind.

2022-12-11

  • Unnötige Logik für die Verarbeitung von CSV- und SYSLOG-Nachrichtenprotokollen entfernt

2022-07-22

  • Dies war die erste Erstellung des Parsers.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten