
فخ تفاعلي عالي التفاعل يحاكي تطبيق Laravel/Livewire ضعيفًا. يلتقط استغلالات RCE وقذائف الويب التي تستهدف CVE-2024-47823 وCVE-2025-54068 وCVE-2025-14894، ثم يحللها في حاويات Docker معزولة لاستخراج مؤشرات الاختراق (IOCs).
honeypot عالي التفاعل يتنكّر بهيئة تطبيق Laravel/Livewire ضعيف. يلتقط محاولات استغلال تستهدف ثغرات Livewire المعروفة (CVEs)، ويخزّن الملفات الخبيثة المرفوعة (webshells) وحمولات تنفيذ الأوامر عن بُعد (RCE) مع إزالة التكرار عبر SHA-256، وينفذها اختياريًا داخل حاوية Docker معزولة (sandboxed) لاستخراج مؤشرات الاختراق (IOCs) — عناوين URL وعناوين IP والنطاقات التي يحاول البرنامج الخبيث الاتصال بها.
يعمل النظام كعمليتين منفصلتين لأغراض أمنية: خادم ويب يلتقط الحمولات (بدون صلاحية الوصول إلى Docker) وعامل صندوق الرمل (sandbox worker) يحللها في حاويات معزولة.
Attacker → Nginx → FastAPI → SQLite ← Sandbox Worker (Docker)
(capture) (polls jobs, writes IOCs)
الواجهة (Facade) — يقدّم صفحات تسجيل الدخول/التسجيل الخاصة بـ Laravel بواقعية، مع سمات wire: الخاصة بـ Livewire، ورموز XSRF، وترويسات X-Powered-By: PHP/8.3.12. ترى الماسحات الآلية ما يبدو كتطبيق ضعيف حقيقي.
الالتقاط (Capture) — يُسجَّل كل طلب HTTP في SQLite (العنوان IP، والترويسات، وتجزئة الجسم، والطابع الزمني) عبر طبقة وسيطة ASGI، بشفافية تامة، قبل حدوث أي توجيه.
المصائد (Traps) — تقبل نقاط نهاية Livewire رفع الملفات ورسائل المكونات تمامًا كما يفعل الإطار الحقيقي. تُصنَّف الحمولات (كود PHP، وكائنات مسلسلة، وأوامر shell) وتُخزَّن مع إزالة التكرار عبر SHA-256. كل حمولة مثيرة للاهتمام تنشئ مهمة دائمة في قائمة الانتظار sandbox_jobs.
صندوق الرمل (Sandbox) — تستقصي عملية عامل منفصلة المهام المعلقة وتنفّذ كل حمولة في حاوية Docker مؤقتة (نظام ملفات للقراءة فقط، بدون شبكة، cap_drop=ALL). يعترض حاجز LD_PRELOAD استدعاءات الشبكة في libc لتسجيل محاولات اتصال C2 (القيادة والتحكم). يستخرج المحلّل مؤشرات الاختراق (IOCs) ويقيّم نقاط نهاية C2 المحتملة باستخدام استدلالات.
| CVE | CVSS | الملخص | نقطة نهاية المصيدة |
|---|---|---|---|
| CVE-2024-47823 | 9.8 حرجة | ثغرة RCE في رفع ملفات Livewire عبر تجاوز نوع MIME. تُخمَّن امتدادات الملفات من نوع MIME بدلاً من التحقق منها من اسم الملف، مما يسمح برفع ملفات .php مقنعة كصور. تؤثر على Livewire < 2.12.7 و < 3.5.2. | POST /livewire/upload-file |
| CVE-2025-54068 | 9.2 حرجة | ثغرة RCE في ترطيب خصائص Livewire. تفشل عملية الترطيب في تعقيم أنواع الكائنات في تحديثات خصائص المكونات، مما يسمح بحمولات محقونة بالتنفيذ على جانب الخادم. تؤثر على Livewire من 3.0.0-beta.1 حتى 3.6.3. | POST /livewire/message |
| CVE-2025-14894 | حرجة | ثغرة RCE عبر رفع غير مقيد في Filemanager الخاص بـ Livewire. غياب التحقق من نوع الملف وMIME يسمح برفع ملفات PHP قابلة للتنفيذ دون مصادقة. | POST /livewire/upload-file |
كما تلتقط مصيدة الالتقاط الشامل *.php عمليات الاستطلاع بعد الاستغلال بحثًا عن أسماء webshell الشائعة (مثل accesson.php وwp-login.php وadmin.php).
المتطلبات الأساسية: Python 3.11+ وuv.
git clone https://github.com/HelgeSverre/livewire-honeypot.git
cd livewire-honeypot
# Install dependencies
uv sync
# Start the web server (capture-only, no Docker needed)
DATA_DIR=./data uv run uvicorn honeypot.main:app --reload --port 8000
# In a second terminal — start the sandbox worker (requires Docker)
DATA_DIR=./data uv run python -m honeypot.worker
# Run tests
uv run pytest tests/ -v
يعمل خادم الويب بشكل مستقل — يلتقط كل شيء ويخزّنه حتى بدون تشغيل عامل صندوق الرمل. شغّل العامل عندما تريد تحليلًا آليًا للحمولات.
ملاحظة: دليل
src/موجود على مسار Python عبرpyproject.toml(تخطيط src-layout)، لذا فإنhoneypot.main:appيُشير إلىsrc/honeypot/main.py.
ستحتاج إلى:
النشر الكامل يتم بأمر واحد بمجرد توفر الـ VPS. يتولى السكربت كل خطوة بدءًا من "droplet فارغ" وصولًا إلى "خدمة تعمل بتقنية TLS" — حزم apt، والمستخدمون والمجموعات، والبيئة الافتراضية Python (venv)، وصورة صندوق الرمل، وnginx، وcertbot، وقواعد جدار الحماية.
# 1. Provision a $6/mo droplet (Ubuntu 24.04, 1 GB RAM is enough).
# On DigitalOcean:
doctl compute droplet create veritron-honeypot \
--size s-1vcpu-1gb \
--image ubuntu-24-04-x64 \
--region fra1 \
--ssh-keys "$(doctl compute ssh-key list --format ID --no-header | head -1)" \
--wait
# 2. Point your domain's A record at the droplet IP.
# Wait for DNS to resolve before continuing.
dig +short your-domain.example # should return the droplet IP
# 3. Copy the project onto the droplet.
rsync -az --exclude='.git' --exclude='.venv' --exclude='data' \
./ root@<droplet-ip>:/opt/honeypot/
# 4. Run the bootstrap script. Passing your domain enables TLS via certbot.
ssh root@<droplet-ip> 'cd /opt/honeypot && [email protected] \
bash deploy/setup.sh your-domain.example'
هذا كل شيء. أصبح honeypot الآن يقدّم صفحة تسجيل دخول Laravel/Livewire مزيفة عبر HTTPS، ويلتقط كل طلب في SQLite، وجاهزًا لتحليل الحمولات في صندوق رمل Docker.
سكربت deploy/setup.sh ذو تأثير ثابت (idempotent) — إعادة تشغيله آمنة. وهو يقوم بالترتيب بـ:
honeypot (الويب) وsandbox (العامل)، إضافة إلى المجموعة المشتركة honeypot-data.uv sync --python /usr/bin/python3.12. نعتمد عمدًا على Python المثبتة عبر apt بدلاً من المفسّر المرفق مع uv — لأن Python الخاصة بـ uv تقع في /root/.local/share/uv/، وهو مسار لا يمكن لمستخدم خدمة غير مميز عبوره، وستحصل على خطأ status=203/EXEC محيّر من systemd إذا تركت uv تختار المفسّر./var/honeypot/ مع بت setgid وملكية مجموعة مشتركة، ليتمكن كل من الخدمتين من قراءة ما تكتبه الأخرى.ExecStart الخاصة بالعامل لاستخدام برنامج Docker الخفي للنظام (الوحدة المرفقة تفترض Docker بدون root، وهو ما يصعب إعداده).docker build -t honeypot-sandbox sandbox/).limit_req_zone في /etc/nginx/conf.d/ (يجب أن يكون داخل كتلة http {}، وليس داخل server {}).certbot --nginx إذا تم تمرير نطاق.إذا أردت تنفيذ كل خطوة بنفسك بدلاً من تشغيل setup.sh، فإن سجل الأوامر المكافئ موجود في deploy/setup.sh كمراحل معلّقة بتعليقات.
| الخدمة | المستخدم | الغرض | صلاحية Docker |
|---|---|---|---|
honeypot.service | honeypot | خادم ويب — يلتقط الطلبات والحمولات | لا |
honeypot-worker.service | sandbox | عامل صندوق الرمل — يحلل الحمولات في Docker | نعم |