
Framework für Phishing-Simulation und Sensibilisierung für knotenbasierte Kampagnen, Credential-Erfassung, SMTP-Zustellung, CAPTCHA und optionales Browser-Credential-Replay.
Phishing-Simulation und Framework für Sicherheitsbewusstsein mit konfigurierbaren Workflows, Kampagnenverwaltung und optionalem Credential-Proxy.
cd hinein../deploy.sh aus – dies konfiguriert die Voraussetzungen für dich, vorausgesetzt du verwendest Ubuntu../start.sh --preload-ml aus. Dies startet die Server und lädt die von uns verwendeten ML-Modelle vorab.Du erreichst die Admin-Oberfläche unter http://localhost:8000 und den Phishing-Server unter http://localhost:1234. Standard-Login: admin / admin123. Ändere das Passwort nach der ersten Anmeldung.
Leite Port 8000 per SSH auf dein lokales System weiter, um auf das Admin-Panel zuzugreifen. Setze das Admin-Panel oder den Flask-Server (Port 1234) NICHT direkt dem Internet aus.
deploy.sh installiert einen Caddy-Server auf demselben Host. Alles ist darauf ausgelegt, dass du Caddy als Reverse-Proxy verwendest. Du musst es nicht tun, aber hier gibt es Drachen.
Optionale Flags für start.sh:
--with-caddy — Startet Caddy über Docker (nur für lokale Tests).--preload-ml — Lädt das Phishing-Erkennungsmodell vorab herunter (~1,3 GB); vermeidet Verzögerungen bei der ersten Verwendung des Phishing-Detector-Plugins.--reset-db — Setzt die Datenbank zurück und initialisiert sie neu.--admin-only — Startet nur den Admin-Server (Port 8000).--phishing-only — Startet nur den Phishing-Server (Port 1234).--skip-init — Überspringt die Datenbankinitialisierung.--skip-setup — Überspringt die Einrichtung von venv/Abhängigkeiten; lädt nur .env und startet die Server.Ohne start.sh kannst du nach der Installation der Abhängigkeiten und der Initialisierung der Datenbank beide Server mit uv run python -m cli start starten.
Python: Siehe requirements.txt. Der Kern-Stack umfasst Flask, SQLAlchemy, Jinja2, Pydantic, Flask-Login, python-jose, passlib, cryptography und Flask-WTF. Das Phishing-Detector-Plugin verwendet transformers und torch. Der Credential-Proxy verwendet Playwright; optionale Integrationen verwenden OpenAI/Anthropic und boto3 (AWS Connect).
Entwicklung: requirements-dev.txt fügt pytest, pytest-cov und zugehörige Testwerkzeuge hinzu. Installiere mit uv pip install -r requirements-dev.txt, um Tests und Testabdeckung auszuführen.
System (Produktion): Das Deploy-Skript zielt auf Ubuntu/Debian. Es installiert uv, Caddy (Reverse-Proxy) und Systempakete wie libmagic1. Für den Credential-Proxy führt start.sh uv run playwright install chromium aus, um Chromium zu installieren.
Produktionsvorbereitung auf Ubuntu. Idempotent. Es:
requirements.txt..env aus .env.example, falls es fehlt, und generiert SECRET_KEY und JWT_SECRET_KEY, falls diese nicht gesetzt sind.storage/caddy/data, storage/caddy/config, storage/uploads, storage/templates, storage/assets, instance).--init-db (führt uv run python -m cli init --force aus).Es startet die Anwendung nicht. Für die Produktion: Starte Caddy (Reverse-Proxy) und starte dann die App mit ./start.sh oder einem Prozessmanager, sodass der gesamte Datenverkehr über den Proxy zur App gelangt.
Entwicklung und lokaler Start. Es:
.env und stellt sicher, dass SECRET_KEY und JWT_SECRET_KEY vorhanden sind (generiert sie, wenn Standardwerte vorliegen).requirements.txt.uv run playwright install chromium für den Credential-Proxy aus.--preload-ml vorab herunter (~1,3 GB).--skip-init). Verwende --reset-db, um zu löschen und neu zu initialisieren.--with-caddy (nur lokale Tests).uv run python -m cli start; verwende --admin-only oder , um nur einen zu starten.In der Produktion muss die Anwendung hinter einem Reverse-Proxy laufen. Setze die Flask-Entwicklungsserver nicht direkt dem Internet aus.
Der Reverse-Proxy ist verantwortlich für TLS-Terminierung, korrekte Host-Header, Pfad- und Domänen-Routing sowie die Trennung von Admin- und Kampagnenverkehr. Die App lauscht auf localhost oder einem internen Port; der Proxy übernimmt öffentliches HTTPS und leitet je nach Konfiguration an den Admin-Server (z. B. Port 8000) und den Phishing-Server (z. B. Port 1234) weiter.
Empfohlen: Verwende Caddy als Reverse-Proxy. deploy.sh installiert Caddy über APT. Das Projekt enthält Caddyfile-Beispiele (z. B. Caddyfile.minimal). Starte nach der Ausführung von deploy.sh Caddy (z. B. caddy run --config /path/to/Caddyfile.minimal) und starte dann die Anwendung mit ./start.sh oder einem Prozessmanager. Jeder gleichwertige Reverse-Proxy (nginx, Traefik usw.) ist akzeptabel, solange die App nicht direkt exponiert wird.
Reel ist ein Framework für Phishing-Simulationen und Sicherheitsbewusstsein. Betreiber verwenden die Admin-Oberfläche, um Kampagnen, Workflows, Vorlagen und Ziele zu verwalten. Der Phishing-Server stellt Kampagnen-Landingpages bereit und führt bei jeder Anfrage Workflows aus – knotenbasierte Graphen von Plugins.
Es gibt zwei Anwendungseinstiegspunkte in app.py: create_app() für den Phishing-Server und create_admin_app() für die Admin-Oberfläche. Kampagnen können inbound (ein Besucher folgt einem Link; GET- und POST-Workflows verarbeiten Seitenaufrufe und Formularübermittlungen) oder outbound sein (das System sendet E-Mails oder Anrufe über Sende-Workflows). Caddy kann für das domänenbasierte Routing von Kampagnen verwendet werden. Der Credential-Proxy verwendet Playwright für die Browser-Automatisierung, um erfasste Anmeldedaten auf Zielseiten erneut abzuspielen.
Ein Benutzer besucht eine Kampagnen-URL (z. B. /<campaign_uid>). Der Phishing-Server leitet anhand der Kampagnen-UID weiter. Bei GET-Anfragen führt er den GET-Workflow der Kampagne aus (z. B. Landingpage rendern, CAPTCHA); bei POST-Anfragen führt er den POST-Workflow aus (z. B. Eingaben validieren, Anmeldedaten erfassen, weiterleiten). Workflows sind vom Typ campaign und deklarieren die unterstützte HTTP-Methode (GET, POST oder BOTH). Der Ausführungskontext umfasst campaign, request, session und variables. Die Antwort wird aus Kontextschlüsseln wie _response_html, _response_redirect oder _response_json übernommen. Inbound-Workflows werden für Landingpages, CAPTCHA, Erfassung von Anmeldedaten, Weiterleitungen und Protokollierung verwendet.
Ein Betreiber führt über die Admin-Oberfläche einen Sende-Workflow aus, der mit einer Kampagne verknüpft ist (der „Workflow“ / Sende-Workflow der Kampagne). Der Sende-Executor führt einen einzelnen Workflow vom Typ sending aus: Er wählt Ziele aus (z. B. aus CSV oder verfolgten Benutzern), validiert oder rendert Inhalte optional vorab und iteriert dann über die Ziele – rendert die E-Mail, wendet Ratenbegrenzungen an und sendet über ein Plugin (z. B. SMTP). Es gibt keinen Besucher-GET/POST; der Workflow erzeugt Inhalte und sendet sie an eine Liste von Zielen.
Zusammenfassung:
Beim Erstellen von Workflows verwende die Syntax {{variable}} zur Interpolation. Verschachtelte Pfade verwenden Punktnotation: {{nested.key}}.
CSV-Beispiel: email,first_name,last_name,company,landing_page → verwende {{target.email}}, {{target.first_name}}, {{target.company}}, {{target.custom_data.landing_page}}.
URL-Verschleierer: Verwende url oder target.landing_page als Quelle oder interpoliere: http://{{target.ip}}/login.
| Variable | Beschreibung |
|---|---|
{{template_html}} | Gerendertes HTML |
{{campaign.template_html}} | HTML der Kampagnenvorlage |
Phishing-Detektor: Setze html_content auf {{template_html}}, {{campaign.template_html}} oder {{email_html}}.
Target Selector (CSV) → Loop (array_source: targets, item_key: target) → Render Template → SMTP Sender
Typische Tags in der Vorlage: {{target.email}}, {{target.first_name}}, {{target.last_name}}, {{target.custom_data.X}} für jede zusätzliche CSV-Spalte.
Workflows werden aus Knoten aufgebaut; jeder Knoten ist ein Plugin mit Konfiguration. Die folgenden integrierten Plugins sind verfügbar.
make test-fast oder ./run_tests.shmake test-coverage oder ./run_tests.sh --coveragemake lintmake format-checkSiehe Makefile für weitere Ziele (Aufteilung in Unit-/Integrations-/Funktionstests, DB-Init/Reset, nur Admin- oder Phishing-Server starten).
--phishing-only| Variable | Beschreibung |
|---|
{{target}} | Vollständiges Zielobjekt für die aktuelle Schleifeniteration |
{{target.email}} | E-Mail-Adresse des Ziels |
{{target.first_name}} | Vorname |
{{target.last_name}} | Nachname |
{{target.custom_data}} | Dict der übrigen CSV-Spalten |
{{target.custom_data.column_name}} | Beliebige zusätzliche CSV-Spalte (z. B. {{target.custom_data.company}}, {{target.custom_data.landing_page}}) |
{{target.name}} | Kurzform für first_name bzw. target.first_name |
{{target_name}} | Wie target.name (Alias) |
{{target_email}} | Wie target.email (Alias) |
{{_loop_index}} | Aktueller Schleifenindex (0-basiert) |
| Variable | Beschreibung |
|---|
{{campaign.id}} | Kampagnen-ID |
{{campaign.uid}} | Kampagnen-UID |
{{campaign.name}} | Kampagnenname |
{{campaign.template_html}} | HTML der Kampagnenvorlage |
{{url}} | Landing-URL der Kampagne |
{{campaign_id}} | Kampagnen-ID |
{{variables}} | Dict der Kampagnenvariablen |
| Variable | Beschreibung |
|---|
{{url}} | Landing-URL der Kampagne (durch Konfiguration oder Standard festgelegt) |
{{target.landing_page}} | Falls landing_page in der CSV vorhanden ist |
{{target.custom_data.landing_page}} | Wie oben, wenn landing_page in custom_data enthalten ist |
{{target.ip}} | Falls ip in CSV oder custom_data vorhanden ist |
{{email_html}} | Gerendertes E-Mail-HTML (nach Render Template) |
{{body_html}} | HTML des E-Mail-Inhalts |
| Variable | Beschreibung |
|---|
{{phishing_detection.is_phishing}} | True/False von BERT |
{{phishing_detection.confidence}} | BERT-Konfidenzwert |
{{captured_credentials.username}} | Nur Inbound |
{{captured_credentials.password}} | Nur Inbound |
{{_email_sent}} | Zeigt Erfolg des SMTP-Versands an |
| Plugin | Zweck |
|---|
| CAPTCHA | Cloudflare Turnstile: Tokens validieren und/oder Widget rendern; schützt Formulare vor Bots. |
| Capture Credentials | Erfasst Anmeldedaten aus Formularübermittlungen; speichert sie im Kontext und in der Datenbank für nachgelagerte Plugins. |
| Conditional Logic | Verzweigt den Workflow anhand von True/False basierend auf dem Kontext (Gleichheit, Enthaltensein, numerisch, Regex). |
| Data Transform | Setzt, entfernt, kopiert, benennt um, führt zusammen oder filtert Kontextdaten für nachgelagerte Plugins. |
| Delay | Feste oder zufällige Verzögerung oder Verzögerung bis zu einem Datum/Uhrzeit; Ratenbegrenzung und Timing. |
| Email Template Validator | Validiert Vorlagen (Jinja2, Qualität, Spam); optional KI; verzweigt anhand des Ergebnisses. |
| Generate Device Code (GraphSpy) | Azure-AD-Gerätecodes über die GraphSpy-API; für Sprachzustellung mit AWS Connect verwenden. |
| AWS Connect Dialer | Ausgehende Sprachansagen über AWS Connect; SSML; integriert sich für Gerätecodes in GraphSpy. |
| Log Event | Protokolliert benutzerdefinierte Ereignisse in der Datenbank; Anfrage-/Sitzungsdaten; Audit und Analysen. |
| Phishing Detector (BERT) | ML-basierte Phishing-Erkennung auf HTML; QA und Inhaltsanalyse. |
| Pushover | Push-Benachrichtigungen (iOS, Android, Desktop) über die Pushover-API. |
| Queue Credential Proxy | Stellt nach der Erfassung von Anmeldedaten (Capture Credentials) einen Browser-Automatisierungsauftrag in die Warteschlange, um diese auf Zielseiten erneut abzuspielen. |
| Redirect | HTTP-Weiterleitung an eine URL mit konfigurierbarem Statuscode; Variableninterpolation. |
| Render Template | Rendert HTML aus Kampagnen-, benutzerdefinierter oder Bibliotheksvorlage mit Jinja2 und Variablen. |
| Send Slack Message | Sendet eine Nachricht an Slack über Webhook oder Bot; Variableninterpolation. |
| SMTP Email Sender | Sendet E-Mails über SMTP (TLS, Auth, HTML/Text, Variablen); wird in Sende-Workflows verwendet. |
| Target Selector | Wählt Ziele aus CSV, manueller Liste oder verfolgten Benutzern; filtert nach Domäne/Anzahl; speist Sende-Workflows. |
| URL Obfuscator | Verschleiert IPs/URLs (z. B. DWORD, Hex, IPv6-gemappt); für Tests und Forschung. |
| User Agent Check | Erlaubt oder blockt anhand von User-Agent-Regex; blockt, leitet weiter oder verzweigt anhand des Ergebnisses. |
| Validate Input | Validiert Formularfelder (Pflicht, Typ, Länge, Regex); blockt, leitet weiter oder fährt fort. |