Group-IB Threat Intelligence-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Group-IB Threat Intelligence-Logs mit Google Cloud Storage in Google Security Operations aufnehmen.
Group-IB Threat Intelligence & Attribution (TI&A) ist eine Plattform für Cyber-Threat Intelligence, die Echtzeitdaten zu Bedrohungsakteuren, Indikatoren für Kompromittierung (Indicators of Compromise, IOCs), Malware, Command-and-Control-Infrastruktur (C2), kompromittierten Anmeldedaten, Phishing-Kampagnen und Sicherheitslücken bietet. Es werden Informationen aus Quellen im öffentlich zugänglichen Internet, Deep Web und Darknet zusammengeführt, damit Sicherheitsteams Bedrohungen proaktiv erkennen und darauf reagieren können.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein Group-IB TI&A-Konto mit aktiviertem API-Zugriff
- Zugriff auf das Group-IB TI&A-Portal (
tap.group-ib.com) - Ein Google Cloud-Projekt mit den folgenden aktivierten APIs:
- Cloud Storage API
- Cloud Functions API
- Cloud Scheduler API
- Cloud Build API
Group-IB-API-Schlüssel generieren
- Melden Sie sich im Group-IB TI&A-Portal unter
https://tap.group-ib.coman. - Klicken Sie oben rechts auf Ihren Namen und wählen Sie Profil aus.
- Klicken Sie auf Go to my settings (Zu meinen Einstellungen).
- Rufen Sie den Tab Sicherheit und Zugriff auf.
- Klicken Sie im Abschnitt Persönliches Token auf Neues Token generieren.
Kopieren und speichern Sie den API-Schlüssel sicher.
Google Cloud Storage-Bucket erstellen
- Gehen Sie zur Google Cloud Console.
- Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
- Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Bucket benennen Geben Sie einen global eindeutigen Namen ein, z. B. groupib-ti-logs.Standorttyp Wählen Sie je nach Bedarf aus (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Ort aus, z. B. us-central1.Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Klicken Sie auf Erstellen.
Cloud Functions-Funktion zum Abrufen von Group-IB-Daten bereitstellen
Erstellen Sie eine Cloud Function, die Threat Intelligence-Daten aus der Group-IB TI&A API abruft und als NDJSON-Dateien in den GCS-Bucket schreibt, damit Google SecOps sie aufnehmen kann.
Cloud Functions-Funktion erstellen
- Gehen Sie zur Google Cloud Console.
- Rufen Sie Cloud Functions auf.
- Klicken Sie auf Funktion erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Umgebung 2. Generation Funktionsname groupib-to-gcsRegion Wählen Sie die Region aus, die Ihrem GCS-Bucket am nächsten ist. Triggertyp HTTPS Authentifizierung Authentifizierung anfordern Zugewiesener Arbeitsspeicher 512 MB (erhöhen, wenn große Sammlungen abgerufen werden) Zeitlimit 540 Sekunden Klicken Sie auf Weiter.
Legen Sie die Laufzeit auf
Python 3.11oder höher fest.Legen Sie den Einstiegspunkt auf
mainfest.Ersetzen Sie den Inhalt von
main.pydurch den folgenden Code:import json import os import requests import functions_framework from datetime import datetime, timedelta, timezone from urllib.parse import urljoin from requests.auth import HTTPBasicAuth from google.cloud import storage GIB_API_URL = os.environ.get('GIB_API_URL', 'https://tap.group-ib.com/api/v2/') GIB_USERNAME = os.environ.get('GIB_USERNAME') GIB_API_KEY = os.environ.get('GIB_API_KEY') GCS_BUCKET = os.environ.get('GCS_BUCKET') GCS_PREFIX = os.environ.get('GCS_PREFIX', 'groupib-ti') COLLECTIONS = os.environ.get('GIB_COLLECTIONS', 'compromised/account,malware/cnc,apt/threat,hi/threat').split(',') DEFAULT_DAYS_BACK = int(os.environ.get('DEFAULT_DAYS_BACK', '3')) # Max items per request: 100 for most collections, 20 for apt/threat and hi/threat BIG_DATA_COLLECTIONS = ['apt/threat', 'hi/threat'] # File to persist seqUpdate values between runs (use GCS for durability) STATE_BLOB = '_state/seq_updates.json' def load_state(): """Load seqUpdate state from GCS.""" client = storage.Client() bucket = client.bucket(GCS_BUCKET) blob = bucket.blob(f"{GCS_PREFIX}/{STATE_BLOB}") if blob.exists(): return json.loads(blob.download_as_text()) return {} def save_state(state): """Save seqUpdate state to GCS.""" client = storage.Client() bucket = client.bucket(GCS_BUCKET) blob = bucket.blob(f"{GCS_PREFIX}/{STATE_BLOB}") blob.upload_from_string(json.dumps(state), content_type='application/json') def gib_request(session, url, params=None): """Send authenticated GET request to Group-IB API.""" resp = session.get(url, params=params) if resp.status_code == 301: raise Exception('IP not whitelisted by Group-IB. Contact Group-IB support.') resp.raise_for_status() return resp.json() def get_seq_update_by_date(session, collection, date_str): """Get seqUpdate value for a collection starting from a given date.""" url = urljoin(GIB_API_URL, 'sequence_list') data = gib_request(session, url, {'date': date_str, 'collection': collection}) return data.get('list', {}).get(collection) def fetch_collection(session, collection, seq_update): """Fetch all new items from a collection starting after the given seqUpdate.""" limit = 20 if collection in BIG_DATA_COLLECTIONS else 100 url = urljoin(GIB_API_URL, f"{collection}/updated") all_items = [] last_seq = seq_update while True: data = gib_request(session, url, {'seqUpdate': str(last_seq), 'limit': limit}) items = data.get('items', []) if not items: break all_items.extend(items) last_seq = items[-1].get('seqUpdate') return all_items, last_seq def write_to_gcs(items, collection_name): """Write items to GCS as NDJSON.""" if not items: return 0 client = storage.Client() bucket = client.bucket(GCS_BUCKET) timestamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') safe_name = collection_name.replace('/', '_') blob_path = f"{GCS_PREFIX}/{safe_name}_{timestamp}.ndjson" blob = bucket.blob(blob_path) ndjson = '\n'.join(json.dumps(item, ensure_ascii=False) for item in items) + '\n' blob.upload_from_string(ndjson, content_type='application/x-ndjson') return len(items) @functions_framework.http def main(request): """Cloud Function entry point.""" session = requests.Session() session.auth = HTTPBasicAuth(GIB_USERNAME, GIB_API_KEY) session.headers.update({'Accept': '*/*'}) state = load_state() total = 0 for collection in COLLECTIONS: collection = collection.strip() seq_update = state.get(collection) if seq_update is None: default_date = (datetime.now(timezone.utc) - timedelta(days=DEFAULT_DAYS_BACK)).strftime('%Y-%m-%d') seq_update = get_seq_update_by_date(session, collection, default_date) if seq_update is None: continue items, last_seq = fetch_collection(session, collection, seq_update) if items: write_to_gcs(items, collection) total += len(items) state[collection] = last_seq save_state(state) return json.dumps({'status': 'success', 'total_items': total}), 200Ersetzen Sie den Inhalt von
requirements.txtdurch die folgenden Abhängigkeiten:functions-framework==3.* requests>=2.28.0 google-cloud-storage>=2.0.0Klicken Sie auf Bereitstellen.
Umgebungsvariablen konfigurieren
- Rufen Sie nach der Bereitstellung die Detailseite Ihrer Funktion auf.
- Klicken Sie auf Bearbeiten.
- Maximieren Sie den Abschnitt Laufzeit, Build, Verbindungen und Sicherheitseinstellungen.
Fügen Sie unter Umgebungsvariablen der Laufzeit die folgenden Variablen hinzu:
Variable Wert GIB_API_URLhttps://tap.group-ib.com/api/v2/(oderhttps://bt.group-ib.com/api/v2/, je nach Region)GIB_USERNAMEE-Mail-Adresse Ihres Group-IB-Kontos GIB_API_KEYIhr Group-IB-API-Schlüssel (persönliches Token) GCS_BUCKETName Ihres GCS-Buckets (z. B. groupib-ti-logs)GCS_PREFIXPräfix für Logdateien (z. B. groupib-ti)GIB_COLLECTIONSDurch Kommas getrennte Liste der abzurufenden Sammlungen (siehe unten) DEFAULT_DAYS_BACKAnzahl der Tage, die beim ersten Lauf berücksichtigt werden sollen (Standard: 3)Klicken Sie auf Bereitstellen.
Verfügbare Group-IB-Sammlungen
Konfigurieren Sie die Variable GIB_COLLECTIONS mit den für Ihren Anwendungsfall relevanten Sammlungen:
| Sammlung | Beschreibung | Limit |
|---|---|---|
compromised/account |
Gehackte Kontozugangsdaten (Anmeldung, Passwort, Domain) | 100 |
compromised/card |
Gehackte Bankkarten | 100 |
compromised/mule |
Konten von Finanzagenten („Money Mules“) | 100 |
compromised/imei |
IMEIs von manipulierten Mobilgeräten | 100 |
compromised/file |
Kompromittierte Dateien mit Malware-Attribution | 100 |
attacks/ddos |
DDoS-Angriffsdaten (Ziel-IPs, Domains) | 100 |
attacks/deface |
Vorfälle von Website-Manipulation | 100 |
attacks/phishing |
Phishing-URLs und ‑Domains | 100 |
attacks/phishing_kit |
Hashes von Phishing-Kits und Zielmarken | 100 |
bp/phishing |
Markenschutz – Phishing-Vorfälle | 100 |
bp/phishing_kit |
Markenschutz – Phishing-Kits | 100 |
hi/threat |
Berichte zu Cyberkriminellen (HI) mit IOCs und MITRE ATT&CK-Zuordnung | 20 |
hi/threat_actor |
Profile von Cyberkriminellen | 100 |
apt/threat |
APT-Berichte (staatliche Akteure) mit IOCs und MITRE ATT&CK-Zuordnung | 20 |
apt/threat_actor |
APT-Angreiferprofile | 100 |
malware/cnc |
Indikatoren für Command-and-Control-Server (IPs, Domains) | 100 |
malware/malware |
Malware-Beschreibungen und Gefahrenstufen | 100 |
malware/targeted_malware |
Gezielte Malware-Beispiele (Hashes, Dateinamen) | 100 |
osi/git_leak |
Datenlecks in Git-Repositorys | 100 |
osi/public_leak |
Öffentliche Datenlecks (Pastes, Dumps) | 100 |
osi/vulnerability |
Sicherheitslückendaten mit CVSS-Werten | 100 |
suspicious_ip/tor_node |
IP-Adressen von Tor-Exit-Knoten | 100 |
suspicious_ip/open_proxy |
IP-Adressen von offenen Proxys | 100 |
suspicious_ip/socks_proxy |
SOCKS-Proxy-IP-Adressen | 100 |
Beispiel: So erfassen Sie kompromittierte Anmeldedaten, C2-Infrastruktur und APT-Daten:
compromised/account,malware/cnc,apt/threat,hi/threat
Cloud Functions-Funktion planen
Verwenden Sie Cloud Scheduler, um die Funktion in regelmäßigen Abständen auszulösen.
- Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name groupib-to-gcs-scheduleRegion Dieselbe Region wie Ihre Cloud Functions-Funktion Frequenz 0 */1 * * *(stündlich) oder0 0 * * *(täglich)Zeitzone Zeitzone auswählen Unter Ausführung konfigurieren:
- Zieltyp: Wählen Sie HTTP aus.
- URL: Geben Sie Cloud Function-Trigger-URL ein.
- HTTP-Methode: Wählen Sie POST aus.
- Auth-Header: Wählen Sie OIDC-Token hinzufügen aus.
- Dienstkonto: Wählen Sie ein Dienstkonto mit der Berechtigung
roles/cloudfunctions.invokeraus.
Klicken Sie auf Erstellen.
Datenexport testen
- Klicken Sie in der Cloud Scheduler-Konsole neben Ihrem Job auf Ausführung erzwingen, um die Funktion manuell auszulösen.
- Prüfen Sie Cloud Function-Logs in Cloud Logging, um zu bestätigen, dass Daten von Group-IB abgerufen wurden.
- Rufen Sie in der Google Cloud Console Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
groupib-ti-logs. - Rufen Sie den Präfixordner auf (z. B.
groupib-ti/). Prüfen Sie, ob neue
.ndjson-Dateien im Bucket angezeigt werden.
Google SecOps-Dienstkonto abrufen
Google SecOps verwendet ein eindeutiges Dienstkonto, um Daten aus Ihrem GCS-Bucket zu lesen. Sie müssen diesem Dienstkonto Zugriff auf Ihren Bucket gewähren.
E-Mail-Adresse des Dienstkontos abrufen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Group-IB Threat Intelligence. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Group-IB Threat Intelligence als Logtyp aus.
Klicken Sie auf Dienstkonto abrufen. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comKopieren Sie diese E-Mail-Adresse für den nächsten Schritt.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
Das Google SecOps-Dienstkonto benötigt die Rolle Storage-Objekt-Betrachter für Ihren GCS-Bucket.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
groupib-ti-logs. - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
- Rollen zuweisen: Wählen Sie Storage-Objekt-Betrachter aus.
Klicken Sie auf Speichern.
Feed in Google SecOps konfigurieren, um Group-IB Threat Intelligence-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Group-IB Threat Intelligence. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Group-IB Threat Intelligence als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI mit dem Präfixpfad ein:
gs://groupib-ti-logs/groupib-ti/Ersetzen Sie:
groupib-ti-logs: Der Name Ihres GCS-Buckets.groupib-ti: Das Präfix bzw. der Ordnerpfad, in dem Logs gespeichert werden.
Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus:
- Nie: Es werden niemals Dateien nach Übertragungen gelöscht (empfohlen für Tests).
- Übertragene Dateien löschen: Löscht Dateien nach der erfolgreichen Übertragung.
- Übertragene Dateien und leere Verzeichnisse löschen: Dateien und leere Verzeichnisse werden nach der erfolgreichen Übertragung gelöscht.
Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
Asset-Namespace: Der Asset-Namespace.
Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten