Raccogli i log di Group-IB Threat Intelligence
Questo documento spiega come importare i log di Group-IB Threat Intelligence in Google Security Operations utilizzando Google Cloud Storage.
Group-IB Threat Intelligence & Attribution (TI&A) è una piattaforma di cyber threat intelligence che fornisce dati in tempo reale su autori delle minacce, indicatori di compromissione (IOC), malware, infrastruttura command-and-control (C2), credenziali compromesse, campagne di phishing e vulnerabilità. Aggrega l'intelligence proveniente da fonti open web, deep web e dark web, consentendo ai team di sicurezza di rilevare e rispondere alle minacce in modo proattivo.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un account Group-IB TI&A con accesso API abilitato
- Accesso al portale Group-IB TI&A (
tap.group-ib.com) - Un progetto Google Cloud con le seguenti API abilitate:
- API Storage Cloud
- API Cloud Functions
- API Cloud Scheduler
- API Cloud Build
Generare la chiave API Group-IB
- Accedi al portale Group-IB TI&A all'indirizzo
https://tap.group-ib.com. - Fai clic sul tuo nome nell'angolo in alto a destra e seleziona Profilo.
- Fai clic su Vai alle mie impostazioni.
- Vai alla scheda Sicurezza e accesso.
- Nella sezione Token personale, fai clic su Genera nuovo token.
Copia e salva in modo sicuro la chiave API.
Crea un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio groupib-ti-logs).Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Fai clic su Crea.
Esegui il deployment di Cloud Functions per estrarre i dati di Group-IB
Crea una Cloud Function che estrae i dati di threat intelligence dall'API Group-IB TI&A e li scrive nel bucket GCS come file NDJSON per l'acquisizione da parte di Google SecOps.
Crea la Cloud Function
- Vai alla console Google Cloud.
- Vai a Cloud Functions.
- Fai clic su Crea funzione.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Ambiente 2ª gen. Nome della funzione groupib-to-gcsRegione Seleziona la regione più vicina al tuo bucket GCS Tipo di attivatore HTTPS Autenticazione Richiedi autenticazione Memoria allocata 512 MB (aumenta se recuperi raccolte di grandi dimensioni) Timeout 540 secondi Fai clic su Avanti.
Imposta Runtime su
Python 3.11(o versioni successive).Imposta Punto di ingresso su
main.Sostituisci i contenuti di
main.pycon il seguente codice: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}), 200Sostituisci i contenuti di
requirements.txtcon le seguenti dipendenze:functions-framework==3.* requests>=2.28.0 google-cloud-storage>=2.0.0Fai clic su Esegui il deployment.
Configura le variabili di ambiente
- Dopo il deployment, vai alla pagina dei dettagli della funzione.
- Fai clic su Modifica.
- Espandi la sezione Impostazioni di runtime, build, connessioni e sicurezza.
In Variabili di ambiente runtime, aggiungi le seguenti variabili:
Variabile Valore GIB_API_URLhttps://tap.group-ib.com/api/v2/(ohttps://bt.group-ib.com/api/v2/a seconda della regione)GIB_USERNAMEIl tuo indirizzo email dell'account Group-IB GIB_API_KEYLa tua chiave API Group-IB (token personale) GCS_BUCKETIl nome del bucket GCS (ad esempio, groupib-ti-logs)GCS_PREFIXPrefisso per i file di log (ad esempio groupib-ti)GIB_COLLECTIONSElenco separato da virgole delle raccolte da recuperare (vedi sotto) DEFAULT_DAYS_BACKNumero di giorni da considerare nella prima esecuzione (valore predefinito: 3)Fai clic su Esegui il deployment.
Raccolte Group-IB disponibili
Configura la variabile GIB_COLLECTIONS con le raccolte pertinenti al tuo caso d'uso:
| Raccolta | Descrizione | Limite massimo |
|---|---|---|
compromised/account |
Credenziali dell'account compromesse (login, password, dominio) | 100 |
compromised/card |
Carte bancarie compromesse | 100 |
compromised/mule |
Account money mule | 100 |
compromised/imei |
IMEI di dispositivi mobili compromessi | 100 |
compromised/file |
File compromessi con attribuzione del malware | 100 |
attacks/ddos |
Dati degli attacchi DDoS (IP di destinazione, domini) | 100 |
attacks/deface |
Incidenti di alterazione del sito web | 100 |
attacks/phishing |
URL e domini di phishing | 100 |
attacks/phishing_kit |
Hash del kit di phishing e brand target | 100 |
bp/phishing |
Protezione del brand: incidenti di phishing | 100 |
bp/phishing_kit |
Protezione del brand: kit di phishing | 100 |
hi/threat |
Report sulle minacce di criminali informatici (HI) con indicatori di compromissione e mappatura MITRE ATT&CK | 20 |
hi/threat_actor |
Profili degli autori delle minacce informatiche | 100 |
apt/threat |
Report sulle minacce APT (statali) con IOC e mappatura MITRE ATT&CK | 20 |
apt/threat_actor |
Profili degli attori delle minacce APT | 100 |
malware/cnc |
Indicatori del server di comando e controllo (IP, domini) | 100 |
malware/malware |
Descrizioni dei malware e livelli di minaccia | 100 |
malware/targeted_malware |
Campioni di malware mirati (hash, nomi file) | 100 |
osi/git_leak |
Fughe di dati del repository Git | 100 |
osi/public_leak |
Fughe di dati pubblici (paste, dump) | 100 |
osi/vulnerability |
Dati sulle vulnerabilità con punteggi CVSS | 100 |
suspicious_ip/tor_node |
Indirizzi IP dei nodi di uscita Tor | 100 |
suspicious_ip/open_proxy |
Indirizzi IP proxy aperti | 100 |
suspicious_ip/socks_proxy |
Indirizzi IP del proxy SOCKS | 100 |
Esempio: per raccogliere credenziali compromesse, infrastruttura C2 e dati APT:
compromised/account,malware/cnc,apt/threat,hi/threat
Pianifica la Cloud Function
Utilizza Cloud Scheduler per attivare la funzione a intervalli regolari.
- Vai a Cloud Scheduler nella Google Cloud Console.
- Fai clic su Crea job.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Nome groupib-to-gcs-scheduleRegione Stessa regione della Cloud Function Frequenza 0 */1 * * *(ogni ora) o0 0 * * *(ogni giorno)Fuso orario Seleziona il tuo fuso orario In Configura l'esecuzione:
- Tipo di destinazione: seleziona HTTP.
- URL: inserisci l'URL trigger della Cloud Function.
- Metodo HTTP: seleziona POST.
- Intestazione di autenticazione: seleziona Aggiungi token OIDC.
- Service account: seleziona un account di servizio con l'autorizzazione
roles/cloudfunctions.invoker.
Fai clic su Crea.
Testare l'esportazione dei dati
- Nella console Cloud Scheduler, fai clic su Forza esecuzione accanto al job per attivare manualmente la funzione.
- Controlla i log di Cloud Function in Cloud Logging per verificare che i dati siano stati recuperati da Group-IB.
- Vai a Cloud Storage > Bucket nella Google Cloud Console.
- Fai clic sul nome del bucket (ad esempio
groupib-ti-logs). - Vai alla cartella del prefisso (ad esempio,
groupib-ti/). Verifica che nel bucket vengano visualizzati nuovi file
.ndjson.
Recuperare il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Recupera l'email del account di servizio
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed di notizie.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Group-IB Threat Intelligence). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Group-IB Threat Intelligence come Tipo di log.
Fai clic su Ottieni service account. Viene visualizzata un'email del account di servizio univoca, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel tuo bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
groupib-ti-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps.
- Assegna ruoli: seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
Configura un feed in Google SecOps per importare i log di Group-IB Threat Intelligence
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Group-IB Threat Intelligence). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Group-IB Threat Intelligence come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://groupib-ti-logs/groupib-ti/Sostituisci:
groupib-ti-logs: il nome del bucket GCS.groupib-ti: il percorso del prefisso/della cartella in cui sono archiviati i log.
Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
Età massima file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed di notizie nella schermata Finalizza, quindi fai clic su Invia.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.