
Renifle le trafic sortant à la recherche de rappels suspects ressemblant à des balises, car si ça revient régulièrement, ce n'est probablement pas le petit-déjeuner.
Sniffe le trafic sortant pour les rappels suspects de type beacon, car si ça revient régulièrement, ce n'est probablement pas le petit-déjeuner.
Bacon Sampler est un capteur léger de connexions sortantes qui renifle le grésillement de votre trafic réseau et signale les comportements suspects de type « beacon » – ces rappels périodiques, lents et discrets que les malwares adorent utiliser pour communiquer avec leur serveur de commande.
Il surveille passivement les connexions sortantes et les requêtes DNS, puis met en évidence des schémas tels que des intervalles réguliers, des destinations répétées, une gigue étrange et des tailles de paquets cohérentes – en gros, tout ce qui ressemble moins à une navigation normale qu'à un bot qui se connecte pour recevoir des instructions.
Considérez-le comme un Scanner de Beacons, mais plus savoureux : si quelque chose revient exactement à la même heure à chaque fois… nous goûtons le bacon.
.mmdb) ou DB-IP Lite (.mmdb).BIN)pip install -r requirements.txt
Téléchargez une base GeoIP et notez le chemin :
.mmdb).BIN)Si vous préférez une recherche en ligne gratuite, vous pouvez ignorer cette étape et utiliser --geoip-online.
Lister les interfaces :
python capture_outbound.py --list-interfaces
Choisir une interface par son index :
python capture_outbound.py --interface 0
Utiliser plusieurs interfaces (répétable) :
python capture_outbound.py --interface "Ethernet" --interface "Wi-Fi"
Ou avec des noms séparés par des virgules :
python capture_outbound.py --interfaces "Ethernet,Wi-Fi"
Capture Pcap uniquement (A) avec GeoIP hors ligne :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
Pcap + corrélation netstat (B) avec GeoIP hors ligne :
python capture_outbound.py --mode pcap_plus_netstat --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
Pcap + netstat union (A+B) :
python capture_outbound.py --mode both --duration 20 --interface "Ethernet" --geoip-db "C:\Path\GeoLite2-Country.mmdb"
GeoIP en ligne (gratuit, limité en taux, mis en cache sur disque) :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipapi
GeoIP en ligne avec token IPinfo :
$env:IPINFO_TOKEN="your_token_here"
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipinfo
Ou passer le token explicitement :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipinfo --geoip-online-token "your_token_here"
Ajuster le délai d'attente et les tentatives de GeoIP en ligne :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --geoip-online ipapi --geoip-timeout 2.5 --geoip-retries 1
Désactiver le DNS inversé (exécutions plus rapides) :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --no-dns
Ajuster le délai d'attente DNS :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --dns-timeout 0.5
Limiter la capture par nombre de paquets :
python capture_outbound.py --mode pcap --duration 60 --packet-limit 5000
Filtrer par protocole, port distant et 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
Résumés par groupe et N premiers :
python capture_outbound.py --group-by remote_ip,process --top 10
Suivre le nombre total d'octets par connexion :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --track-bytes
Désactiver la sortie de progression :
python capture_outbound.py --no-progress
Désactiver la sortie console :
python capture_outbound.py --no-console
Pcap + netstat union (A+B) + GeoIP en ligne + Écrire un 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 uniquement + dossier de sortie + noms CSV/JSON personnalisés :
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"
Détection d'activité de type beacon (rappels lents et discrets) :
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
Détection de schémas (intervalles réguliers, gigue, destinations répétées, tailles cohérentes) :
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
Seuils beacon + schémas serrés avec filtrage :
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
Capture centrée DNS (résolution DNS rapide + schémas 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/jsonChemins CSV/JSON de sortie personnalisés :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --csv "C:\Path\outbound.csv" --json "C:\Path\outbound.json"
Envoyer toutes les sorties vers un dossier :
python capture_outbound.py --mode pcap --duration 20 --output-dir "C:\Path\Reports"
Écrire la sortie HTML :
python capture_outbound.py --html "outbound.html"
Écrire un fichier pcap :
python capture_outbound.py --mode pcap --duration 20 --interface "Ethernet" --pcap-out "capture.pcap"
--mode {pcap,pcap_plus_netstat,both} : Stratégie de capture (par défaut : pcap)--duration SECONDS : Durée de capture (par défaut : 15)--packet-limit COUNT : Arrêter après N paquets (0 = illimité)--list-interfaces : Afficher les interfaces Npcap et quitter--interface NAME : Nom de l'interface de capture (répétable)--interfaces "NAME,NAME" : Noms d'interface séparés par des virgules--filter-protocol tcp,udp : Filtre de protocole (répétable ou séparé par des virgules)--filter-port 80,443,1000-2000 : Filtres de port distant--allow-ip CIDR : Autoriser les CIDR IP distants--deny-ip CIDR : Refuser les CIDR IP distants--group-by remote_ip,process,country : Sortie de résumé par groupe--top N : Limiter les résumés par groupe aux N premières lignes--beacon-min-duration SECONDS : Durée minimale pour la détection de beacon--beacon-min-packets COUNT : Nombre minimum de paquets pour la détection de beacon--beacon-min-interval SECONDS : Intervalle moyen minimum pour la détection de beacon--beacon-max-interval SECONDS : Intervalle moyen maximum pour la détection de beacon--beacon-max-jitter SECONDS : Gigue d'intervalle maximum pour la détection de beacon--beacon-max-rate PPS : Paquets par seconde maximum pour la détection de beacon--pattern-high-jitter SECONDS : Seuil de gigue d'intervalle pour les schémas randomisés--pattern-repeat-destination COUNT : Connexions minimales pour signaler les destinations répétées--pattern-max-byte-jitter BYTES : Plage de taille d'octet maximale pour la cohérence--dns-pattern-min-queries COUNT : Requêtes DNS minimales pour signaler des schémas--csv PATH : Chemin de sortie CSV (par défaut : outbound_connections.csv)--json PATH : Chemin de sortie JSON (par défaut : outbound_connections.json)--html PATH : Chemin de sortie du rapport HTML--pcap-out PATH : Écrire les paquets capturés dans un pcap--output-dir PATH : Écrire tous les fichiers de sortie dans ce répertoire--no-console : Désactiver la sortie du tableau console--no-progress : Désactiver la sortie de progression--log-json : Émettre les avertissements/erreurs sous forme de lignes JSON sur stderr--track-bytes : Suivre le nombre total d'octets par connexion lorsque disponible--geoip-db PATH : Chemin de la base de données GeoIP (.mmdb ou IP2Location .BIN)--geoip-db-type {auto,maxmind,dbip,ip2location} : Type de base GeoIP (par défaut : auto)--geoip-online {ipapi,ip-api,ipinfo} : Utiliser un service GeoIP en ligne gratuit (limité en taux)--geoip-online-token TOKEN : Jeton API pour le fournisseur GeoIP en ligne (ex. IPinfo)--geoip-cache-path PATH : Remplacer le chemin du cache JSON GeoIP en ligne--geoip-timeout SECONDS : Délai d'attente de la requête GeoIP en ligne (par défaut : 3.0)--geoip-retries COUNT : Nombre de tentatives de GeoIP en ligne (par défaut : 2)--no-dns : Désactiver la recherche DNS inversée--dns-timeout SECONDS : Délai d'attente de la recherche DNS (par défaut : 2.0)Les sorties principales (--csv/--json) incluent les champs :
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 (lorsque --track-bytes est activé)Les sorties dérivées incluent :
remote_ip, remote_port, remote_hostname, remote_fqdn, remote_countrypid, process_name, connection_count, unique_remote_ipsremote_ip, process, ou countrybeacon_reasonpattern_type/pattern_reason,
byte_min/byte_max/byte_range (avec --track-bytes), et totaux de destinationdns_query, query_count, IP/port du résolveur, détails du schéma, et
byte_min/byte_max/byte_range (avec --track-bytes)--mode pcap_plus_netstat enrichit uniquement les connexions capturées avec les données PID/processus.--mode both ajoute les connexions netstat uniquement à la sortie finale.2 après avoir écrit les sorties.--log-json formate les avertissements/erreurs sous forme de lignes JSON (utile pour l'ingestion).--duration est en secondes.--packet-limit arrête la capture après N paquets même si la durée reste.--no-dns ignore la résolution DNS inversée (hostname/FQDN seront vides).--dns-timeout contrôle les délais d'attente de recherche DNS (secondes).geoip_online_cache.json dans le répertoire de sortie (ou le répertoire de travail) sauf si remplacé par --geoip-cache-path.--geoip-db-type auto utilise l'extension de fichier : .mmdb -> MaxMind/DB-IP, .BIN -> IP2Location.US) au lieu des noms complets de pays.--geoip-db est omis, la colonne remote_country est laissée vide sauf si --geoip-online est utilisé.--geoip-db et --geoip-online sont tous deux définis, la base de données est utilisée.--filter-port s'applique au port distant (destination sortante).--track-bytes ajoute des colonnes byte_count et active les schémas de cohérence de taille.