
Kit di acquisizione e monitoraggio DNS passivo
Stiamo esplorando una soluzione SaaS gestita per dnsmonster! Aiuta a plasmare il futuro del monitoraggio passivo DNS condividendo il tuo feedback e le tue esigenze: Partecipa al nostro breve sondaggio
Indice
Framework di monitoraggio passivo DNS costruito in Golang.
dnsmonster implementa un packet sniffer per il traffico DNS. Può accettare traffico da un file pcap, un'interfaccia live o un socket dnstap,
e può essere utilizzato per indicizzare e memorizzare centinaia di migliaia di query DNS al secondo, avendo dimostrato di essere in grado di indicizzare oltre 200.000 query DNS al secondo su un computer consumer. Mira ad essere scalabile, semplice e facile da usare, e ad aiutare
i team di sicurezza a comprendere i dettagli del traffico DNS di un'impresa. dnsmonster non cerca di seguire le conversazioni DNS, ma piuttosto di indicizzare i pacchetti DNS non appena arrivano. Inoltre non intende violare
la privacy degli utenti finali, con la possibilità di mascherare gli IP di livello 3 (IPv4 e IPv6), consentendo ai team di effettuare analisi delle tendenze su dati aggregati senza poter risalire alle query di un singolo individuo. Blogpost
Il codice precedente alla versione 1.x è considerato di qualità beta ed è soggetto a modifiche che potrebbero rompere la compatibilità. Si prega di consultare le note di rilascio per ogni tag per vedere l'elenco degli scenari di rottura tra ogni rilascio e come mitigare potenziali perdite di dati.```mermaid graph TD subgraph Input B1["network input"] B2["pcap file"] B3["dnstap socket"] end
subgraph "Process"
C1["Sampling based of ratio"]
C2["Packet Process"]
C3["Dispatcher"]
O11["Output1"]
O12["Domain Skip (optional)"]
O13["Domain Allow (optional)"]
O21["Output2"]
O22["Domain Skip (optional)"]
O23["Domain Allow (optional)"]
O31["Output3"]
O32["Domain Skip (optional)"]
O33["Domain Allow (optional)"]
end
B1 --> Process
B2 --> Process
B3 --> Process
C1 --> C2
C2 --> C3
C3 --> O11
C3 --> O21
C3 --> O31
O11 --> O12 --> O13
O21 --> O22 --> O23
O31 --> O32 --> O33
subgraph Output
Splunk
Syslog
H["ClickHouse"]
Postgres
Kafka
I["JSON File"]
Influx
Elastic
J["stdout"]
Parquet
Sentinel
end
O13 --> H
O23 --> I
O33 --> J
# Caratteristiche principali
- Capacità di utilizzare `afpacket` di Linux e la cattura dei pacchetti a copia zero.
- Supporta BPF
- Capacità di mascherare l'indirizzo IP per migliorare la privacy
- Capacità di avere un rapporto di campionamento pre-elaborazione
- Capacità di avere una lista di `fqdn` da "saltare" per evitare di scrivere alcuni domini/suffissi/prefissi nell'archivio
- Capacità di avere una lista di domini "consentiti", utilizzata per registrare l'accesso a determinati domini
- Ricarica a caldo dei file/URL dei domini da saltare e consentiti
- Output modulare con logica configurabile per flusso di output.
- Politica di conservazione automatica dei dati utilizzando l'attributo TTL di ClickHouse
- Dashboard Grafana integrata per l'output ClickHouse.
- Capacità di essere distribuito come un singolo binario collegato staticamente
- Capacità di essere configurato tramite variabili d'ambiente, opzioni da riga di comando o file di configurazione
- Capacità di campionare gli output utilizzando la funzionalità SAMPLE di ClickHouse
- Capacità di inviare metriche utilizzando `prometheus` e `statstd`
- Alto rapporto di compressione grazie all'archiviazione LZ4 integrata di ClickHouse
- Supporta DNS su TCP, DNS frammentato (udp/tcp) e IPv6
- Supporta [dnstap](https://github.com/dnstap/golang-dnstap) su socket Unix o TCP
- Integrazione SIEM integrata con Splunk e Microsoft Sentinel
# Installazione
## Linux
Il modo migliore per iniziare con `dnsmonster` è scaricare il binario dalla sezione release. Il binario è compilato staticamente con `musl`, quindi dovrebbe funzionare subito su molte distribuzioni. Per il supporto `afpacket`, è necessario utilizzare il kernel 3.x+. Qualsiasi distribuzione Linux moderna (CentOS/RHEL 7+, Ubuntu 14.0.4.2+, Debian 7+) è fornita con una versione 3.x+, quindi dovrebbe funzionare subito. Se la tua distribuzione non funziona con la versione precompilata, per favore invia un problema con i dettagli e compila `dnsmonster` manualmente usando questa sezione [Compila manualmente](#build-manually).
### Container
Poiché `dnsmonster` utilizza la funzionalità di cattura raw dei pacchetti, il demone Docker/Podman deve concedere la capacità al contenitore```
sudo docker run --rm -it --net=host --cap-add NET_RAW --cap-add NET_ADMIN --name dnsmonster ghcr.io/mosajjal/dnsmonster:latest --devName lo --stdoutOutputType=1
libpcap:
Assicurati di avere i pacchetti go, libpcap-devel e linux-headers installati. Il nome dei pacchetti potrebbe differire in base alla tua distribuzione. Dopodiché, clona semplicemente il repository ed esegui `go build ./cmd/dnsmonster````sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster
go get
go build -o dnsmonster ./cmd/dnsmonster- senza `libpcap`:
`dnsmonster` utilizza solo una funzione da `libpcap`, e cioè convertire i filtri in stile `tcpdump` in bytecode BPF. Se puoi vivere senza il supporto BPF, puoi compilare `dnsmonster` senza `libpcap`. Nota che per qualsiasi altra piattaforma, la cattura dei pacchetti ricade su `libpcap` quindi diventa una dipendenza rigida (*BSD, Windows, Darwin)```sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster
go get
go build -o dnsmonster -tags nolibpcap ./cmd/dnsmonster
La build precedente funziona anche su ARMv7 (RPi4) e AArch64.