
Eigenständige SSH-Honeypot zur Erfassung von Angreiferinteraktionen und deren Umwandlung in strukturierte Sicherheitsinformationen.
SSHintel ist eine leichtgewichtige SSH-Honeypot, die mit Python und Paramiko erstellt wurde. Sie simuliert eine gefälschte Linux-Shell, um unbefugte Zugriffsversuche zu protokollieren, Anmeldedaten zu erfassen und das Verhalten von Angreifern in einer kontrollierten Umgebung zu analysieren.
ls, cd, pwd, cat, echo, grep, find, tree, head, tail, wc, stat, ps, df, free, env, id, whoami, usw.)--tarpit-Modus, um Angreifer mit verzögerter Ausgabe zu verlangsamenSSHintel ist keine vollwertige Bash/Linux-Shell. Es simuliert eine glaubwürdige Teilmenge gängiger Befehle, um Angreifertelemetrie zu sammeln. Befehle werden über ein leichtgewichtiges Register verteilt; das Hinzufügen eines Befehls bedeutet das Hinzufügen einer kleinen Handler-Funktion.
pip install -r requirements.txt
Hinweis: Der SSH-Hostschlüssel wird beim ersten Start automatisch generiert. Keine manuelle Schlüsselerzeugung erforderlich.
Führen Sie die Honeypot mit einem bestimmten Port, Benutzernamen und Passwort aus:
python3 run.py serve --port 2222 --username user1 --password pass123
Standardport ist
2222und Host ist0.0.0.0.
Die Honeypot generiert automatisch einen SSH-Hostschlüssel unter static/server.key beim ersten Start, falls keiner vorhanden ist. Keine manuelle Schlüsselerzeugung erforderlich.
Um den Tarpit-Modus zu aktivieren:
python3 run.py serve --port 2222 --username user1 --password pass123 --tarpit
Um SQLite-Telemetrie zu deaktivieren (nur JSONL):
python3 run.py serve --port 2222 --username user1 --password pass123 --no-db
SSHintel schützt vor Ressourcenerschöpfung durch viele gleichzeitige Verbindungen oder Verbindungen, die unbegrenzt aufrechterhalten werden. Diese sind über die CLI konfigurierbar:
| Flag | Standard | Zweck |
|---|---|---|
--max-connections | 50 | Maximale gleichzeitige aktive Verbindungen; zusätzliche Verbindungen werden abgelehnt und als connection_rejected-Ereignis protokolliert |
--auth-timeout | 60 (s) | Zeit, die für den Abschluss des SSH-Handshakes/der Authentifizierung erlaubt ist; blockierte Clients werden getrennt |
--session-idle-timeout | 300 (s) | Inaktivitäts-Timeout für eine authentifizierte Shell; eine inaktive Sitzung wird beendet, aber ein aktiv tippender Angreifer wird niemals beendet |
Beispiel:
python3 run.py serve --port 2222 --username user1 --password pass123 \
--max-connections 25 --auth-timeout 30 --session-idle-timeout 300
Wenn zu viele Verbindungen offen sind, wird die zusätzliche Verbindung sofort geschlossen und ein connection_rejected-Sicherheitsereignis (mit reason: connection_limit) wird in das JSONL-Protokoll geschrieben. Eine blockierte Authentifizierung wird als Trennung mit reason: auth_timeout aufgezeichnet; eine inaktive Shell endet mit reason: idle_timeout.
Der Tarpit-Modus sendet absichtlich Ausgaben langsam, um einen Angreifer zu beschäftigen, daher unterliegt die Tarpit-Banner-Schleife nicht dem Inaktivitäts-Timeout — aber Tarpit-Sitzungen zählen gegen das Verbindungslimit.
SSHintel enthält ein lokales Web-Dashboard, das die in SQLite gespeicherte Sicherheitstelemetrie visualisiert.
python3 run.py dashboard
Öffnen Sie dann http://localhost:5000 in Ihrem Browser.
Das Dashboard liest standardmäßig aus der SQLite-Datenbank unter
data/sshintel.db. Starten Sie zuerst die Honeypot, damit Telemetrie erfasst wird, und starten Sie dann das Dashboard, um zu beobachten, wie es sich füllt.
Klicken Sie auf eine Sitzungs-ID (oder navigieren Sie zu /session/<session_id>), um die Sitzungsuntersuchungsansicht zu öffnen, die einen einzelnen Angriff chronologisch rekonstruiert:
$ command-Ansicht von allem, was der Angreifer getippt hat, mit Arbeitsverzeichnissen# Terminal 1: Honeypot starten
python3 run.py serve --port 2222 --username user1 --password pass123
# Terminal 2: Dashboard starten
python3 run.py dashboard
# Terminal 3: Angreifer simulieren
ssh user1@localhost -p 2222
# (einige Befehle ausführen, dann beenden)
Öffnen Sie dann http://localhost:5000, um die erfasste Aktivität zu untersuchen.
Das Dashboard unterstützt Live-Telemetrie — es fragt die Honeypot alle 2 Sekunden ab und aktualisiert automatisch. Neue Sitzungen, Befehle und Ereignisse erscheinen in Echtzeit, ohne die Seite neu zu laden. Ein Live-Indikator (● Live) zeigt den Verbindungsstatus an.
Öffnen Sie ein zweites Terminal und versuchen Sie, sich zu verbinden:
ssh user1@localhost -p 2222
Wenn die Anmeldedaten übereinstimmen, werden Sie in die emulierte Shell geleitet.
Um veraltete SSH-Fingerabdrücke zu entfernen:
notepad "%USERPROFILE%\.ssh\known_hosts"
Löschen Sie die relevante Zeile, die
localhostoder die IP der Honeypot enthält.
creds_logger protokolliertfunnel_logger protokolliertlog_files/events.jsonl geschrieben — ein gültiges JSON-Objekt pro ZeileJedes JSONL-Ereignis enthält einen UTC-ISO-8601-timestamp, einen event_type, eine eindeutige session_id und die source_ip. Verbindung, Authentifizierungsversuche/-ergebnisse, Befehlsausführung, Tarpit-Aktivierung und Trennungen werden alle als strukturierte Ereignisse aufgezeichnet.