Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
gopassivedns — Сетевой пассивный регистратор DNS, захватывающий и регистрирующий DNS-запросы из живого трафика или файлов pcap, выводящий JSON для интеграции с платформами SIEM и threat intelligence. | Kitploit
Инструменты/GitHubGitHub/phillipmartin/gopassivedns
Сниффинг и анализ пакетовСбор информацииСетевая безопасностьРазведка угрозАнализ DNS
GitHubphillipmartin/gopassivedns

gopassivedns

Сетевой пассивный регистратор DNS, захватывающий и регистрирующий DNS-запросы из живого трафика или файлов pcap, выводящий JSON для интеграции с платформами SIEM и threat intelligence.

Репозиторий
126246 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Coverage Status Build Status

gopassivedns

DNS-логгер на основе захвата сетевого трафика в Go

Краткое описание

DNS-логгер на основе захвата сетевого трафика, вдохновлённый проектом https://github.com/gamelinux/passivedns. Он использует gopacket для работы с libpcap и обработки пакетов, а также выводит логи в формате JSON. Предназначен для обработки большого объёма запросов в средах с количеством DNS-резолверов от одного до сотен.

Почему не использовать PassiveDNS от gamelinux?

Это хороший выбор. Я создал этот инструмент, потому что считаю, что задачи, связанные с обработкой больших объёмов непроверенных данных с множеством плохо задокументированных крайних случаев, должны выполняться управляемой средой выполнения для предотвращения атак, связанных с повреждением памяти. Я развернул PassiveDNS в нескольких организациях и создал gopassivedns для решения нескольких конкретных проблем, с которыми столкнулся: мне нужно было инструментировать множество мест, масштабировать уровень хранения для обработки ОГРОМНОГО количества запросов, и я хотел иметь набор тестов с хорошим покрытием всех крайних случаев DNS.

Почему не использовать Bro (или подставьте другую систему IDS для логирования DNS)?

Тоже хороший выбор. Системы, такие как Bro, обычно развёртываются на сетевых выходах, что приводит к сокрытию реального источника запроса за вашими рекурсивными резолверами. Это означает, что вам обычно нужно развернуть Bro и вести логирование запросов резолверов (если это возможно), а затем интегрировать логи из обеих систем в центральную систему логирования для отслеживания запроса до клиента. gopassivedns был спроектирован для развёртывания на ваших резолверах без изменений их конфигурации и/или на сетевых выходах, для централизованного логирования по надёжному протоколу и простого разбора в любую систему логирования.

Почему бы просто не использовать логирование запросов резолвера?

Поддержка резолверами логирования запросов, включая как вопрос, так и ответ, в лучшем случае неравномерная. Один из самых распространённых DNS-серверов, BIND, вообще его не поддерживает. Другие, например Windows DNS, имеют ужасные форматы логов. Кроме того, сетевое логирование позволяет перехватывать запросы, отправленные напрямую на удалённые серверы (например, Google DNS) от ваших клиентов.

Использование

Параметры конфигурации можно указать через переменные окружения, в файле .env или в командной строке. Приоритет: флаги командной строки, файл .env, затем переменные, уже определённые в окружении. Параметры конфигурации перечислены ниже.

  • -dev [device] сетевое устройство для захвата (ENV: PDNS_DEV)
  • -fluentd_socket [socket] Путь к UNIX-сокету Fluentd для логирования в формате messagepack (ENV: PDNS_FLUENTD_SOCKET)
  • -bpf [bpf filter] BPF-фильтр для захвата (по умолчанию: port 53) (ENV: PDNS_BPF)
  • -pcap [file] pcap-файл для обработки (ENV: PDNS_PCAP_FILE)
  • -logfile [file] файл лога для DNS-запросов (рекомендуется только для небольших развёртываний или отладки) (ENV: PDNS_LOG_FILE)
  • -logMaxAge максимальный возраст файла лога до ротации, в днях (по умолчанию: 28) (ENV: PDNS_LOG_AGE)
  • -logMaxBackups максимальное количество файлов, сохраняемых после ротации (по умолчанию: 3) (ENV: PDNS_LOG_BACKUP)
  • -logMaxSize максимальный размер файла лога до ротации, в МБ (по умолчанию: 100) (ENV: PDNS_LOG_SIZE)
  • -quiet не выводить DNS-запросы в STDOUT (ENV: PDNS_QUIET)
  • -debug включить отладочное логирование в STDOUT (ENV: PDNS_DEBUG)
  • -gc_age [num] возраст, при котором незавершённые соединения должны быть собраны сборщиком мусора (по умолчанию: -1m) (ENV: PDNS_GC_AGE)
  • -gc_interval [num] интервал, с которым GC должен запускаться на таблице соединений (по умолчанию: 3m) (ENV: PDNS_GC_INTERVAL)
  • -kafka_brokers [brokers] список брокеров Kafka через запятую (ENV: PDNS_KAFKA_PEERS)
  • -kafka_topic [topic] топик Kafka для логирования (ENV: PDNS_KAFKA_TOPIC)
  • -cpuprofile [file] включить профилирование CPU (ENV: PDNS_PROFILE_FILE)
  • -numprocs [num] количество горутин для разбора данных пакетов (по умолчанию: 8) (ENV: PDNS_THREADS)
  • -pfring использовать PF_RING для захвата пакетов (ENV: PDNS_PFRING)
  • -statsd_host хост и порт вашего statsd-сервера (например, localhost:8125) (ENV: PDNS_STATSD_HOST)
  • -statsd_interval интервал в секундах между отправками на statsd (ENV: PDNS_STATSD_INTERVAL)
  • -statsd_prefix префикс имени метрики для использования (по умолчанию: gopassivedns) (ENV: PDNS_STATSD_PREFIX)
  • -snaplen [int] длина захвата (snaplen), используемая для буфера pcap
  • -name имя этого сенсора для использования в статистике и сообщениях лога (по умолчанию: hostname) (ENV: PDNS_NAME)
  • -syslog_facility средство syslog (ENV: PDNS_SYSLOG_FACILITY)
  • -syslog_priority приоритет syslog (ENV: PDNS_SYSLOG_PRIORITY)

Вы должны указать либо -dev, либо -pcap.

Существуют известные проблемы с горутинами и стандартным процессом демонизации (https://github.com/golang/go/issues/227), поэтому я настоятельно рекомендую использовать один из методов, описанных здесь: http://stackoverflow.com/questions/10067295/how-to-start-a-go-program-as-a-daemon-in-ubuntu, чтобы запустить этот процесс как демон с помощью системных инструментов.

Если вы решите использовать логирование через syslog, мы используем пакет golang "log/syslog", который требует, чтобы UNIX-сокет для связи с syslog находился в одном из следующих мест: /dev/log, /var/run/log или /var/run/syslog.

Руководство по развёртыванию

Где развернуть этот инструмент?

У вас есть 3 варианта: развернуть его на ваших резолверах, на ваших шлюзах или и там, и там. Развёртывание на резолверах хорошо тем, что вы получите IP-адрес клиента, отправившего исходный запрос. Вы также сможете видеть восходящий участок запроса (от резолвера к следующему резолверу в цепочке), если не настроите BPF-фильтр на игнорирование этого участка. Развёртывание на шлюзах означает, что вы не видите участок клиент -> внутренний резолвер, поэтому может быть сложно связать запрос с конкретным клиентом. С другой стороны, вы увидите запросы, которые обходят ваши внутренние резолверы. Вы также, конечно, увидите запросы, идущие от резолвера к вышестоящему резолверу, который он использует. В идеальном мире я бы развернул этот инструмент на каждом из моих внутренних резолверов и на ответвлении от шлюзов. Внутренние резолверы имели бы BPF-фильтр, игнорирующий восходящий участок запроса, а шлюз не игнорировал бы ничего.

Что делать с результатами?

На данный момент я рекомендую использовать logstash для отправки логов в кластер elasticsearch. Все логи в формате JSON, так что это должно быть довольно просто. Я также предлагаю использовать что-то вроде HDFS для долгосрочного хранения и массового анализа. DNS-запросы — это удивительный источник внутренних данных!

Сборка и установка

  • клонируйте этот репозиторий
  • установите libpcap, libpcap-dev
  • 'go get'
  • 'go build -o gopassivedns' (флаг -o на самом деле просто для осторожности; если вы клонировали репозиторий, он не должен понадобиться)
  • 'cp gopassivedns /some/path/to/gopassivedns'
Скачать инструмент