Proofpoint Emerging Threats Pro-IOC-Logs erfassen
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
- Melden Sie sich im ET Intelligence Admin Portal unter https://etadmin.proofpoint.com an.
- Rufen Sie API-Zugriff auf.
- API-Schlüssel kopieren und speichern
- 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
- Öffnen Sie die Amazon S3-Konsole.
- Klicken Sie auf Bucket erstellen.
- Bucket-Name: Geben Sie
et-pro-ioc-bucket(oder den gewünschten Namen) ein. - Region: Wählen Sie Ihre bevorzugte Region aus.
- Klicken Sie auf Bucket erstellen.
IAM-Nutzer für Google SecOps erstellen
- IAM-Konsole öffnen
- Klicken Sie auf Nutzer > Nutzer erstellen.
- Nutzername: Geben Sie
secops-readerein. - Klicken Sie auf Weiter.
- Wählen Sie Richtlinien direkt anhängen aus.
- Klicken Sie auf Richtlinie erstellen.
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/*"] } } } ] }Nennen Sie die Richtlinie
SecOpsReaderPolicy.Klicken Sie auf Richtlinie erstellen.
Kehren Sie zur Nutzererstellung zurück und wählen Sie die neu erstellte Richtlinie aus.
Klicken Sie auf Weiter > Nutzer erstellen.
Rufen Sie den Tab Sicherheitsanmeldedaten auf.
Klicken Sie auf Zugriffsschlüssel erstellen.
Wählen Sie Drittanbieterdienst aus.
Klicken Sie auf Zugriffsschlüssel erstellen.
Laden Sie die Anmeldedaten herunter und speichern Sie sie.
IAM-Rolle für Lambda konfigurieren
- Rufen Sie in der AWS-Konsole IAM > Rollen > Rolle erstellen auf.
- Wählen Sie AWS-Dienst> Lambda aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Richtlinie erstellen.
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" } ] }Nennen Sie die Richtlinie
EtProIocLambdaPolicy.Klicken Sie auf Richtlinie erstellen.
Kehren Sie zur Rollenerstellung zurück und hängen Sie die Richtlinie an.
Geben Sie der Rolle den Namen
EtProIocLambdaRole.Klicken Sie auf Rolle erstellen.
Lambda-Funktion erstellen
- Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
- Klicken Sie auf Von Grund auf erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
- Funktionsname:
et-pro-ioc-fetcher - Laufzeit: Python 3.13
- Architektur: x86_64
- Ausführungsrolle: Vorhandene Rolle
EtProIocLambdaRoleverwenden
- Funktionsname:
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) }Rufen Sie Konfiguration > Allgemeine Konfiguration auf.
Klicken Sie auf Bearbeiten.
Legen Sie Zeitlimit auf 5 Minuten fest.
Klicken Sie auf Speichern.
Umgebungsvariablen konfigurieren
- Rufen Sie Konfiguration > Umgebungsvariablen auf.
- Klicken Sie auf Bearbeiten > Umgebungsvariable hinzufügen.
Fügen Sie die folgenden Variablen hinzu:
Schlüssel Wert S3_BUCKETet-pro-ioc-bucketS3_PREFIXet-pro-iocSTATE_KEYet-pro-ioc/state.jsonET_API_KEY[Your ET API Key]ET_IP_LIST_URL[Your detailed IP list URL]ET_DOMAIN_LIST_URL[Your detailed Domain list URL]TIMEOUT120Klicken 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
- Rufen Sie Amazon EventBridge > Schedules > Create schedule auf.
- Name des Zeitplans:
et-pro-ioc-hourly - Zeitplanmuster: Ratenbasierter Zeitplan
- Ratenbegrenzung: 1 Stunde
- Klicken Sie auf Weiter.
- Ziel: Lambda-Funktion
- Funktion:
et-pro-ioc-fetcher - Klicken Sie sich durch die restlichen Schritte.
- 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
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname
ET Pro IOC - IP Reputationein. - Wählen Sie in der Liste Quelltyp die Option Amazon S3 aus.
- Wählen Sie Emerging Threats Pro als Logtyp aus.
- Klicken Sie auf Weiter.
- 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.
- S3-URI:
- Klicken Sie auf Weiter.
- Überprüfen und auf Senden klicken
Feed für die Domainreputation erstellen
- Wiederholen Sie den Vorgang zum Erstellen des Feeds.
- Geben Sie im Feld Feedname
ET Pro IOC - Domain Reputationein. - Wählen Sie in der Liste Quelltyp die Option Amazon S3 aus.
- Wählen Sie Emerging Threats Pro als Logtyp aus.
- Klicken Sie auf Weiter.
- 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.
- S3-URI:
- Klicken Sie auf Weiter.
- Ü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