Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
gopassivedns — Logger DNS passivo basato su rete che cattura e registra le query DNS dal traffico live o da file pcap, producendo output JSON per l'integrazione con piattaforme SIEM e di threat intelligence. | Kitploit
Strumenti/GitHubGitHub/phillipmartin/gopassivedns
Sniffing e Analisi dei PacchettiRaccolta InformazioniSicurezza di ReteThreat IntelligenceAnalisi DNS
GitHubphillipmartin/gopassivedns

gopassivedns

Logger DNS passivo basato su rete che cattura e registra le query DNS dal traffico live o da file pcap, producendo output JSON per l'integrazione con piattaforme SIEM e di threat intelligence.

Vedi Repository
1262466 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Coverage Status Build Status

gopassivedns

Registrazione DNS basata su rete in Go

Sommario

Un logger DNS basato su cattura di rete, ispirato da https://github.com/gamelinux/passivedns. Utilizza gopacket per gestire libpcap e l'elaborazione dei pacchetti. Produce log in formato JSON. È progettato per gestire la cattura di query ad alto volume in ambienti con da uno a centinaia di resolver DNS.

Perché non usare PassiveDNS di gamelinux?

È una buona scelta. Ho costruito questo perché credo che compiti come l'elaborazione di grandi quantità di dati non affidabili con molti casi limite scarsamente documentati dovrebbero essere gestiti da un runtime gestito per prevenire attacchi di corruzione della memoria. Ho implementato PassiveDNS in diverse organizzazioni, e ho costruito gopassivedns per risolvere alcuni specifici punti critici che ho osservato: avevo bisogno di strumentare molte postazioni, avevo bisogno di scalare il livello di archiviazione per gestire MOLTE ricerche e volevo una suite di test con buona copertura su tutti i casi limite DNS.

Perché non usare Bro (o altri sistemi IDS per il logging DNS)?

Anche una buona scelta. Sistemi come Bro sono generalmente implementati sulle uscite di rete, il che ha la conseguenza di mascherare la vera fonte della ricerca dietro i vostri resolver ricorsivi. Questo significa che generalmente dovete implementare Bro e fare logging delle query dei resolver (supponendo che possiate), e integrare i log di entrambi in un sistema di logging centrale per tracciare una ricerca fino a un client. gopassivedns è stato progettato per essere implementato sui vostri resolver senza modifiche alla configurazione del resolver e/o sulle vostre uscite di rete, registrare centralmente tramite un protocollo affidabile e analizzare semplicemente in qualsiasi sistema di log.

Perché non usare semplicemente il logging delle query dei resolver?

Il supporto dei resolver per il logging delle query, inclusi sia la domanda che la risposta, è al massimo incostante. Uno dei server DNS più diffusi, BIND, non lo supporta affatto. Altri, come Windows DNS, hanno formati di log davvero orribili. Inoltre, il logging basato su rete catturerà le query inviate direttamente a server remoti (es. Google DNS) dai vostri client.

Utilizzo

Le opzioni di configurazione possono essere specificate come variabili d'ambiente, in un file .env o da riga di comando. La priorità è: flag da riga di comando, file .env e infine variabili già definite nell'ambiente. Le opzioni di configurazione sono le seguenti:

  • -dev [device] dispositivo di rete per la cattura (ENV: PDNS_DEV)
  • -fluentd_socket [socket] Percorso del socket Unix di Fluentd utilizzato per il logging in formato messagepack (ENV: PDNS_FLUENTD_SOCKET)
  • -bpf [bpf filter] Filtro BPF per la cattura (default: port 53) (ENV: PDNS_BPF)
  • -pcap [file] File pcap da elaborare (ENV: PDNS_PCAP_FILE)
  • -logfile [file] File di log per le ricerche DNS (consigliato solo per piccole implementazioni o debug) (ENV: PDNS_LOG_FILE)
  • -logMaxAge Età massima di un file di log prima della rotazione, in giorni (default: 28) (ENV: PDNS_LOG_AGE)
  • -logMaxBackups Numero massimo di file conservati dopo la rotazione (default: 3) (ENV: PDNS_LOG_BACKUP)
  • -logMaxSize Dimensione massima del file di log prima della rotazione, in MB (default: 100) (ENV: PDNS_LOG_SIZE)
  • -quiet Non registrare le ricerche DNS su STDOUT (ENV: PDNS_QUIET)
  • -debug Abilita il logging di debug su STDOUT (ENV: PDNS_DEBUG)
  • -gc_age [num] Età alla quale le connessioni incomplete devono essere garbage collected (default: -1m) (ENV: PDNS_GC_AGE)
  • -gc_interval [num] Intervallo con cui la garbage collection deve essere eseguita sulla tabella delle connessioni (default: 3m) (ENV: PDNS_GC_INTERVAL)
  • -kafka_brokers [brokers] Elenco separato da virgole di broker Kafka (ENV: PDNS_KAFKA_PEERS)
  • -kafka_topic [topic] Topic Kafka per il logging (ENV: PDNS_KAFKA_TOPIC)
  • -cpuprofile [file] Abilita il profiling CPU (ENV: PDNS_PROFILE_FILE)
  • -numprocs [num] Numero di goroutine da utilizzare per l'analisi dei dati dei pacchetti (default: 8) (ENV: PDNS_THREADS)
  • -pfring Utilizza PF_RING per la cattura dei pacchetti (ENV: PDNS_PFRING)
  • -statsd_host Host e porta del vostro server statsd (es. localhost:8125) (ENV: PDNS_STATSD_HOST)
  • -statsd_interval L'intervallo, in secondi, tra gli invii a statsd (ENV: PDNS_STATSD_INTERVAL)
  • -statsd_prefix Il prefisso del nome della metrica da utilizzare (default: gopassivedns) (ENV: PDNS_STATSD_PREFIX)
  • -snaplen [int] La snaplen utilizzata per il buffer pcap
  • -name Il nome di questo sensore per uso in statistiche e messaggi di log (default: hostname) (ENV: PDNS_NAME)
  • -syslog_facility Facility syslog (ENV: PDNS_SYSLOG_FACILITY)
  • -syslog_priority Priorità syslog (ENV: PDNS_SYSLOG_PRIORITY)

Devi fornire -dev o -pcap.

Ci sono problemi noti con le goroutine e il normale processo di daemonizzazione (https://github.com/golang/go/issues/227), quindi raccomando vivamente di utilizzare uno dei metodi descritti qui: http://stackoverflow.com/questions/10067295/how-to-start-a-go-program-as-a-daemon-in-ubuntu per eseguire questo processo come demone usando strumenti di sistema.

Se scegli di utilizzare il logging syslog, utilizziamo "log/syslog" di Go che richiede che un socket Unix usato per comunicare con syslog si trovi in uno di /dev/log, /var/run/log o /var/run/syslog.

Guida all'implementazione

Dove implementarlo?

Hai 3 scelte: implementarlo sul/i tuo/i resolver o implementarlo sul/i tuo/i gateway o entrambi. Implementarlo sui tuoi resolver è buono perché otterrai l'indirizzo IP del client che ha inviato la richiesta originale. Puoi anche vedere la tratta upstream della richiesta (dal resolver al prossimo resolver nella catena), a meno che non si regoli il filtro BPF per ignorare quella tratta. Implementarlo sui tuoi gateway significa che non vedi la tratta client -> resolver interno, quindi può essere difficile ricondurre una richiesta a un client specifico. D'altro canto, vedrai le richieste che bypassano i tuoi resolver interni. Vedrai anche, ovviamente, le query provenienti dal resolver verso il resolver upstream che utilizza. In un mondo ideale, implementerei questo strumento su ciascuno dei miei resolver interni e su un tap sui miei gateway. I resolver interni avrebbero un filtro BPF tale da ignorare la tratta upstream della query, mentre il gateway non ignorerebbe nulla.

Cosa fare con i risultati?

Al momento, consiglierei di usare logstash per spedire i log a un cluster elasticsearch. Tutti i log sono in JSON, quindi dovrebbe essere abbastanza facile. Suggerirei anche di usare qualcosa come HDFS per l'archiviazione a lungo termine e l'analisi di massa. Le query DNS sono una fonte incredibile di dati interni!

Build e installazione

  • clona questo repository
  • installa libpcap, libpcap-dev
  • 'go get'
  • 'go build -o gopassivedns' (il -o è solo per precauzione, supponendo che tu abbia clonato il repo non dovrebbe servire)
  • 'cp gopassivedns /some/path/to/gopassivedns'
Scarica lo strumento