🍯

Mini Projet Honeypot

Système piège pour attirer et analyser les attaques informatiques

← Retour aux projets

Introduction au projet

Dans le cadre de ma Licence AIS (Administration et sécurité des systèmes et réseaux), j'ai réalisé la mise en place d'un Honeypot SSH (pot de miel en français), un système piège destiné à attirer les hackers pour analyser leurs méthodes et comprendre leurs objectifs.

L'objectif principal de ce projet était de détecter et analyser les tentatives d'intrusion SSH sur mon réseau en temps réel.

Qu'est-ce qu'un Honeypot ?

🎣

Principe

Un système volontairement vulnérable qui simule des services réels pour attirer les attaquants

🔍

Observation

Permet d'étudier les techniques d'attaque et de collecter des données sur les menaces

🛡️

Protection

Détourne les attaquants des vrais systèmes de production tout en les surveillant

📊

Analyse

Collecte d'informations précieuses sur les méthodes et objectifs des attaquants

🛠️ Technologies utilisées

🐍

OpenCanary

Framework Python open-source pour créer des honeypots personnalisables

💬

Discord Webhook

Notifications en temps réel des tentatives d'intrusion

🐧

Ubuntu server 24.04

Système d'exploitation hébergeant le honeypot

🐍

Python 3

Scripts personnalisés pour l'automatisation et les alertes

🏗️ Architecture du système

👨‍💻

Attaquant

Tente de se connecter aux services exposés

🍯

Honeypot OpenCanary

Simule une connexion SSH

🐍

Script Python

Traite et formate les logs

💬

Discord

Notification instantanée

⚙️ Configuration OpenCanary

Voici le fichier de configuration opencanary.conf qui définit les services simulés et les paramètres de notification :

Configuration Opencanary
{
    "device.node_id": "opencanary-1",

    "ip.ignorelist": [],
    "logtype.ignorelist": [],

    "ssh.enabled": true,
    "ssh.port": 2222,
    "ssh.version": "SSH-2.0-OpenSSH_5.1p1 Debian-4",

    "logger": {
        "class": "PyLogger",
        "kwargs": {
            "formatters": {
                "plain": {
                    "format": "%(message)s"
                }
            },
            "handlers": {
                "file": {
                    "class": "logging.FileHandler",
                    "filename": "/var/tmp/opencanary.log"
                },
                "console": {
                    "class": "logging.StreamHandler",
                    "stream": "ext://sys.stdout"
                }
            }
        },
        "handlers": ["file", "console"]
    },

    "portscan.enabled": false,
    "smb.enabled": false,
    "mysql.enabled": false,
    "redis.enabled": false,
    "rdp.enabled": false,
    "sip.enabled": false,
    "snmp.enabled": false,
    "ntp.enabled": false,
    "tftp.enabled": false,
    "telnet.enabled": false,
    "mssql.enabled": false,
    "vnc.enabled": false
}

📝 Points clés de la configuration :

  • Service simulé : SSH (sur le port 2222, à des fins pédogogiques)
  • Logging : Tous les événements sont enregistrés dans /var/log/opencanary.log
  • Détection de connexions SSH : Inscrit dans les logs toute tentative de connexion SSH

🐍 Script Python de notification

Ce script surveille les logs d'OpenCanary et envoie une notification Discord à chaque tentative d'intrusion :

Python
#!/usr/bin/env python3
import time
import json
import requests

WEBHOOK_URL = "https://discord.com/api/webhooks/votre/url"
LOG_FILE = "/var/tmp/opencanary.log"

def send_discord(message):
    payload = {"content": message}
    try:
        requests.post(WEBHOOK_URL, json=payload, timeout=5)
    except Exception as e:
        print("Erreur envoi Discord:", e)

def format_event(event):
    logtype = event.get("logtype")
    src = event.get("src_host")
    dst_port = event.get("dst_port")
    data = event.get("logdata", {})

    message = f"🚨 **Nouvelle connexion entrante** 🚨\n"
    message += f"IP: {src}\n"
    message += f"Port: {dst_port}\n"
    message += f"Type: {logtype}\n"

    if isinstance(data, dict):
        message += f"Détails: {data}\n"

    return message

def follow_log():
    with open(LOG_FILE, "r") as f:
        f.seek(0, 2)  # Aller à la fin du fichier

        while True:
            line = f.readline()
            if not line:
                time.sleep(1)
                continue

            try:
                event = json.loads(line.strip())

                # SSH auth = 4002
                # FTP auth = 3001
                if event.get("logtype") in [4002, 3001]:
                    msg = format_event(event)
                    send_discord(msg)

            except json.JSONDecodeError:
                continue

if __name__ == "__main__":
    print("Surveillance OpenCanary démarrée...")
    follow_log()

🔧 Fonctionnalités du script :

  • Surveillance en temps réel : détecter les modifications du fichier de logs
  • Parsing intelligent : Extrait automatiquement les informations pertinentes (IP, port, credentials, etc.)
  • Notifications Discord : Envoie des messages formatés avec des couleurs selon le type d'attaque

💬 Exemple d'alerte Discord

Voici à quoi ressemble une notification Discord en temps réel lorsqu'une tentative d'intrusion est détectée :

Alerte Discord Honeypot

Notification Discord montrant une tentative de connexion SSH avec les credentials utilisés

📊 Informations affichées :

  • 🎯 Type d'attaque : SSH (4002 numéro correspondant au type d'authentification SSH)
  • 🌍 Adresse IP source : Localisation de l'adresse IP de l'attaquant
  • 🎪 Port ciblé : Le port 2222, utilisé à des fins pédagogiques, le port 22 serait plus pertinent
  • 🔑 Credentials : Identifiants utilisés dans la tentative de connexion
  • Timestamp : Date et heure précise de l'événement