
منصة VAPT مستضافة محليًا ومعزولة عن الشبكة (air-gapped) تشغّل 8 وحدات مسح ضوئي متوازية، وتقيّم النتائج بشكل حتمي باستخدام معيار CVSS v3.1، وتنشئ تقارير PDF مع خيار توليد توصيات الإصلاح بالذكاء الاصطناعي عبر LLM محلي.
تم بناؤه بواسطة maverickaayush.
أداة VAPT مستضافة محليًا ومعزولة عن الشبكة: وجّهها إلى نطاق هدف مصرح به وستقوم بتشغيل 8 وحدات فحص بالتوازي، وتُقيّم كل نتيجة بشكل حتمي (CVSS v3.1)، وتضيف اختياريًا أوصافًا واضحة باللغة الإنجليزية مولّدة بالذكاء الاصطناعي عبر LLM محلي، وتنتج تقرير PDF بالإضافة إلى لوحة تحكم ويب مباشرة. لا استدعاءات خارجية لواجهات برمجية - كل شيء يعمل على شبكتك الخاصة.
طريقتان لتشغيل ONUS:
- الاستضافة الذاتية (هذا المستودع):
docker compose up← أدخل نطاقًا ← علّم على مربع التفويض ← افحص. لا حساب، لا تسجيل دخول، لا تحقق بريد إلكتروني - مصمم لمشغّل واحد بحكم التصميم، وكل ما يلي يغطي هذا المسار.- الاستضافة المدارة: نسخة مدارة متاحة على tryonus.tech. تضيف ميزات خاصة بالإنتاج فقط (حسابات / تسجيل دخول OAuth، طابور فحص، سجل لكل مستخدم) تكون مغلقة افتراضيًا في هذا المستودع، لتبقى الاستضافة الذاتية بسيطة. راجع الاستضافة الذاتية مقابل المدارة.
مسار الاستضافة الذاتية الافتراضي بسيط عن قصد: لا تسجيل، لا تحقق بريد
إلكتروني، لا OAuth. الميزات المقتصرة على الاستضافة المدارة (المصادقة، طابور
الفحص) تعيش خلف أعلام إعدادات مغلقة افتراضيًا (REQUIRE_AUTH=false,
HOSTED_QUEUE_ENABLED=false؛ راجع الإعدادات) وليست مضبوطة
في docker-compose.yml - لذا فإن تشغيل ONUS محليًا لا يضعك خلف شاشة تسجيل
دخول أبدًا. تفضل عدم الإعداد؟ استخدم الموقع المدار على
tryonus.tech.
| فحص جديد | حالة الفحص المباشرة |
|---|---|
![]() | ![]() |
| لوحة التقرير | اكتشاف الفحوصات |
|---|---|
![]() | ![]() |
domain → [recon | webscan | ssl_tls | headers | owasp | tech_fingerprint | nuclei | enumeration] (parallel, Celery)
→ any module failed/timed out? → pause for operator retry/continue/cancel
→ aggregator (dedup + OWASP-map + sort)
→ confidence verification (passive re-observation)
→ deterministic CVSS scoring
→ Ollama (Qwen 2.5 7B) AI analysis
→ WeasyPrint PDF + PostgreSQL
→ dashboard / PDF download
ست طبقات: واجهة أمامية Next.js ← FastAPI ← Celery/Redis ← 8 وحدات فحص
متوازية ← Ollama (Qwen 2.5 7B) ← WeasyPrint PDF + لوحة التحكم. التفاصيل الكاملة في
ARCHITECTURE.md (المخططات، التعاقدات، الحواجز الوقائية)
وdocs/QUICK_REF.md (مرجع سريع للتغييرات الشائعة).
mem_limit: 4g)،
وتعمل Postgres وRedis وAPI والعامل والواجهة الأمامية بجانبها.راجع المتطلبات الأساسية أعلاه:
8GB مساحة قرص و6GB ذاكرة RAM، وتوقع بناءً أوليًا يستغرق 10-15 دقيقة.
cp .env.example .env
cp backend/subfinder-config/provider-config.yaml.example backend/subfinder-config/provider-config.yaml
docker compose up -d
docker compose ps # wait for zap to report healthy (~2 min)
افتح **http://localhost:3000**، وأدخل نطاقًا، وعلّم على مربع التفويض، ثم ابدأ الفحص.
لا تسجيل دخول، ولا اشتراك، ولا تحقق بريد إلكتروني. ONUS المستضاف ذاتيًا مخصص لمشغّل واحد افتراضيًا - لا توجد خطوة حساب بين فتح لوحة التحكم والفحص.
يعمل هذا دون تثبيت Ollama. تقييم CVSS/الخطورة/الأولوية
حتمي دائمًا (analysis/cvss_scorer.py) - بدون تشغيل Ollama،
تحصل النتائج على قالب وصف قائم على القواعد بدلًا من نثر مولّد بالذكاء الاصطناعي.
راجع "اختياري: تفعيل الأوصاف المولّدة بالذكاء الاصطناعي" أدناه لتفعيل ذلك.
لا يتطلب تشغيل هذه الأداة أي مفاتيح API. كل أداة فحص تغلّفها
(nmap, ZAP, Nikto, testssl.sh, Nuclei, Amass, Naabu, httpx, WhatWeb,
WAFW00F, FFUF) وكذلك Ollama نفسه تعمل دون أي مفتاح إطلاقًا. خطوة نسخ
إعداد subfinder أعلاه هي الاستثناء الاختياري الوحيد - ترك القالب
فارغًا لا بأس به، إذ سيعمل subfinder بالمصادر المجانية/العامة فقط.
لتعميق تعداد النطاقات الفرعية، يمكنك إضافة ما يصل إلى مفتاحين من الطبقة المجانية إلى
ذلك الملف قبل البدء: رمز وصول شخصي من GitHub ومفتاح
API من ProjectDiscovery Chaos - راجع
التعليقات داخل provider-config.yaml.example.
يعمل Ollama أصليًا على المضيف (وليس داخل Docker) ليتمكن من استخدام
GPU الخاص بالمضيف مباشرة؛ تصل إليه الحاويات عبر host.docker.internal.
ollama pull qwen2.5:7b127.0.0.1 فقط، وهو ما لا تستطيع شبكة bridge الخاصة بـ Docker الوصول إليه):
sudo systemctl edit ollama
[Service]:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl daemon-reload && sudo systemctl restart ollama
curl http://localhost:11434/api/tagsdocker compose restart backend workerيعرّف ملف compose أيضًا 12 تطبيق تدريب معرّضة للثغرات عمدًا (Juice Shop, DVWA, bWAPP, Mutillidae, NodeGoat, DVWP/WordPress خلف جدار حماية ModSecurity WAF، Metasploitable2، WebGoat) لتجربة الفاحص على شيء ما دون الحاجة إلى هدف مصرح به خاص بك. وهي مقيدة خلف ملف تعريف Compose بحيث لا تُبنى/تُشغَّل افتراضيًا أبدًا:
docker compose --profile targets up -d
تحذير: هذه خدمات معرّضة للثغرات عمدًا، وبعضها يحمل أبوابًا خلفية حقيقية
(يأتي Metasploitable2 مع باب خلفي vsftpd حي). شغّل ملف التعريف
targets فقط على جهاز لا يمكن الوصول إليه من الإنترنت أو شبكة
مشتركة - أبدًا على مثيل سحابي عام أو مضيف مكشوف.
معظمها يعمل من صور مبنية مسبقًا ولا يحتاج أي شيء إضافي. اثنان -
nodegoat وdvwp-wordpress - يُبنَيان من شيفرة مصدرية غير مضمّنة في
هذا المستودع ويجب استنساخهما أولًا:
git clone https://github.com/OWASP/NodeGoat nodegoat-src
git clone https://github.com/vavkamil/dvwp dvwp-src
المنافذ المنشورة عند التشغيل: Juice Shop :3001, DVWA :8081, bWAPP
:8083, Mutillidae :8084, NodeGoat :8085, DVWP (عبر WAF, TLS) :8444,
WebGoat :8082. لا ينشر Metasploitable2 أي منفذ مضيف (لا يمكن الوصول إليه إلا من
backend/worker عبر الشبكة الداخلية لـ Docker) لأنه يعرض
خدمات شبكية حقيقية مخترقة/بدون مصادقة.
متغيرات البيئة، تُضبط عبر .env (منسوخة من .env.example):
القيم الافتراضية لـ POSTGRES_PASSWORD/SECRET_KEY أعلاه للعرض التوضيحي فقط -
مناسبة لمثيل محلي/شخصي لكن غيّر كلاهما قبل النشر في أي مكان يصل إليه
الآخرون. هذا الآن مُجبَر، وليس مجرد نصيحة: اضبط ONUS_ENV=production
(أو فعّل مصادقة الاستضافة المدارة) وسترفض الخلفية البدء
ما دام أي منهما ما يزال افتراضيًا/نائبًا. ولّد مفتاحًا قويًا عبر
python -c "import secrets; print(secrets.token_urlsafe(48))".
الميزات المقتصرة على الاستضافة المدارة مغلقة افتراضيًا. كل من
REQUIRE_AUTH (حسابات / تسجيل دخول OAuth) وHOSTED_QUEUE_ENABLED (طابور
الفحص) افتراضيان على false وليست مضبوطة في docker-compose.yml،
لذا لا يضعك ONUS المستضاف ذاتيًا خلف تسجيل دخول أو طابور أبدًا.
أبقِهما مغلقين ما لم تكن تبني عن قصد نشرًا مستضافًا متعدد المستخدمين -
مثيل tryonus.tech المدار هو من يفعّلهما.
لا تتضمن ONUS أي تحليلات افتراضيًا - لا يُحمَّل أي شيء ولا تغادر أي بيانات المتصفح. لجمع مقاييس استخدام مجهولة للمنتج على نشرك الخاص، اضبط معرّف قياس واحد من Google Analytics 4:
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
إنه متغير في زمن بناء الواجهة الأمامية، لذا اضبطه في بيئة بناء الواجهة
الأمامية (متغير بيئة في Vercel/المضيف، أو frontend/.env.local لعملية
npm run build محلية). عند ضبطه، يُحمَّل GA في إصدارات الإنتاج فقط
ويتتبع مشاهدات الصفحات إضافة إلى عدد قليل من أحداث المنتج (مثل
scan_started, scan_completed, report_downloaded). تمر الأحداث
المخصصة عبر الأداة المساعدة المكتوبة بأنواع في
frontend/lib/analytics.ts -
trackEvent('scan_started').
الخصوصية: تُرسل أحداث استخدام مجهولة ومنخفضة الأبعاد فقط - أبدًا
النطاقات المفحوصة، أو نتائج الفحص، أو النتائج، أو محتويات التقارير، أو حالة
التفويض، أو أي بيانات شخصية. أبقِ NEXT_PUBLIC_GA_ID غير مضبوط وسيتصرف
ONUS تمامًا كما في السابق؛ التحليلات اشتراكية بالكامل.
يولّد FastAPI وثائق Swagger تفاعلية مجانًا - بمجرد تشغيل الخلفية، افتح http://localhost:8000/docs.
docker compose down
docker compose logs -f backend worker
pip install -r backend/requirements-dev.txt
pytest backend/tests
655 اختبارًا آليًا للخلفية وقت كتابة هذا. أبعد من مجموعة اختبارات الوحدة/التكامل،
اختُبرت الأداة من البداية إلى النهاية أثناء التطوير: نُفذت 79 عملية فحص حقيقية
ووُلّدت 124 تقرير PDF ضد تسعة تطبيقات تدريب معرّضة للثغرات عمدًا
(DVWA, Juice Shop, Mutillidae, NodeGoat, bWAPP, WebGoat, Metasploitable2,
DVWP/WordPress خلف WAF) إضافة إلى هدف عام مصرح به واحد
(testphp.vulnweb.com) - ليست أرقامًا افتراضية.
افحص فقط الأهداف المصرح لك صراحةً باختبارها - راجع
docs/test_findings.md للأهداف التدريبية
المستخدمة أثناء التطوير.
ARCHITECTURE.md - البنية المعمارية الكاملة، والمخططات،
والتعاقدات التي لا ينبغي لأي تغيير كسرها. اقرأ هذا قبل إجراء أي
تغيير غير بديهي.docs/QUICK_REF.md - أوامر التشغيل، مسؤوليات
المجلدات، "أين أجري هذا التغيير".docs/scanners.md - الأساس المنطقي وراء تصميم
التوقيت/الأعلام لكل وحدة فحص.docs/ai.md - ضبط مهلة/سياق Ollama، ولماذا انتقل التقييم
خارج LLM تمامًا.docs/docker.md - ملاحظات انحرافات Docker ومزالق
البناء.docs/troubleshooting.md - كيف تختبر أي
وحدة/مرحلة يدويًا بشكل منعزل.docs/roadmap.md - التسلسل التاريخي للبناء
(البناء مكتمل).CONTRIBUTING.md - إعداد المطورين، الاختبارات،
توقعات طلبات السحب.MIT - راجع LICENSE.
فحص الأهداف دون تفويض كتابي صريح غير قانوني بموجب قانون تكنولوجيا المعلومات IT Act 2000 (الهند) والقوانين الدولية المماثلة. تتطلب هذه الأداة تأكيد التفويض في كل فحص وتُسجّل المشغّل + الطابع الزمني لأغراض المساءلة.
| الاستضافة الذاتية (هذا المستودع) | المدارة (tryonus.tech) |
|---|
| الإعداد | docker compose up | لا شيء - فقط افتح الموقع |
| تسجيل الدخول | لا شيء - مشغّل واحد | حساب / Google / GitHub OAuth |
| مسار الفحص | نطاق ← مربع التفويض ← فحص | نفسه، بعد تسجيل الدخول |
| إضافات | - | طابور فحص، سجل لكل مستخدم، بريد مستضاف |
| التشغيل | شبكتك الخاصة، معزولة عن الشبكة | سحابة مدارة |
| المتغير | الافتراضي | الغرض |
|---|
POSTGRES_PASSWORD | vapt_secure_2025 | كلمة مرور قاعدة البيانات |
SECRET_KEY | change_me_to_a_long_random_string | المفتاح السري للخلفية |
ALLOWED_HOSTS | localhost,127.0.0.1 | المضيفات المسموح بها في FastAPI |
OLLAMA_URL | http://host.docker.internal:11434 | حيث تصل الخلفية/العامل إلى Ollama |
SCAN_TIMEOUT_MULTIPLIER | 1.5 | يضاعف مهلة أداة/Celery لكل وحدة - أهداف العالم الحقيقي أبطأ من أهداف المختبر؛ اخفضه إلى 1.0 لتوقيتات مضبوطة للمختبر |
MAX_CONCURRENT_SCANS | 3 | سقف الفحوصات المتزامنة (حاجز استنزاف الموارد / المجاملة تجاه الهدف، ويحدد أيضًا حجم تجمع اتصالات قاعدة البيانات) |
ONUS_ENV | development | development (استضافة ذاتية على localhost — الأسرار الضعيفة تنبه فقط) أو production (كلمة مرور SECRET_KEY/Postgres الضعيفة تصبح فشل إقلاع صارم) |