
إطار عمل لمحاكاة التصيد ورفع التوعية، للحملات القائمة على العقد، والتقاط بيانات الاعتماد، والتسليم عبر SMTP، وCAPTCHA، وإعادة استخدام بيانات الاعتماد في المتصفح (اختياري).
إطار عمل لمحاكاة التصيد والتوعية الأمنية مع سير عمل قابلة للتهيئة، وإدارة للحملات، ووكيل اختياري للبيانات الاعتمادية.
cd../deploy.sh - سيقوم هذا بتكوين المتطلبات الأساسية نيابةً عنك، بافتراض أنك على Ubuntu../start.sh --preload-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.3GB)؛ لتجنب تأخير أول استخدام عند استخدام إضافة كاشف التصيد.--reset-db — إعادة تعيين قاعدة البيانات وإعادة تهيئتها.--admin-only — تشغيل خادم الإدارة فقط (المنفذ 8000).--phishing-only — تشغيل خادم التصيد فقط (المنفذ 1234).--skip-init — تخطي تهيئة قاعدة البيانات.--skip-setup — تخطي إعداد البيئة الافتراضية/التبعيات؛ فقط قم بتحميل .env وتشغيل الخوادم.بدون start.sh، بعد تثبيت التبعيات وتهيئة قاعدة البيانات يمكنك تشغيل الخادمين معًا باستخدام: uv run python -m cli start.
Python: انظر requirements.txt. تتضمن الحزمة الأساسية Flask وSQLAlchemy وJinja2 وPydantic وFlask-Login وpython-jose وpasslib وcryptography وFlask-WTF. تستخدم إضافة كاشف التصيد 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. قابل لإعادة التنفيذ (Idempotent). يقوم بما يلي:
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.3GB).--skip-init). استخدم --reset-db لحذفها وإعادة تهيئتها.--with-caddy (للاختبار المحلي فقط).uv run python -m cli start؛ استخدم --admin-only أو --phishing-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 والتقاط البيانات الاعتمادية وعمليات إعادة التوجيه وتسجيل الأحداث.
يشغّل المشغّل سير عمل إرسال من واجهة الإدارة، مرتبطًا بحملة (سير عمل الحملة / سير عمل الإرسال). يشغّل منفّذ الإرسال سير عمل واحدًا من نوع 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.
| المتغير | الوصف |
|---|---|
{{template_html}} | HTML المعروض |
{{campaign.template_html}} | قالب HTML للحملة |
كاشف التصيد: اضبط 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 لأهداف إضافية (تقسيمات الاختبارات الوحدوية/التكاملية/الوظيفية، تهيئة/إعادة تعيين قاعدة البيانات، تشغيل خادم الإدارة أو التصيد فقط).
| المتغير | الوصف |
|---|
{{target}} | كائن الهدف الكامل لتكرار الحلقة الحالي |
{{target.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) |
| المتغير | الوصف |
|---|
{{campaign.id}} | معرّف الحملة |
{{campaign.uid}} | معرّف الحملة الفريد (UID) |
{{campaign.name}} | اسم الحملة |
{{campaign.template_html}} | قالب HTML للحملة |
{{url}} | عنوان URL لصفحة هبوط الحملة |
{{campaign_id}} | معرّف الحملة |
{{variables}} | قاموس متغيرات الحملة |
| المتغير | الوصف |
|---|
{{url}} | عنوان URL لصفحة هبوط الحملة (يتم تعيينه بواسطة الإعدادات أو القيمة الافتراضية) |
{{target.landing_page}} | إذا كان landing_page موجودًا في CSV |
{{target.custom_data.landing_page}} | نفس ما سبق عندما يكون landing_page في custom_data |
{{target.ip}} | إذا كان ip في CSV أو البيانات المخصصة |
{{email_html}} |
| HTML المعروض للبريد الإلكتروني (بعد عرض القالب) |
{{body_html}} | نص HTML للبريد الإلكتروني |
| المتغير | الوصف |
|---|
{{phishing_detection.is_phishing}} | صحيح/خطأ من BERT |
{{phishing_detection.confidence}} | درجة الثقة من BERT |
{{captured_credentials.username}} | الوارد فقط |
{{captured_credentials.password}} | الوارد فقط |
{{_email_sent}} | يشير إلى نجاح إرسال SMTP |
| الإضافة | الغرض |
|---|
| CAPTCHA | Cloudflare Turnstile: التحقق من الرموز و/أو عرض الأداة؛ حماية النماذج من البوتات. |
| Capture Credentials | التقاط البيانات الاعتمادية من تقديمات النماذج؛ تخزينها في السياق وقاعدة البيانات للإضافات اللاحقة. |
| Conditional Logic | تفرع سير العمل على صحيح/خطأ باستخدام السياق (مساواة، احتواء، مقارنات رقمية، regex). |
| Data Transform | تعيين أو إزالة أو نسخ أو إعادة تسمية أو دمج أو تصفية بيانات السياق للإضافات اللاحقة. |
| Delay | تأخير ثابت أو عشوائي، أو تأخير حتى وقت/تاريخ محدد؛ تحديد المعدل والتوقيت. |
| Email Template Validator | التحقق من القوالب (Jinja2، الجودة، البريد العشوائي)؛ ذكاء اصطناعي اختياري؛ تفرع على النتيجة. |
| Generate Device Code (GraphSpy) | رموز جهاز Azure AD عبر واجهة GraphSpy API؛ استخدم مع AWS Connect لتسليم الصوت. |
| AWS Connect Dialer | مكالمات صوتية صادرة عبر AWS Connect؛ SSML؛ يتكامل مع GraphSpy لرموز الجهاز. |
| Log Event | تسجيل أحداث مخصصة في قاعدة البيانات؛ بيانات الطلب/الجلسة؛ التدقيق والتحليلات. |
| Phishing Detector (BERT) | كشف التصيد القائم على التعلم الآلي على HTML؛ ضمان الجودة وتحليل المحتوى. |
| Pushover | إشعارات دفع (iOS، Android، سطح المكتب) عبر واجهة Pushover API. |
| Queue Credential Proxy | بعد التقاط البيانات الاعتمادية، ضع وظيفة أتمتة متصفح في قائمة الانتظار لإعادة تشغيلها على المواقع المستهدفة. |
| 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 لوكيل المستخدم؛ حظر أو إعادة توجيه أو تفرع على النتيجة. |
| Validate Input | التحقق من حقول النموذج (إلزامي، نوع، طول، regex)؛ حظر أو إعادة توجيه أو متابعة. |