Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
gopassivedns — Registrador de DNS pasivo basado en red que captura y registra consultas DNS desde tráfico en vivo o archivos pcap, generando JSON para integración con plataformas SIEM y de inteligencia de amenazas. | Kitploit
Herramientas/GitHubGitHub/phillipmartin/gopassivedns
Sniffing y Análisis de PaquetesRecopilación de InformaciónSeguridad de RedesInteligencia de AmenazasAnálisis de DNS
GitHubphillipmartin/gopassivedns

gopassivedns

Registrador de DNS pasivo basado en red que captura y registra consultas DNS desde tráfico en vivo o archivos pcap, generando JSON para integración con plataformas SIEM y de inteligencia de amenazas.

Ver Repositorio
12624hace 6 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Coverage Status Build Status

gopassivedns

Registro de DNS basado en red en Go

Resumen

Un registrador de DNS basado en captura de red, inspirado en https://github.com/gamelinux/passivedns. Utiliza gopacket para manejar libpcap y el procesamiento de paquetes. Genera registros en JSON. Está diseñado para manejar capturas de consultas de alto volumen en entornos con cualquier cantidad de resolutores DNS, desde uno hasta cientos.

¿Por qué no usar PassiveDNS de gamelinux?

Es una buena opción. Construí esto porque creo que tareas que implican procesar grandes cantidades de datos no confiables con muchos casos límite mal documentados deben ser manejadas por un runtime administrado para prevenir ataques de corrupción de memoria. He implementado PassiveDNS en varias organizaciones y construí gopassivedns para resolver algunos puntos débiles específicos que observé: necesitaba instrumentar muchas ubicaciones, necesitaba escalar la capa de almacenamiento para manejar MUCHAS búsquedas y quería un conjunto de pruebas con buena cobertura para todos los casos límite de DNS.

¿Por qué no usar Bro (o insertar otro IDS de registro de DNS aquí)?

También es una buena opción. Sistemas como Bro generalmente se implementan en las salidas de red, lo que tiene la consecuencia de ocultar la fuente real de la consulta detrás de sus resolutores recursivos. Esto significa que generalmente necesitas implementar Bro y realizar el registro de consultas del resolutor (si es posible), e integrar los registros de ambos en un sistema de registro central para rastrear una consulta hasta un cliente. gopassivedns fue diseñado para implementarse en sus resolutores sin cambios en la configuración del resolutor y/o en las salidas de red, registrar de manera centralizada a través de un protocolo confiable y analizarse simplemente en cualquier sistema de registro.

¿Por qué no usar simplemente el registro de consultas del resolutor?

El soporte de los resolutores para el registro de consultas, que incluya tanto la pregunta como la respuesta, es irregular en el mejor de los casos. Uno de los servidores DNS más implementados, BIND, no lo soporta en absoluto. Otros, como Windows DNS, tienen formatos de registro realmente horribles. Además, el registro basado en red capturará consultas enviadas directamente a servidores remotos (por ejemplo, Google DNS) desde sus clientes.

Uso

Las opciones de configuración se pueden especificar como variables de entorno, en un archivo .env o en la línea de comandos. La prioridad es: banderas de línea de comandos, archivo .env y finalmente variables ya definidas en el entorno. Las opciones de configuración son las siguientes:

  • -dev [dispositivo] dispositivo de red para la captura (ENV: PDNS_DEV)
  • -fluentd_socket [socket] Ruta al socket Unix de Fluentd utilizado para el registro en formato messagepack (ENV: PDNS_FLUENTD_SOCKET)
  • -bpf [filtro bpf] Filtro BPF para la captura (predeterminado: puerto 53) (ENV: PDNS_BPF)
  • -pcap [archivo] archivo pcap a procesar (ENV: PDNS_PCAP_FILE)
  • -logfile [archivo] archivo de registro para búsquedas DNS (recomendado solo para implementaciones pequeñas o depuración) (ENV: PDNS_LOG_FILE)
  • -logMaxAge edad máxima de un archivo de registro antes de la rotación, en días (predeterminado: 28) (ENV: PDNS_LOG_AGE)
  • -logMaxBackups número máximo de archivos conservados después de la rotación (predeterminado: 3) (ENV: PDNS_LOG_BACKUP)
  • -logMaxSize tamaño máximo del archivo de registro antes de la rotación, en MB (predeterminado: 100) (ENV: PDNS_LOG_SIZE)
  • -quiet no registrar búsquedas DNS en STDOUT (ENV: PDNS_QUIET)
  • -debug habilitar registro de depuración en STDOUT (ENV: PDNS_DEBUG)
  • -gc_age [num] edad a la cual las conexiones incompletas deben ser recolectadas como basura (predeterminado: -1m) (ENV: PDNS_GC_AGE)
  • -gc_interval [num] intervalo en el que debe ejecutarse el GC en la tabla de conexiones (predeterminado: 3m) (ENV: PDNS_GC_INTERVAL)
  • -kafka_brokers [brokers] lista separada por comas de brokers de Kafka (ENV: PDNS_KAFKA_PEERS)
  • -kafka_topic [topic] tema de Kafka para el registro (ENV: PDNS_KAFKA_TOPIC)
  • -cpuprofile [archivo] habilitar perfilado de CPU (ENV: PDNS_PROFILE_FILE)
  • -numprocs [num] número de goroutines para usar en el análisis de datos de paquetes (predeterminado: 8) (ENV: PDNS_THREADS)
  • -pfring usar PF_RING para la captura de paquetes (ENV: PDNS_PFRING)
  • -statsd_host host y puerto de su servidor statsd (ej. localhost:8125) (ENV: PDNS_STATSD_HOST)
  • -statsd_interval el intervalo, en segundos, entre envíos a statsd (ENV: PDNS_STATSD_INTERVAL)
  • -statsd_prefix el prefijo del nombre de la métrica a usar (por defecto, gopassivedns) (ENV: PDNS_STATSD_PREFIX)
  • -snaplen [int] la longitud de captura (snaplen) utilizada para el buffer de pcap
  • -name el nombre de este sensor para usar en estadísticas y mensajes de registro (por defecto, el nombre del host) (ENV: PDNS_NAME)
  • -syslog_facility facilidad de syslog (ENV: PDNS_SYSLOG_FACILITY)
  • -syslog_priority prioridad de syslog (ENV: PDNS_SYSLOG_PRIORITY)

Debe proporcionar -dev o -pcap.

Existen problemas conocidos con goroutines y el proceso estándar de daemonización (https://github.com/golang/go/issues/227), por lo que recomiendo encarecidamente que use uno de los métodos detallados aquí: http://stackoverflow.com/questions/10067295/how-to-start-a-go-program-as-a-daemon-in-ubuntu para ejecutar este proceso como un demonio utilizando herramientas del sistema.

Si elige usar el registro de syslog, usamos el "log/syslog" de Go, que requiere un socket Unix para comunicarse con syslog, ubicado en /dev/log, /var/run/log o /var/run/syslog.

Guía de implementación

¿Dónde implemento esto?

Tiene 3 opciones: implementarlo en su(s) resolutor(es), en su(s) puerta(s) de enlace o en ambos. Implementarlo en sus resolutores es bueno porque obtendrá la dirección IP del cliente que envió la solicitud original. También puede ver el tramo ascendente de la solicitud (del resolutor al siguiente resolutor en la cadena), a menos que ajuste su filtro BPF para ignorar ese tramo. Implementarlo en sus puertas de enlace significa que no ve el tramo cliente -> resolutor interno, por lo que puede ser difícil vincular una solicitud a un cliente específico. Por otro lado, verá solicitudes que eluden sus resolutores internos. También, por supuesto, verá las consultas que provienen del resolutor hacia el resolutor ascendente que utiliza. En un mundo ideal, implementaría esta herramienta en cada uno de mis resolutores internos y en un punto de acceso (tap) en mis puertas de enlace. Los resolutores internos tendrían un filtro BPF que ignore el tramo ascendente de la consulta, y la puerta de enlace no ignoraría nada.

¿Qué debo hacer con los resultados?

Por ahora, recomendaría usar logstash para enviar los registros a un clúster de elasticsearch. Todos los registros están en JSON, por lo que esto debería ser bastante fácil. También sugeriría usar algo como HDFS para almacenamiento a largo plazo y análisis masivo. ¡Las consultas DNS son una fuente increíble de datos internos!

Compilación e instalación

  • clonar este repositorio
  • instalar libpcap, libpcap-dev
  • 'go get'
  • 'go build -o gopassivedns' (el -o es realmente solo por precaución, asumiendo que clonó el repositorio no debería necesitarlo)
  • 'cp gopassivedns /some/path/to/gopassivedns'
Descargar herramienta