
Stenographer è una soluzione di cattura di pacchetti che mira a salvare rapidamente tutti i pacchetti su disco, fornendo poi un accesso semplice e veloce a sottoinsiemi di tali pacchetti. Discussioni/annunci su [email protected]
Stenographer è un'utility di cattura a pacchetto completo per bufferizzare i pacchetti su disco a scopo di intrusion detection e incident response. Fornisce un'implementazione ad alte prestazioni della scrittura da NIC a disco, gestisce l'eliminazione dei file man mano che il disco si riempie e fornisce metodi per leggere rapidamente e facilmente set specifici di pacchetti.
È progettato per:
NON è progettato per:
Elaborazione complessa dei pacchetti (riassemblaggio del flusso TCP, ecc.)
È veloce perché non lo fa. Anche con l'elaborazione minima a passaggio singolo dei pacchetti che eseguiamo, l'elaborazione di circa 1 Gbps per la sola indicizzazione può richiedere oltre il 75% di un singolo core.
Elaborare i dati rileggendoli dal disco non funziona: vedere il punto successivo.
Lettura di grandi quantità di pacchetti (> 1% dei pacchetti scritti)
Il concetto chiave è che le letture del disco competono con le scritture... puoi scrivere al 90% della velocità del disco, ma questo ti lascia solo il 10% del tempo del disco per la lettura. Inoltre, stiamo scrivendo dati altamente sequenziali, cosa che i dischi fanno molto rapidamente, e generalmente leggendo dati sparsi con molti seek, cosa che i dischi fanno lentamente.
Per ulteriori informazioni, consulta DESIGN.md per una discussione sul design di stenographer, o leggi INSTALL.md per come installare stenographer su una macchina.
Un utente richiede pacchetti da stenographer specificandoli con un linguaggio di query molto semplice. Questo linguaggio è un semplice sottoinsieme di BPF e include le primitive:
host 8.8.8.8 # Singolo indirizzo IP (nomi host non consentiti)
net 1.0.0.0/8 # Rete con CIDR
net 1.0.0.0 mask 255.255.255.0 # Rete con maschera
port 80 # Numero di porta (UDP o TCP)
ip proto 6 # Numero di protocollo IP 6
icmp # equivalente a 'ip proto 1'
tcp # equivalente a 'ip proto 6'
udp # equivalente a 'ip proto 17'
# Aggiunte temporali specifiche di Stenographer:
before 2012-11-03T11:05:00Z # Pacchetti prima di un orario specifico (UTC)
after 2012-11-03T11:05:00-07:00 # Pacchetti dopo un orario specifico (con fuso orario)
before 45m ago # Pacchetti prima di un orario relativo
after 3h ago # Pacchetti dopo un orario relativo
NOTA: I tempi relativi devono essere misurati in valori interi di ore o minuti come dimostrato sopra.
Le primitive possono essere combinate con and/&& e con or/||, che hanno la stessa precedenza e vengono valutate da sinistra a destra. Si possono usare anche le parentesi per raggruppare.
(udp and port 514) or (tcp and port 8080)
Lo script da riga di comando stenoread automatizza l'estrazione dei pacchetti da Stenographer e la loro presentazione in un formato utilizzabile per gli analisti. Richiede pacchetti grezzi a stenographer, quindi li elabora con tcpdump per fornire un'esperienza di formattazione/filtraggio più completa. Il primo argomento di stenoread è una query di stenographer (vedi 'Linguaggio di Query' sopra). Tutti gli altri argomenti vengono passati a tcpdump. Ad esempio:
# Richiede tutti i pacchetti dall'IP 1.2.3.4 porta 6543, quindi esegue un filtraggio aggiuntivo per
# flag TCP, che lo stenographer standard non supporta.
$ stenoread 'host 1.2.3.4 and port 6543' 'tcp[tcpflags] & tcp-push != 0'
# Richiede pacchetti sulla porta 8765, disabilitando la risoluzione IP (-n) e mostrando
# le intestazioni di livello di collegamento (-e) durante la stampa.
$ stenoread 'port 8765' -n -e
# Richiede pacchetti per qualsiasi IP nell'intervallo 1.1.1.0-1.1.1.255, scrivendoli
# in un file PCAP locale in modo che possano essere aperti in Wireshark.
$ stenoread 'net 1.1.1.0/24' -w /tmp/output_for_wireshark.pcap
Per scaricare il codice sorgente, installa Go a livello locale, quindi esegui:
$ go get github.com/google/stenographer
Go scaricherà e installerà tutte le librerie Go da cui dipende stenographer. Per compilare stenotype, entra nella directory stenotype ed esegui make. Potrebbe essere necessario installare i seguenti pacchetti Ubuntu (o i loro equivalenti su altre distribuzioni Linux):
Questo non è un prodotto ufficiale Google (sperimentale o altro), è solo codice che per caso è di proprietà di Google.
Questo codice non è inteso (né utilizzato) per osservare gli utenti di Google. Il suo scopo è aumentare la sicurezza sulle nostre reti potenziando le nostre capacità di monitoraggio interno.