
Piattaforma basata su grafi per il rilevamento e la risposta
Grapl è una piattaforma SIEM basata su grafi, costruita da e per ingegneri di incident response.
Grapl ha cessato le attività come azienda. Di conseguenza, questo codice non è più in fase di sviluppo attivo, ma rimarrà disponibile in uno stato archiviato.
Grapl sfrutta le strutture dati a grafo al suo nucleo per garantire che tu possa interrogare e connettere i tuoi dati in modo efficiente, modellare comportamenti complessi degli attaccanti per il rilevamento e approfondire facilmente comportamenti sospetti per comprendere l'intera portata di un'intrusione in corso.
Per una panoramica più approfondita di Grapl, leggi questo.
In sostanza, Grapl acquisirà log grezzi, li convertirà in grafi e unirà tali grafi in un Grafo Master. Quindi orchestrerà l'esecuzione delle tue firme di attacco e fornirà strumenti per condurre le tue indagini.
Puoi guardare alcuni dei nostri interventi a BSidesLV o a BSides San Francisco.
Grapl supporta nativamente nodi per:
Grapl supporta nativamente i seguenti formati di input per generare grafi:
Grapl è sviluppato pensando ai plugin: gli operatori possono facilmente supportare nuovi formati di log in input e nuovi tipi di nodo.
Tieni presente che Grapl non è ancora in uno stato stabile 1.0 ed è un progetto in rapida evoluzione. Aspettati alcuni piccoli bug e modifiche sostanziali!
Domande? Prova ad aprire un issue in questo repository o unisciti al canale Slack di Grapl (clicca per l'invito).
Identità
Se hai familiarità con sorgenti di log come Sysmon, una delle migliori caratteristiche è che ai processi vengono assegnate identità. Grapl applica lo stesso concetto ma per qualsiasi tipo di log supportato, prendendo identificatori pseudo come i process ID e discernendo identità canoniche.
Grapl combina quindi questo concetto di identità con il suo approccio a grafo, rendendo facile ragionare su entità e sui loro comportamenti. Inoltre, questa proprietà di identità significa che Grapl memorizza solo informazioni uniche dai tuoi log, il che significa che la tua archiviazione dei dati cresce in modo sublineare rispetto al volume dei log.
Questo riduce i costi di archiviazione e ti fornisce posizioni centralizzate per visualizzare i tuoi dati, invece di averli sparsi in migliaia di log. Ad esempio, dato un identificatore canonico di un processo, puoi visualizzare tutte le informazioni relative selezionando il nodo.
Gli analizzatori sono le tue firme di attacco. Sono moduli Python, distribuiti nel bucket S3 di Grapl, orchestrati per eseguire in base alle modifiche al Grafo Master di Grapl.
Invece di tentare di determinare un valore binario "Buono" o "Cattivo" per i comportamenti di attacco, Grapl sfrutta un concetto di Rischio e quindi correla automaticamente i rischi per far emergere le parti più rischiose del tuo ambiente.
Gli analizzatori vengono eseguiti in tempo reale mentre il grafo master viene aggiornato, utilizzando operazioni a tempo costante. Il framework degli analizzatori di Grapl raggrupperà, parallelizzerà e ottimizzerà automaticamente le tue query. Sfruttando operazioni a tempo costante e sublineari, Grapl garantisce che, man mano che la tua organizzazione cresce e il volume dei dati aumenta, tu possa comunque fare affidamento sull'esecuzione efficiente delle tue query.
Grapl fornisce una libreria di analizzatori in modo che tu possa scrivere firme di attacco usando Python puro. Vedi questo repository per esempi.
Ecco un breve esempio di come rilevare un'esecuzione sospetta di svchost.exe,
class SuspiciousSvchost(Analyzer):
def get_queries(self) -> OneOrMany[ProcessQuery]:
invalid_parents = [
Not("services.exe"),
Not("smss.exe"),
Not("ngentask.exe"),
Not("userinit.exe"),
Not("GoogleUpdate.exe"),
Not("conhost.exe"),
Not("MpCmdRun.exe"),
]
return (
ProcessQuery()
.with_process_name(eq=invalid_parents)
.with_children(
ProcessQuery().with_process_name(eq="svchost.exe")
)
)
def on_response(self, response: ProcessView, output: Any):
output.send(
ExecutionHit(
analyzer_name="Suspicious svchost",
node_view=response,
risk_score=75,
)
)
Tenere i tuoi analizzatori nel codice significa che puoi:
Scopri il plugin di deploy degli analizzatori di Grapl per vedere come puoi mantenere i tuoi analizzatori in un repository Git che li distribuisce automaticamente a ogni push su master.
Engagement
Grapl fornisce uno strumento per le indagini chiamato Engagement. Gli Engagement sono grafi isolati che rappresentano un sottografo che i tuoi analizzatori hanno ritenuto sospetto.
Utilizzando i notebook Jupyter ospitati su AWS Sagemaker e la libreria Python fornita da Grapl, puoi espandere qualsiasi sottografo sospetto per comprendere l'intera portata di un attacco. Mentre espandi l'ambito dell'attacco con il tuo notebook Jupyter, il Grafo dell'Engagement si aggiornerà, rappresentando visivamente la portata dell'attacco.

Guidato da eventi ed estendibile
Grapl è stato costruito per essere esteso: nessun servizio può soddisfare le esigenze di ogni organizzazione. Ogni servizio nativo di Grapl funziona inviando e ricevendo eventi, il che significa che per estendere Grapl devi solo iniziare a iscriverti ai messaggi.
Questo rende Grapl banale da estendere o integrare nei tuoi servizi esistenti.
Grapl fornisce anche un sistema di Plugin, attualmente in beta, che ti permette di espandere le capacità della piattaforma, aggiungendo nodi personalizzati e capacità di interrogazione.