Proofpoint Emerging Threats Pro-IOC-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Proofpoint Emerging Threats Pro IOC-Logs mit Amazon S3 in Google Security Operations aufnehmen. Emerging Threats Intelligence veröffentlicht stündlich Reputationslisten für IPs und Domains im CSV-Format mit Threat Intelligence-Daten, einschließlich Kategorien, Punktzahlen und temporären Informationen. Der Parsercode verarbeitet ET_PRO-Threat-Intelligence-Daten im CSV-Format. Es werden IP-Adressen, Domains, Kategorien, Punktzahlen und andere relevante Informationen extrahiert und sowohl einem standardisierten IOC-Format als auch dem Chronicle UDM-Schema zugeordnet, um sie weiter zu analysieren und in Google SecOps zu verwenden.

Hinweise

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz mit Berechtigungen zum Erstellen von Feeds
  • Proofpoint ET Intelligence-Abo mit Zugriff auf Reputationslisten
  • ET Intelligence-API-Schlüssel von https://etadmin.proofpoint.com/api-access
  • Privilegierter Zugriff auf AWS (S3, IAM, Lambda, EventBridge)

Voraussetzungen für Emerging Threats Pro

  1. Melden Sie sich im ET Intelligence Admin Portal unter https://etadmin.proofpoint.com an.
  2. Rufen Sie API-Zugriff auf.
  3. API-Schlüssel kopieren und speichern
  4. Wenden Sie sich an Ihren Proofpoint-Ansprechpartner, um Folgendes zu erhalten:
    • URL der detaillierten Liste der IP-Reputation
    • URL der detaillierten Liste zur Domain-Reputation

ET Intelligence stellt separate CSV-Dateien für IP- und Domain-Reputationslisten bereit, die stündlich aktualisiert werden. Verwenden Sie das Format „detailed“ (detailliert), das die folgenden Spalten enthält: * Domain list (Domainliste): Domain Name, Category, Score, First Seen, Last Seen, Ports * IP list (IP-Liste): IP Address, Category, Score, First Seen, Last Seen, Ports

AWS S3-Bucket und IAM konfigurieren

S3-Bucket erstellen

  1. Öffnen Sie die Amazon S3-Konsole.
  2. Klicken Sie auf Bucket erstellen.
  3. Bucket-Name: Geben Sie et-pro-ioc-bucket (oder den gewünschten Namen) ein.
  4. Region: Wählen Sie Ihre bevorzugte Region aus.
  5. Klicken Sie auf Bucket erstellen.

IAM-Nutzer für Google SecOps erstellen

  1. IAM-Konsole öffnen
  2. Klicken Sie auf Nutzer > Nutzer erstellen.
  3. Nutzername: Geben Sie secops-reader ein.
  4. Klicken Sie auf Weiter.
  5. Wählen Sie Richtlinien direkt anhängen aus.
  6. Klicken Sie auf Richtlinie erstellen.
  7. Geben Sie im JSON-Editor die folgende Richtlinie ein:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::et-pro-ioc-bucket/et-pro-ioc/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::et-pro-ioc-bucket",
          "Condition": {
            "StringLike": {
              "s3:prefix": ["et-pro-ioc/*"]
            }
          }
        }
      ]
    }
    
  8. Nennen Sie die Richtlinie SecOpsReaderPolicy.

  9. Klicken Sie auf Richtlinie erstellen.

  10. Kehren Sie zur Nutzererstellung zurück und wählen Sie die neu erstellte Richtlinie aus.

  11. Klicken Sie auf Weiter > Nutzer erstellen.

  12. Rufen Sie den Tab Sicherheitsanmeldedaten auf.

  13. Klicken Sie auf Zugriffsschlüssel erstellen.

  14. Wählen Sie Drittanbieterdienst aus.

  15. Klicken Sie auf Zugriffsschlüssel erstellen.

  16. Laden Sie die Anmeldedaten herunter und speichern Sie sie.

IAM-Rolle für Lambda konfigurieren

  1. Rufen Sie in der AWS-Konsole IAM > Rollen > Rolle erstellen auf.
  2. Wählen Sie AWS-Dienst> Lambda aus.
  3. Klicken Sie auf Weiter.
  4. Klicken Sie auf Richtlinie erstellen.
  5. Wählen Sie den Tab JSON aus und geben Sie Folgendes ein:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::et-pro-ioc-bucket/et-pro-ioc/*"
        },
        {
          "Sid": "AllowStateManagement",
          "Effect": "Allow",
          "Action": ["s3:GetObject", "s3:PutObject"],
          "Resource": "arn:aws:s3:::et-pro-ioc-bucket/et-pro-ioc/state.json"
        }
      ]
    }
    
  6. Nennen Sie die Richtlinie EtProIocLambdaPolicy.

  7. Klicken Sie auf Richtlinie erstellen.

  8. Kehren Sie zur Rollenerstellung zurück und hängen Sie die Richtlinie an.

  9. Geben Sie der Rolle den Namen EtProIocLambdaRole.

  10. Klicken Sie auf Rolle erstellen.

Lambda-Funktion erstellen

  1. Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
  2. Klicken Sie auf Von Grund auf erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    • Funktionsname: et-pro-ioc-fetcher
    • Laufzeit: Python 3.13
    • Architektur: x86_64
    • Ausführungsrolle: Vorhandene Rolle EtProIocLambdaRole verwenden
  4. Rufen Sie nach der Erstellung den Tab Code auf und ersetzen Sie den Code durch Folgendes:

    #!/usr/bin/env python3
    # Lambda: Fetch ET Pro IOC reputation lists and write raw CSV to S3
    import os
    import time
    import json
    from datetime import datetime
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError, URLError
    import boto3
    
    # Environment variables
    BUCKET = os.environ["S3_BUCKET"]
    PREFIX = os.environ.get("S3_PREFIX", "et-pro-ioc/").strip("/")
    ET_API_KEY = os.environ["ET_API_KEY"]
    ET_IP_LIST_URL = os.environ["ET_IP_LIST_URL"]
    ET_DOMAIN_LIST_URL = os.environ["ET_DOMAIN_LIST_URL"]
    STATE_KEY = os.environ.get("STATE_KEY", f"{PREFIX}/state.json")
    TIMEOUT = int(os.environ.get("TIMEOUT", "120"))
    
    s3 = boto3.client("s3")
    
    def _build_request(url: str) -> Request:
        """Build request with ET API authentication"""
        if not url.lower().startswith("https://"):
            raise ValueError("Only HTTPS URLs are allowed")
    
        req = Request(url, method="GET")
        # ET Intelligence uses Authorization header with API key
        req.add_header("Authorization", ET_API_KEY)
        return req
    
    def fetch_with_retry(url: str, max_retries: int = 3) -> bytes:
        """Fetch URL with retry logic for rate limits"""
        for attempt in range(max_retries):
            try:
                req = _build_request(url)
                with urlopen(req, timeout=TIMEOUT) as response:
                    if response.status == 200:
                        return response.read()
                    elif response.status == 429:
                        # Rate limited, wait and retry
                        wait_time = min(30 * (2 ** attempt), 300)
                        print(f"Rate limited, waiting {wait_time}s...")
                        time.sleep(wait_time)
                    else:
                        raise HTTPError(url, response.status, response.reason, {}, None)
            except URLError as e:
                if attempt == max_retries - 1:
                    raise
                time.sleep(5 * (attempt + 1))
    
        raise Exception(f"Failed to fetch {url} after {max_retries} attempts")
    
    def save_to_s3(key: str, content: bytes):
        """Save content to S3 with appropriate content type"""
        s3.put_object(
            Bucket=BUCKET,
            Key=key,
            Body=content,
            ContentType="text/csv"
        )
        print(f"Saved {len(content)} bytes to s3://{BUCKET}/{key}")
    
    def get_state():
        """Get last fetch state from S3"""
        try:
            response = s3.get_object(Bucket=BUCKET, Key=STATE_KEY)
            return json.loads(response['Body'].read())
        except:
            return {}
    
    def save_state(state: dict):
        """Save fetch state to S3"""
        s3.put_object(
            Bucket=BUCKET,
            Key=STATE_KEY,
            Body=json.dumps(state, indent=2),
            ContentType="application/json"
        )
    
    def lambda_handler(event, context):
        """Main Lambda handler"""
        print("Starting ET Pro IOC fetch")
    
        # Generate timestamp for file naming
        now = datetime.utcnow()
        timestamp = now.strftime("%Y/%m/%d/%H%M%S")
    
        results = []
        errors = []
    
        # Fetch IP reputation list
        try:
            print(f"Fetching IP reputation list...")
            ip_data = fetch_with_retry(ET_IP_LIST_URL)
            ip_key = f"{PREFIX}/ip/{timestamp}.csv"
            save_to_s3(ip_key, ip_data)
            results.append({"type": "ip", "key": ip_key, "size": len(ip_data)})
        except Exception as e:
            error_msg = f"Failed to fetch IP list: {str(e)}"
            print(error_msg)
            errors.append(error_msg)
    
        # Fetch Domain reputation list
        try:
            print(f"Fetching Domain reputation list...")
            domain_data = fetch_with_retry(ET_DOMAIN_LIST_URL)
            domain_key = f"{PREFIX}/domain/{timestamp}.csv"
            save_to_s3(domain_key, domain_data)
            results.append({"type": "domain", "key": domain_key, "size": len(domain_data)})
        except Exception as e:
            error_msg = f"Failed to fetch Domain list: {str(e)}"
            print(error_msg)
            errors.append(error_msg)
    
        # Save state
        state = {
            "last_fetch": now.isoformat(),
            "results": results,
            "errors": errors
        }
        save_state(state)
    
        return {
            "statusCode": 200 if not errors else 207,
            "body": json.dumps(state)
        }
    
  5. Rufen Sie Konfiguration > Allgemeine Konfiguration auf.

  6. Klicken Sie auf Bearbeiten.

  7. Legen Sie Zeitlimit auf 5 Minuten fest.

  8. Klicken Sie auf Speichern.

Umgebungsvariablen konfigurieren

  1. Rufen Sie Konfiguration > Umgebungsvariablen auf.
  2. Klicken Sie auf Bearbeiten > Umgebungsvariable hinzufügen.
  3. Fügen Sie die folgenden Variablen hinzu:

    Schlüssel Wert
    S3_BUCKET et-pro-ioc-bucket
    S3_PREFIX et-pro-ioc
    STATE_KEY et-pro-ioc/state.json
    ET_API_KEY [Your ET API Key]
    ET_IP_LIST_URL [Your detailed IP list URL]
    ET_DOMAIN_LIST_URL [Your detailed Domain list URL]
    TIMEOUT 120
  4. Klicken Sie auf Speichern.

Wenden Sie sich an Ihren Proofpoint-Ansprechpartner, um die genauen URLs für Ihr Abo zu erhalten. Die detaillierten Format-URLs folgen in der Regel diesem Muster: * IP-Liste: https://rules.emergingthreatspro.com/[your-code]/reputation/detailed-iprepdata.txt * Domainliste: https://rules.emergingthreatspro.com/[your-code]/reputation/detailed-domainrepdata.txt

EventBridge-Zeitplan erstellen

  1. Rufen Sie Amazon EventBridge > Schedules > Create schedule auf.
  2. Name des Zeitplans: et-pro-ioc-hourly
  3. Zeitplanmuster: Ratenbasierter Zeitplan
  4. Ratenbegrenzung: 1 Stunde
  5. Klicken Sie auf Weiter.
  6. Ziel: Lambda-Funktion
  7. Funktion: et-pro-ioc-fetcher
  8. Klicken Sie sich durch die restlichen Schritte.
  9. Klicken Sie auf Zeitplan erstellen.

Feeds in Google SecOps konfigurieren

Sie müssen zwei separate Feeds erstellen: einen für die IP-Reputation und einen für die Domain-Reputation.

IP-Reputationsfeed erstellen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname ET Pro IOC - IP Reputation ein.
  4. Wählen Sie in der Liste Quelltyp die Option Amazon S3 aus.
  5. Wählen Sie Emerging Threats Pro als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Geben Sie Werte für die folgenden Eingabeparameter an:
    • S3-URI: s3://et-pro-ioc-bucket/et-pro-ioc/ip/
    • Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option aus.
    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
    • Zugriffsschlüssel-ID: SecOps-Leserzugriffsschlüssel
    • Geheimer Zugriffsschlüssel: Geheimer Schlüssel für SecOps-Leser
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  8. Klicken Sie auf Weiter.
  9. Überprüfen und auf Senden klicken

Feed für die Domainreputation erstellen

  1. Wiederholen Sie den Vorgang zum Erstellen des Feeds.
  2. Geben Sie im Feld Feedname ET Pro IOC - Domain Reputation ein.
  3. Wählen Sie in der Liste Quelltyp die Option Amazon S3 aus.
  4. Wählen Sie Emerging Threats Pro als Logtyp aus.
  5. Klicken Sie auf Weiter.
  6. Geben Sie Werte für die folgenden Eingabeparameter an:
    • S3-URI: s3://et-pro-ioc-bucket/et-pro-ioc/domain/
    • Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option aus.
    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
    • Zugriffsschlüssel-ID: SecOps-Leserzugriffsschlüssel
    • Geheimer Zugriffsschlüssel: Geheimer Schlüssel für SecOps-Leser
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  7. Klicken Sie auf Weiter.
  8. Überprüfen und auf Senden klicken

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Kategorie Dieses Feld wird in der Parserlogik verwendet, aber nicht direkt dem UDM zugeordnet. Der Wert von event.ioc.categorization wird über eine Suchtabelle ermittelt.
collection_time.nanos event.idm.entity.metadata.collected_timestamp.nanos Direkt aus dem Rohlog zugeordnet.
collection_time.seconds event.idm.entity.metadata.collected_timestamp.seconds Direkt aus dem Rohlog zugeordnet.
Daten Dieses Feld wird je nach Inhalt in mehrere UDM-Felder aufgeteilt.
first_seen event.idm.entity.metadata.interval.start_time Als Datum geparst und dem UDM zugeordnet.
first_seen event.ioc.active_timerange.start Als Datum geparst und dem UDM zugeordnet.
ip_or_domain event.idm.entity.entity.hostname Wird dem UDM zugeordnet, wenn das Grok-Muster einen Host aus dem Feld extrahiert.
ip_or_domain event.idm.entity.entity.ip Wird dem UDM zugeordnet, wenn durch das Grok-Muster kein Host aus dem Feld extrahiert wird.
ip_or_domain event.ioc.domain_and_ports.domain Wird dem UDM zugeordnet, wenn das Grok-Muster einen Host aus dem Feld extrahiert.
ip_or_domain event.ioc.ip_and_ports.ip_address Wird dem UDM zugeordnet, wenn durch das Grok-Muster kein Host aus dem Feld extrahiert wird.
last_seen event.idm.entity.metadata.interval.end_time Als Datum geparst und dem UDM zugeordnet.
last_seen event.ioc.active_timerange.end Als Datum geparst und dem UDM zugeordnet.
Ports event.idm.entity.entity.labels.value Gepasst, mit Komma getrennt und der UDM zugeordnet, wenn mehrere Ports vorhanden sind.
Ports event.idm.entity.entity.port Wird geparst und der UDM zugeordnet, wenn es nur einen Port gibt.
Ports event.ioc.domain_and_ports.ports Gepasst und der UDM zugeordnet, wenn durch das Grok-Muster ein Host aus dem Feld extrahiert wird.
Ports event.ioc.ip_and_ports.ports Wird geparst und der UDM zugeordnet, wenn durch das Grok-Muster kein Host aus dem Feld extrahiert wird.
Punktzahl event.ioc.confidence_score Direkt aus dem Rohlog zugeordnet.
event.idm.entity.entity.labels.key Auf „ports“ festlegen, wenn es mehrere Ports gibt.
event.idm.entity.metadata.entity_type Auf „DOMAIN_NAME“ festlegen, wenn das Grok-Muster einen Host aus dem Feld ip_or_domain extrahiert. Andernfalls auf „IP_ADDRESS“ festlegen.
event.idm.entity.metadata.threat.category Legen Sie diesen Wert auf „SOFTWARE_MALICIOUS“ fest.
event.idm.entity.metadata.threat.category_details Abgeleitet aus dem Feld category mithilfe einer Nachschlagetabelle.
event.idm.entity.metadata.threat.threat_name Legen Sie diesen Wert auf „ET Intelligence Rep List“ fest.
event.idm.entity.metadata.vendor_name Auf „ET_PRO_IOC“ festgelegt.
event.ioc.feed_name Legen Sie diesen Wert auf „ET Intelligence Rep List“ fest.
event.ioc.raw_severity Legen Sie diesen Wert auf „Bösartig“ fest.
timestamp.nanos Kopiert von collection_time.nanos.
timestamp.seconds Kopiert von collection_time.seconds.

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