
إطار عمل تجميعي لاكتشاف وإصلاح الثغرات الأمنية في البرمجيات باستخدام نماذج لغوية كبيرة متعددة، مع أدوات لتحليل توافق الآراء وتقييم المفاضلة بين الدقة والاستدعاء.
التنفيذ الرسمي والقطعة الأثرية للبحث العلمي:
"DVDR-LLM: متى تكون النماذج اللغوية الكبيرة أفضل معًا لاكتشاف وإصلاح الثغرات البرمجية؟"
DVDR-LLM هو إطار عمل تنسيقي (Ensemble) يدرس بشكل منهجي المفاضلات الأساسية في تجميع نماذج لغوية كبيرة متعددة (LLMs) لاكتشاف وإصلاح الثغرات البرمجية. يكشف تقييمنا الشامل عن رؤى حاسمة حول موازنة الدقة والاستدعاء (Precision-Recall)، وفوائد تنوع النماذج، والمناهج القائمة على توافق الآراء في التطبيقات الحساسة أمنيًا.
DVDR_LLM/
├── dvdr_llm/ # الحزمة الرئيسية (هيكل احترافي)
│ ├── __init__.py # تصديرات الحزمة
│ ├── cli.py # واجهة سطر الأوامر
│ ├── config.py # إعدادات التهيئة
│ ├── core/ # الوظائف الأساسية
│ │ ├── api_client.py # التواصل مع واجهة برمجة تطبيقات LLM
│ │ ├── detector.py # صنف VulnerabilityDetector
│ │ └── prompts.py # أدوات توليد المطالبات
│ ├── analysis/ # وحدات التحليل
│ │ ├── consensus.py # تحليل توافق الآراء
│ │ └── metrics.py # مقاييس الأداء
│ ├── evaluation/ # تقييم النماذج
│ │ └── evaluator.py # صنف ModelEvaluator
│ ├── visualization/ # الرسم والتصور
│ │ └── plotter.py # صنف ResultsPlotter
│ └── tools/ # أدوات إضافية
├── utils/ # الوحدات المساعدة الأصلية
│ ├── api.py # أدوات التفاعل مع واجهة برمجة تطبيقات LLM
│ ├── database.py # دوال مساعدة لـ SQLite
│ └── config.py # ثوابت الإعدادات
├── data/ # مجموعات البيانات وقواعد البيانات
│ ├── vulnerabilities.csv # بيانات الثغرات
│ └── vulnerable and patched codes.sqlite
├── output/ # النتائج وقواعد البيانات المُنشأة
│ ├── database_*.sqlite # قواعد بيانات خاصة بكل نموذج
│ ├── consensus_analysis/ # نتائج تحليل توافق الآراء
│ ├── metrics/ # مقاييس الأداء
│ └── database_exports/ # البيانات المُصدَّرة
├── examples/ # أمثلة الاستخدام
│ └── basic_usage.py # عرض أساسي للاستخدام
├── docs/ # التوثيق
│ └── README_consensus_analysis.md
├── paper/ # البحث العلمي
│ ├── main.pdf # الورقة المنشورة
│ └── main.tex # مصدر LaTeX
├── setup.py # تثبيت الحزمة
├── requirements.txt # التبعيات
├── CHANGELOG.md # سجل التغييرات
├── LICENSE # رخصة MIT
└── README.md # هذا الملف
استنساخ المستودع:
git clone https://github.com/Erroristotle/DVDR_LLM.git
cd DVDR_LLM
تثبيت التبعيات:
pip install -r requirements.txt
pip install -e . # تثبيت الحزمة في وضع التطوير
التحقق من التثبيت:
python verify_package.py
# تشغيل اكتشاف الثغرات مع التنسيق
dvdr-llm detect --models llama3-8b,codellama-7b --database data/vulnerabilities.sqlite
# تحليل أنماط توافق الآراء (RQ2)
dvdr-llm analyze consensus --input results/metrics/model_predictions.csv --threshold 0.6
# توليد تصور نمط التضارب (الشكل في الورقة)
python dvdr_llm/visualization/conflict_pattern_plot.py results/metrics/reviewer_insights_disagreement_patterns.csv -o reviewer_insights
# تقييم أداء التنسيق عبر مستويات التجريد (RQ3)
dvdr-llm evaluate --models-dir output/ --abstraction-analysis
from dvdr_llm import VulnerabilityDetector, ConsensusAnalyzer, ModelEvaluator
# Initialize vulnerability detector
detector = VulnerabilityDetector("llama3-8b-instruct")
# Connect to database
detector.connect_to_database("data/vulnerabilities.sqlite")
# Analyze code for vulnerabilities
code = """
void vulnerable_function(char *input) {
char buffer[100];
strcpy(buffer, input); // Buffer overflow
}
"""
# Get CVE predictions
cve_names = detector.analyze_code_for_cves(code, 2023)
print(f"Identified CVEs: {cve_names}")
# Detect vulnerability
is_vulnerable = detector.detect_vulnerability(code)
print(f"Is vulnerable: {is_vulnerable}")
# Process database entries
stats = detector.process_database_entries(limit=100)
print(f"Processed {stats['processed']} entries")
# Clean up
detector.close()
# Multi-model consensus analysis
model_databases = {
"llama3-8b": "output/database_llama3-8b-instruct.sqlite",
"codellama-7b": "output/database_codellama-7b-instruct.sqlite",
"gemma2-9b": "output/database_gemma2-9b.sqlite"
}
analyzer = ConsensusAnalyzer()
consensus_results = analyzer.run_full_analysis(model_databases)
# Model evaluation
evaluator = ModelEvaluator()
evaluation_results = evaluator.evaluate_multiple_models(
model_databases,
"data/ground_truth.csv"
)
# توليد الجدول 2 (مقارنة النماذج مع نسب التغير المئوية)
python dvdr_llm/tools/model_contribution_analysis.py results/metrics/model_predictions.csv --compare-ensemble --threshold 0.7
# تحليل الأداء الفردي مقابل أداء التنسيق
dvdr-llm evaluate --comparison-analysis --threshold 0.7
# توليد الشكل 3 (تحليل حساسية العتبة)
python dvdr_llm/tools/threshold_analysis.py results/metrics/model_predictions.csv --range 0.3-0.8
# التحقق الإحصائي من اختيار العتبة
python dvdr_llm/analysis/statistical_validation.py --threshold-analysis
# توليد الجدول 3 (تحليل مستوى التجريد)
python dvdr_llm/evaluation/evaluator.py --abstraction-analysis --threshold 0.6
# تقييم الأداء الخاص بكل مستوى
dvdr-llm evaluate --abstraction-levels 1,2,3 --ensemble
# تحليل مقاييس جودة التصحيح (ROUGE، CodeBLEU، التعقيد)
python dvdr_llm/tools/patch_quality_analysis.py results/patches/ --weighted-scoring
# توليد الشكل 4 (تحليل تشابه التصحيحات وتعقيدها)
dvdr-llm visualize --patch-analysis --metrics results/patch_metrics.csv
# الشكل الرئيسي لتحليل نمط التضارب (الشكل 2)
python dvdr_llm/visualization/conflict_pattern_plot.py results/metrics/reviewer_insights_disagreement_patterns.csv -o reviewer_insights
# تحليل حساسية العتبة (الشكل 3)
python dvdr_llm/visualization/enhanced_figure3_generator.py results/metrics/model_predictions.csv
# مخططات التحقق الإحصائي (الملحق)
python dvdr_llm/analysis/statistical_significance_analysis.py --generate-plots
قم بتعديل dvdr_llm/config.py لإعداد نقاط نهاية النماذج اللغوية الكبيرة:
LLM_MODELS = {
"llama3_8b": "ollama run llama3:8b-instruct",
"codellama_7b": "ollama run codellama:7b-instruct",
"mistral_7b": "ollama run mistral:7b-instruct",
# Add your model configurations
}
# Consensus thresholds for different scenarios
CONSENSUS_THRESHOLDS = {
"conservative": 0.8, # High precision, low false positives
"balanced": 0.6, # Balanced precision-recall
"sensitive": 0.4 # High recall, catch more vulnerabilities
}
يستخدم الإطار قوالب مطالبات موحدة لضمان قابلية إعادة الإنتاج:
| النموذج | SVD1 (Δ%) | SVD2 (Δ%) | SVD3 (Δ%) | SVD4 (Δ%) |
|---|---|---|---|---|
| Llama3-8b | +59.8% | -87.5% | +127.1% | -73.5% |
| Llama3-70b | -50.8% | +54.4% | -19.6% | +13.5% |
| CodeLlama-7b | +16.8% | -34.6% | +86.9% | -45.4% |
| التنسيق (60%) | خط الأساس | خط الأساس | خط الأساس | خط الأساس |
Δ% يُظهر فرق الأداء مقارنة بخط أساس التنسيق
# Implement custom consensus strategy
from dvdr_llm.analysis.consensus import ConsensusAnalyzer
class WeightedConsensus(ConsensusAnalyzer):
def __init__(self, model_weights):
self.weights = model_weights
def weighted_majority_vote(self, predictions):
weighted_sum = sum(pred * weight for pred, weight in zip(predictions, self.weights))
return weighted_sum >= 0.5
# Use custom visualization
from dvdr_llm.visualization import ConflictPatternPlotter
plotter = ConflictPatternPlotter()
plotter.create_professional_figure(
disagreement_data,
output_prefix="custom_analysis",
style="publication"
)
# Add new LLM model
from dvdr_llm.core.api_client import LLMClient
class CustomLLMClient(LLMClient):
def __init__(self, api_endpoint, model_name):
super().__init__(api_endpoint, model_name)
def generate_response(self, prompt, **kwargs):
# Implement custom API interaction
pass
# Register new model
detector.register_model("custom-llm", CustomLLMClient("api_url", "model_name"))
النتائج البحثية الكاملة موثقة في paper/main.tex. تشمل المساهمات الرئيسية:
نرحب بالمساهمات! يرجى الاطلاع على إرشادات المساهمة:
git checkout -b feature/new-analysis)git commit -am 'Add new analysis method')git push origin feature/new-analysis)راجع ملف LICENCE.
إذا استخدمت DVDR-LLM، يرجى الاستشهاد: @article{zibaeirad2025diverse, title={Diverse LLMs vs. Vulnerabilities: Who Detects and Fixes Them Better?}, author={Zibaeirad, Arastoo and Vieira, Marco}, journal={arXiv preprint arXiv:2512.12536}, year={2025} }