
خط أنابيب تحليل أمني آلي يقوم بتشغيل استعلامات CodeQL على مستودعات GitHub ويستخدم نماذج اللغة الكبيرة (LLMs) لتصنيف وتصفية الثغرات الحقيقية من الإيجابيات الكاذبة.
للحصول على نظرة عامة مفصلة حول البحث والدافع وراء Vulnhalla، راجع مقالة مدونة CyberArk لبحوث التهديدات الرسمية:
Vulnhalla: انتقاء الثغرات الحقيقية من كومة قش CodeQL
قبل البدء، تأكد من أن لديك:
Python 3.10 – 3.13 (يوصى باستخدام Python 3.11 أو 3.12)
CodeQL CLI
codeql موجود في PATH، أو ستقوم بتعيين المسار في .env (انظر الخطوة 2)(اختياري) رمز GitHub API
مفتاح API لـ LLM
كل الإعدادات موجودة في ملف واحد: .env
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
.env.example إلى .env:cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
.env واملأ القيم الخاصة بك:مثال لـ OpenAI:
CODEQL_PATH=codeql
GITHUB_TOKEN=ghp_your_token_here
PROVIDER=openai
MODEL=gpt-4o
OPENAI_API_KEY=your-api-key-here
LLM_TEMPERATURE=0.2
LLM_TOP_P=0.2
# اختياري: تكوين التسجيل
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
LOG_FILE= # اختياري: مسار ملف السجل (مثل logs/vulnhalla.log)
LOG_FORMAT=default # default أو json
# LOG_VERBOSE_CONSOLE=false # إذا كان true، WARNING/ERROR يستخدمان التنسيق الكامل (الطابع الزمني - المسجل - المستوى - الرسالة)
📖 للمرجعية الكاملة للتكوين: انظر مرجع التكوين أدناه لجميع المزودين المدعومين (OpenAI، Azure، Gemini، Bedrock)، والمتغيرات المطلوبة/الاختيارية، والأمثلة التفصيلية.
Windows (PowerShell):
# قائمة إصدارات Python المتاحة
py -0p
# اختر أي إصدار Python مدعوم: 3.10 / 3.11 / 3.12 / 3.13
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# أغلق وأعد فتح الطرفية (مطلوب)
pipx install poetry
poetry --version
macOS / Linux:
# تحقق من إصدار Python
python3 --version
# استخدم أي Python مدعوم: 3.10 / 3.11 / 3.12 / 3.13
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# أعد تشغيل الطرفية (مطلوب)
pipx install poetry
poetry --version
Windows (PowerShell):
# اختر إصدارًا واحدًا مدعومًا لديك: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # فرض Poetry لاستخدام إصدار Python مدعوم إذا كان لديك عدة إصدارات مثبتة
poetry install
poetry run vulnhalla-setup
macOS / Linux:
# اختر إصدارًا واحدًا مدعومًا لديك: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # فرض Poetry لاستخدام إصدار Python مدعوم إذا كان لديك عدة إصدارات مثبتة
poetry install
poetry run vulnhalla-setup
# تحليل مستودع معين، على سبيل المثال:
poetry run vulnhalla redis/redis
# إعادة التنزيل حتى لو كانت قاعدة البيانات موجودة بالفعل
poetry run vulnhalla redis/redis --force
# عرض المساعدة
poetry run vulnhalla --help
هذا سيقوم تلقائيًا بما يلي:
output/results/إذا كان لديك بالفعل قاعدة بيانات CodeQL على القرص (على سبيل المثال، تم إنشاؤها يدويًا أو من تشغيل سابق)، يمكنك تخطي خطوة جلب GitHub باستخدام العلم --local / -l:
Windows (PowerShell):
poetry run vulnhalla --local C:\path\to\my-codeql-db
macOS / Linux:
poetry run vulnhalla --local /path/to/my-codeql-db
ملاحظة: العلم
--localيتوقع دليل قاعدة بيانات CodeQL، وليس مجلد كود مصدر. يمكنك التحقق من ذلك عن طريق التأكد من أن المجلد يحتوي على ملفcodeql-database.yml.
# فتح واجهة المستخدم لعرض النتائج الموجودة (دون تشغيل التحليل)
poetry run vulnhalla-ui
# التحقق من صحة التكوين: CodeQL, LLM, التسجيل (دون تشغيل التحليل)
poetry run vulnhalla-validate
# عرض قائمة المستودعات التي تم تحليلها وأعداد المشكلات فيها
poetry run vulnhalla-list
# تشغيل المسار النموذجي (يحلل videolan/vlc وredis/redis)
poetry run vulnhalla-example
تتضمن Vulnhalla واجهة مستخدم كاملة المواصفات لتصفح واستكشاف نتائج التحليل.
poetry run vulnhalla-ui
تعرض واجهة المستخدم منطقة علوية بلوحين مع شريط تحكم سفلي:
المنطقة العلوية (جنبًا إلى جنب، قابلة لتغيير الحجم):
اللوحة اليسرى (قائمة المشكلات):
اللوحة اليمنى (التفاصيل):
شريط التحكم السفلي:
↑/↓ - التنقل في قائمة المشكلات (صفًا تلو الآخر)Tab / Shift+Tab - تبديل التركيز بين اللوحاتEnter - عرض التفاصيل للمشكلة المحددة/ - تركيز مربع إدخال البحث (في اللوحة اليسرى)Esc - مسح البحث وإعادة التركيز إلى جدول المشكلاتr - إعادة تحميل النتائج من القرص[ / ] - تغيير حجم اللوحات اليسرى/اليمنى (ضبط موضع الانقسام)q - إنهاء التطبيق[ لتحريك الفاصل لليسار، ] لتحريكه لليمينبعد تشغيل المسار، يتم تنظيم النتائج في output/results/<LANG>/<ISSUE_TYPE>/:
output/results/c/Copy_function_using_source_size/
├── 1_raw.json # بيانات مشكلة CodeQL الأصلية
├── 1_final.json # محادثة LLM وتصنيفه
├── 2_raw.json
├── 2_final.json
└── ...
يحتوي كل ملف *_final.json على: