
Перехватывает исходящий трафик на предмет подозрительных, похожих на маяки обратных вызовов, потому что если он возвращается по расписанию, это, вероятно, не завтрак.
Отслеживает исходящий трафик на предмет подозрительных, похожих на маячки обратных вызовов, потому что если что-то регулярно возвращается по расписанию — это, скорее всего, не завтрак.
Bacon Sampler — это лёгкий перехватчик исходящих соединений, который «чует запах» вашего сетевого трафика и помечает подозрительное поведение, напоминающее маячки — те периодические, медленные и малозаметные обратные вызовы, которые так любит использовать вредоносное ПО для связи с «домом».
Он пассивно отслеживает исходящие соединения и DNS-запросы, а затем выделяет такие паттерны, как постоянные интервалы, повторяющиеся адресаты, необычный джиттер и одинаковые размеры пакетов — в общем, всё, что больше похоже на проверку связи ботом за инструкциями, чем на обычный просмотр веб-страниц.
Воспринимайте его как сканер маяков (Beacon Scanner), только вкуснее: если что-то возвращается в одно и то же время каждый раз... значит, мы пробуем бекон (sampling the bacon).
.mmdb) или DB-IP Lite (.mmdb).BIN)pip install -r requirements.txt
Скачайте базу данных GeoIP и запомните путь:
.mmdb).BIN)Если предпочитаете бесплатный онлайн-сервис, можно пропустить этот шаг и использовать --geoip-online.
Перечислить интерфейсы:
python capture_outbound.py --list-interfaces
Выбрать интерфейс по индексу:
python capture_outbound.py --interface 0
Использовать несколько интерфейсов (повторяемый параметр):
python capture_outbound.py --interface "Ethernet" --interface "Wi-Fi"
Или с именами через запятую:
python capture_outbound.py --interfaces "Ethernet,Wi-Fi"
Захват только pcap (A) с офлайн GeoIP:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
Корреляция pcap + netstat (B) с офлайн GeoIP:
python capture_outbound.py --mode pcap_plus_netstat --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
Объединение pcap + netstat (A+B):
python capture_outbound.py --mode both --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
Онлайн GeoIP (бесплатно, с ограничением скорости, кэшируется на диск):
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipapi
Онлайн GeoIP с токеном IPinfo:
$env:IPINFO_TOKEN="your_token_here"
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipinfo
Или передать токен явно:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipinfo --geoip-online-token "your_token_here"
Настройка тайм-аута и повторных попыток онлайн GeoIP:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipapi --geoip-timeout 2.5 --geoip-retries 1
Отключить обратный DNS (для более быстрой работы):
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --no-dns
Настройка тайм-аута DNS:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --dns-timeout 0.5
Ограничить захват по количеству пакетов:
python capture_outbound.py --mode pcap --duration 60 --packet-limit 5000
Фильтровать по протоколу, удалённому порту и CIDR IP:
python capture_outbound.py --filter-protocol tcp --filter-port 80,443,1000-2000 --allow-ip 1.2.3.0/24 --deny-ip 1.2.3.4/32
Групповые сводки и top N:
python capture_outbound.py --group-by remote_ip,process --top 10
Отслеживать общее количество байт на соединение:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --track-bytes
Отключить вывод прогресса:
python capture_outbound.py --no-progress
Отключить вывод в консоль:
python capture_outbound.py --no-console
Объединение pcap + netstat (A+B) + онлайн GeoIP + запись pcap + CSV + HTML:
python capture_outbound.py --mode both --duration 20 --interface "Ethernet,Wi-Fi" --geoip-online ipapi --pcap-out "C:\Path\capture.pcap" --csv "C:\Path\outbound.csv" --html "C:\Path\outbound.html"
Только pcap + папка вывода + пользовательские имена CSV/JSON:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --output-dir "C:\Path\Reports" --csv "C:\Path\Reports\outbound.csv" --json "C:\Path\Reports\outbound.json"
Обнаружение активности, похожей на маячки (медленные обратные вызовы):
python capture_outbound.py --duration 300 --beacon-min-duration 120 --beacon-min-interval 60 --beacon-max-interval 1800 --beacon-max-jitter 10 --beacon-min-packets 6 --beacon-max-rate 0.05
Обнаружение паттернов (постоянные интервалы, джиттер, повторяющиеся адресаты, одинаковые размеры):
python capture_outbound.py --duration 300 --track-bytes --pattern-high-jitter 120 --pattern-repeat-destination 4 --pattern-max-byte-jitter 64 --dns-pattern-min-queries 4
Жёсткие пороги маячков и паттернов с фильтрацией:
python capture_outbound.py --duration 600 --filter-protocol tcp --filter-port 443 --track-bytes --beacon-min-duration 180 --beacon-min-interval 90 --beacon-max-interval 900 --beacon-max-jitter 5 --beacon-min-packets 8 --pattern-high-jitter 60 --pattern-repeat-destination 5 --pattern-max-byte-jitter 32
Захват, ориентированный на DNS (быстрый DNS-запрос + DNS-паттерны):
python capture_outbound.py --duration 180 --dns-timeout 0.25 --dns-pattern-min-queries 5 --pattern-repeat-destination 3
outbound_connections.csvoutbound_connections.json--html "report.html"*_beacon_findings.csv / *_beacon_findings.json*_connection_patterns.csv / *_connection_patterns.json*_dns_patterns.csv / *_dns_patterns.json*_unique_connections.csv / *_unique_connections.json*_unique_processes.csv / *_unique_processes.json*_group_remote_ip*.csv/json, *_group_process*.csv/json, *_group_country*.csv/jsonПользовательские пути для CSV/JSON:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --csv "C:\Path\outbound.csv" --json "C:\Path\outbound.json"
Отправить все выводы в папку:
python capture_outbound.py --mode pcap --duration 20 --output-dir "C:\Path\Reports"
Записать HTML-вывод:
python capture_outbound.py --html "outbound.html"
Записать pcap-файл:
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --pcap-out "capture.pcap"
--mode {pcap,pcap_plus_netstat,both}: Стратегия захвата (по умолчанию: pcap)--duration SECONDS: Продолжительность захвата (по умолчанию: 15)--packet-limit COUNT: Остановить после N пакетов (0 = без ограничения)--list-interfaces: Показать интерфейсы Npcap и выйти--interface NAME: Имя интерфейса захвата (повторяемый параметр)--interfaces "NAME,NAME": Имена интерфейсов через запятую--filter-protocol tcp,udp: Фильтр по протоколу (повтор или через запятую)--filter-port 80,443,1000-2000: Фильтры удалённых портов--allow-ip CIDR: Разрешить удалённые IP CIDR (один или несколько)--deny-ip CIDR: Запретить удалённые IP CIDR (один или несколько)--group-by remote_ip,process,country: Вывод групповой сводки--top N: Ограничить групповые сводки первыми N строками--beacon-min-duration SECONDS: Минимальная длительность для обнаружения маячка--beacon-min-packets COUNT: Минимальное количество пакетов для обнаружения маячка--beacon-min-interval SECONDS: Минимальный средний интервал для обнаружения маячка--beacon-max-interval SECONDS: Максимальный средний интервал для обнаружения маячка--beacon-max-jitter SECONDS: Максимальный джиттер интервала для обнаружения маячка--beacon-max-rate PPS: Максимум пакетов в секунду для обнаружения маячка--pattern-high-jitter SECONDS: Порог джиттера интервала для выявления случайных паттернов--pattern-repeat-destination COUNT: Минимальное число соединений для пометки повторяющихся адресатов--pattern-max-byte-jitter BYTES: Максимальный разброс размера байт для определения постоянства--dns-pattern-min-queries COUNT: Минимальное количество DNS-запросов для пометки паттернов--csv PATH: Путь для вывода CSV (по умолчанию: outbound_connections.csv)--json PATH: Путь для вывода JSON (по умолчанию: outbound_connections.json)--html PATH: Путь для вывода HTML-отчёта--pcap-out PATH: Запись захваченных пакетов в pcap-файл--output-dir PATH: Запись всех выходных файлов в эту директорию--no-console: Отключить вывод таблицы в консоль--no-progress: Отключить вывод прогресса--log-json: Выводить предупреждения/ошибки в виде JSON-строк в stderr--track-bytes: Отслеживать общее количество байт на соединение, если доступно--geoip-db PATH: Путь к базе данных GeoIP (.mmdb или IP2Location .BIN)--geoip-db-type {auto,maxmind,dbip,ip2location}: Тип базы GeoIP (по умолчанию: auto)--geoip-online {ipapi,ip-api,ipinfo}: Использовать бесплатный онлайн-сервис GeoIP (с ограничением скорости)--geoip-online-token TOKEN: Токен API для провайдера онлайн GeoIP (например, IPinfo)--geoip-cache-path PATH: Переопределить путь к файлу кэша онлайн GeoIP JSON--geoip-timeout SECONDS: Тайм-аут запроса онлайн GeoIP (по умолчанию: 3.0)--geoip-retries COUNT: Количество повторных попыток онлайн GeoIP (по умолчанию: 2)--no-dns: Отключить обратный DNS-запрос--dns-timeout SECONDS: Тайм-аут DNS-запроса (по умолчанию: 2.0)Основные выходные данные (--csv/--json) содержат поля:
protocol, local_ip, local_portremote_ip, remote_port, remote_hostname, remote_fqdn, remote_countrypid, process_name, packet_countduration_seconds, avg_interval_seconds, interval_jitter_secondsfirst_seen, last_seen, sourcebyte_count (если включён --track-bytes)Производные выходные данные включают:
remote_ip, remote_port, remote_hostname, remote_fqdn, remote_countrypid, process_name, connection_count, unique_remote_ipsremote_ip, process или countrybeacon_reasonpattern_type/pattern_reason,
byte_min/byte_max/byte_range (с --track-bytes) и общее количество адресатовdns_query, query_count, IP/порт резолвера, детали паттерна и
byte_min/byte_max/byte_range (с --track-bytes)--mode pcap_plus_netstat только дополняет захваченные соединения данными PID/процесса.--mode both добавляет в итоговый вывод соединения, полученные только через netstat.2 после записи выходных данных.--log-json форматирует предупреждения/ошибки в виде JSON-строк (полезно для машинного ввода).--duration задаётся в секундах.--packet-limit останавливает захват после N пакетов, даже если время ещё не вышло.--no-dns пропускает обратное DNS-разрешение (hostname/FQDN будут пусты).--dns-timeout управляет тайм-аутом DNS-запроса (секунды).geoip_online_cache.json в выходной директории (или рабочей директории), если не указано другое с помощью --geoip-cache-path.--geoip-db-type auto определяет тип по расширению файла: .mmdb -> MaxMind/DB-IP, .BIN -> IP2Location.US) вместо полных названий стран.--geoip-db опущен, столбец remote_country остаётся пустым, если не используется --geoip-online.--geoip-db, и --geoip-online, используется база данных.--filter-port применяется к удалённому порту (исходящий адресат).--track-bytes добавляет столбцы byte_count и включает паттерны постоянства размера.