
Фреймворк для симуляции фишинга и повышения осведомлённости для кампаний на основе узлов, перехвата учётных данных, доставки через SMTP, CAPTCHA и опционального воспроизведения учётных данных браузера.
Фреймворк для симуляции фишинга и повышения осведомленности о безопасности с настраиваемыми рабочими процессами, управлением кампаниями и опциональным прокси для учетных данных.
cd../deploy.sh — он настроит необходимые зависимости, если вы используете Ubuntu../start.sh --preload-ml. Это запустит серверы и предварительно загрузит используемые ML-модели.Вы получаете админ-интерфейс по адресу http://localhost:8000 и фишинговый сервер по адресу http://localhost:1234. Логин по умолчанию: admin / admin123. Смените пароль после первого входа.
Пробросьте порт 8000 к себе локально по SSH, чтобы получить доступ к админ-панели. НЕ открывайте админ-панель или flask-сервер (порт 1234) напрямую в интернет.
deploy.sh установит сервер Caddy на тот же хост; всё построено в предположении, что вы будете использовать Caddy в качестве обратного прокси. Это не обязательно, но здесь обитают драконы.
Необязательные флаги для start.sh:
--with-caddy — запуск Caddy через Docker (только для локального тестирования).--preload-ml — предварительная загрузка модели обнаружения фишинга (~1.3 ГБ); позволяет избежать задержки при первом использовании плагина Phishing Detector.--reset-db — сброс базы данных и повторная инициализация.--admin-only — запуск только админ-сервера (порт 8000).--phishing-only — запуск только фишингового сервера (порт 1234).--skip-init — пропуск инициализации базы данных.--skip-setup — пропуск настройки venv/зависимостей; просто загрузить .env и запустить серверы.Без start.sh, после установки зависимостей и инициализации базы данных вы можете запустить оба сервера командой: uv run python -m cli start.
Python: Смотрите requirements.txt. Основной стек включает Flask, SQLAlchemy, Jinja2, Pydantic, Flask-Login, python-jose, passlib, cryptography и Flask-WTF. Плагин Phishing Detector использует transformers и torch. Прокси для учетных данных использует Playwright; опциональные интеграции используют OpenAI/Anthropic и boto3 (AWS Connect).
Разработка: requirements-dev.txt добавляет pytest, pytest-cov и связанные инструменты тестирования. Установите с помощью uv pip install -r requirements-dev.txt для запуска тестов и проверки покрытия.
Системные (продакшен): Скрипт развертывания рассчитан на Ubuntu/Debian. Он устанавливает uv, Caddy (обратный прокси) и системные пакеты, такие как libmagic1. Для прокси учетных данных start.sh выполняет uv run playwright install chromium для установки Chromium.
Подготовка продакшен-окружения на Ubuntu. Идемпотентен. Он:
requirements.txt..env из .env.example, если он отсутствует, и генерирует SECRET_KEY и JWT_SECRET_KEY, если они не заданы.storage/caddy/data, storage/caddy/config, storage/uploads, storage/templates, storage/assets, instance).--init-db (выполняет uv run python -m cli init --force).Он не запускает приложение. Для продакшена: запустите Caddy (обратный прокси), затем запустите приложение с помощью ./start.sh или менеджера процессов, чтобы весь трафик поступал в приложение через прокси.
Запуск для разработки и локального использования. Он:
.env и проверяет SECRET_KEY и JWT_SECRET_KEY (генерирует их, если присутствуют значения по умолчанию).requirements.txt.uv run playwright install chromium для прокси учетных данных.--preload-ml (~1.3 ГБ).--skip-init). Используйте --reset-db для удаления и повторной инициализации.--with-caddy (только для локального тестирования).uv run python -m cli start; используйте --admin-only или для запуска одного.В продакшене приложение обязательно должно работать за обратным прокси. Не открывайте Flask-серверы разработки напрямую в интернет.
Обратный прокси отвечает за завершение TLS, корректные заголовки Host, маршрутизацию по путям и доменам, а также за разделение админ-трафика и трафика кампаний. Приложение прослушивает localhost или внутренний порт; прокси обрабатывает публичный HTTPS и перенаправляет трафик на админ-сервер (например, порт 8000) и фишинговый сервер (например, порт 1234) в соответствии с вашей конфигурацией.
Рекомендуется: используйте Caddy в качестве обратного прокси. deploy.sh устанавливает Caddy через APT. Проект включает примеры Caddyfile (например, Caddyfile.minimal). После выполнения deploy.sh запустите Caddy (например, caddy run --config /path/to/Caddyfile.minimal), а затем запустите приложение с помощью ./start.sh или менеджера процессов. Любой аналогичный обратный прокси (nginx, Traefik и т.п.) подойдет, если приложение не открыто напрямую.
Reel — это фреймворк для симуляции фишинга и повышения осведомленности о безопасности. Операторы используют админ-интерфейс для управления кампаниями, рабочими процессами, шаблонами и целями. Фишинговый сервер обслуживает целевые страницы кампаний и выполняет рабочие процессы — графы плагинов на основе узлов — при каждом запросе.
В app.py есть две точки входа в приложение: create_app() для фишингового сервера и create_admin_app() для админ-интерфейса. Кампании могут быть входящими (посетитель переходит по ссылке; GET- и POST-рабочие процессы обрабатывают просмотры страниц и отправку форм) или исходящими (система отправляет электронные письма или совершает звонки через отправляющие рабочие процессы). Caddy можно использовать для маршрутизации кампаний по доменам. Прокси учетных данных использует Playwright для автоматизации браузера с целью воспроизведения перехваченных учетных данных на целевых сайтах.
Пользователь посещает URL кампании (например, /<campaign_uid>). Фишинговый сервер маршрутизирует по UID кампании. Для GET-запросов он выполняет GET-рабочий процесс кампании (например, рендер целевой страницы, CAPTCHA); для POST-запросов — POST-рабочий процесс (например, проверка ввода, перехват учетных данных, перенаправление). Рабочие процессы имеют тип campaign и объявляют поддержку HTTP-методов (GET, POST или BOTH). Контекст выполнения включает campaign, request, session и variables. Ответ берется из ключей контекста, таких как _response_html, _response_redirect или _response_json. Входящие рабочие процессы используются для целевых страниц, CAPTCHA, перехвата учетных данных, перенаправлений и логирования.
Оператор запускает отправляющий рабочий процесс из админ-интерфейса, привязанный к кампании («Workflow» / отправляющий рабочий процесс кампании). Исполнитель отправки выполняет один рабочий процесс типа sending: он выбирает цели (например, из CSV или отслеживаемых пользователей), опционально проверяет или предварительно рендерит контент, а затем перебирает цели — рендерит письмо, применяет ограничения скорости и отправляет через плагин (например, SMTP). Здесь нет GET/POST от посетителя; рабочий процесс генерирует контент и отправляет его списку целей.
Кратко:
При создании рабочих процессов используйте синтаксис {{variable}} для интерполяции. Вложенные пути используют точечную нотацию: {{nested.key}}.
Пример CSV: email,first_name,last_name,company,landing_page → используйте {{target.email}}, {{target.first_name}}, {{target.company}}, {{target.custom_data.landing_page}}.
Обфускатор URL: используйте url или target.landing_page в качестве источника или интерполируйте: http://{{target.ip}}/login.
| Variable | Описание |
|---|---|
{{template_html}} | Отрендеренный HTML |
{{campaign.template_html}} | HTML шаблона кампании |
Phishing Detector: установите html_content в {{template_html}}, {{campaign.template_html}} или {{email_html}}.
Target Selector (CSV) → Loop (array_source: targets, item_key: target) → Render Template → SMTP Sender
Типичные теги в шаблоне: {{target.email}}, {{target.first_name}}, {{target.last_name}}, {{target.custom_data.X}} для любой дополнительной колонки CSV.
Рабочие процессы строятся из узлов; каждый узел — это плагин с конфигурацией. Доступны следующие встроенные плагины.
make test-fast или ./run_tests.shmake test-coverage или ./run_tests.sh --coveragemake lintmake format-checkСмотрите Makefile для дополнительных целей (разделение модульных/интеграционных/функциональных тестов, инициализация/сброс БД, запуск только админ- или фишингового сервера).
--phishing-only| Variable | Описание |
|---|
{{target}} | Полный объект цели для текущей итерации цикла |
{{target.email}} | Email цели |
{{target.first_name}} | Имя |
{{target.last_name}} | Фамилия |
{{target.custom_data}} | Словарь остальных колонок CSV |
{{target.custom_data.column_name}} | Любая дополнительная колонка CSV (например, {{target.custom_data.company}}, {{target.custom_data.landing_page}}) |
{{target.name}} | Сокращение для first_name или target.first_name |
{{target_name}} | То же, что target.name (алиас) |
{{target_email}} | То же, что target.email (алиас) |
{{_loop_index}} | Текущий индекс цикла (начиная с 0) |
| Variable | Описание |
|---|
{{campaign.id}} | ID кампании |
{{campaign.uid}} | UID кампании |
{{campaign.name}} | Название кампании |
{{campaign.template_html}} | HTML шаблона кампании |
{{url}} | URL целевой страницы кампании |
{{campaign_id}} | ID кампании |
{{variables}} | Словарь переменных кампании |
| Variable | Описание |
|---|
{{url}} | URL целевой страницы кампании (задается конфигурацией или по умолчанию) |
{{target.landing_page}} | Если landing_page есть в CSV |
{{target.custom_data.landing_page}} | То же, что выше, когда landing_page находится в custom_data |
{{target.ip}} | Если ip есть в CSV или пользовательских данных |
{{email_html}} | Отрендеренный HTML письма (после Render Template) |
{{body_html}} | HTML тела письма |
| Variable | Описание |
|---|
{{phishing_detection.is_phishing}} | True/False от BERT |
{{phishing_detection.confidence}} | Оценка уверенности BERT |
{{captured_credentials.username}} | Только для входящих |
{{captured_credentials.password}} | Только для входящих |
{{_email_sent}} | Указывает на успешную отправку по SMTP |
| Plugin | Назначение |
|---|
| CAPTCHA | Cloudflare Turnstile: проверка токенов и/или рендер виджета; защита форм от ботов. |
| Capture Credentials | Перехват учетных данных из отправленных форм; сохранение в контексте и БД для последующих плагинов. |
| Conditional Logic | Ветвление рабочего процесса по True/False с использованием контекста (равенство, вхождение, числовые значения, regex). |
| Data Transform | Установка, удаление, копирование, переименование, объединение или фильтрация данных контекста для последующих плагинов. |
| Delay | Фиксированная или случайная задержка, или задержка до определенной даты/времени; ограничение частоты запросов и тайминг. |
| Email Template Validator | Проверка шаблонов (Jinja2, качество, спам); опциональный ИИ; ветвление по результату. |
| Generate Device Code (GraphSpy) | Коды устройств Azure AD через API GraphSpy; используйте с AWS Connect для голосовой доставки. |
| AWS Connect Dialer | Исходящие голосовые вызовы через AWS Connect; SSML; интеграция с GraphSpy для кодов устройств. |
| Log Event | Запись пользовательских событий в базу данных; данные запроса/сессии; аудит и аналитика. |
| Phishing Detector (BERT) | Обнаружение фишинга на HTML на основе ML; проверка качества и анализ контента. |
| Pushover | Push-уведомления (iOS, Android, desktop) через API Pushover. |
| Queue Credential Proxy | После Capture Credentials ставит в очередь задачу автоматизации браузера для воспроизведения на целевых сайтах. |
| Redirect | HTTP-перенаправление на URL с настраиваемым кодом статуса; интерполяция переменных. |
| Render Template | Рендер HTML из шаблона кампании, пользовательского или библиотечного шаблона с помощью Jinja2 и переменных. |
| Send Slack Message | Отправка сообщения в Slack через webhook или бота; интерполяция переменных. |
| SMTP Email Sender | Отправка электронной почты через SMTP (TLS, аутентификация, HTML/обычный текст, переменные); используется в отправляющих рабочих процессах. |
| Target Selector | Выбор целей из CSV, ручного списка или отслеживаемых пользователей; фильтрация по домену/количеству; передача в отправляющие рабочие процессы. |
| URL Obfuscator | Обфускация IP/URL (например, DWORD, hex, IPv6-mapped); для тестирования и исследований. |
| User Agent Check | Разрешение или блокировка по regex user-agent; блокировка, перенаправление или ветвление по результату. |
| Validate Input | Проверка полей формы (обязательность, тип, длина, regex); блокировка, перенаправление или продолжение. |