
Ensemble-Framework zur Erkennung und Behebung von Softwareschwachstellen mithilfe mehrerer großer Sprachmodelle, mit Konsensanalyse und Bewertungswerkzeugen für Precision-Recall-Abwägungen.
Offizielle Implementierung und Artefakt für das Forschungspapier:
„DVDR-LLM: Wann sind LLMs gemeinsam besser bei der Erkennung und Behebung von Software-Schwachstellen?"
DVDR-LLM ist ein Ensemble-Framework, das systematisch die grundlegenden Trade-offs bei der Aggregation mehrerer großer Sprachmodelle (Large Language Models, LLMs) zur Erkennung und Behebung von Software-Schwachstellen untersucht. Unsere umfassende Evaluierung offenbart kritische Erkenntnisse über das Ausbalancieren von Präzision und Recall, Vorteile der Modellvielfalt sowie konsensbasierte Ansätze in sicherheitskritischen Anwendungen.
DVDR_LLM/
├── dvdr_llm/ # Hauptpaket (professionelle Struktur)
│ ├── __init__.py # Paket-Exporte
│ ├── cli.py # Kommandozeilen-Schnittstelle
│ ├── config.py # Konfigurationseinstellungen
│ ├── core/ # Kernfunktionalität
│ │ ├── api_client.py # LLM-API-Kommunikation
│ │ ├── detector.py # VulnerabilityDetector-Klasse
│ │ └── prompts.py # Hilfsprogramme zur Prompt-Erzeugung
│ ├── analysis/ # Analysemodule
│ │ ├── consensus.py # Konsensanalyse
│ │ └── metrics.py # Leistungskennzahlen
│ ├── evaluation/ # Modellevaluierung
│ │ └── evaluator.py # ModelEvaluator-Klasse
│ ├── visualization/ # Plotting und Visualisierung
│ │ └── plotter.py # ResultsPlotter-Klasse
│ └── tools/ # Zusätzliche Hilfsprogramme
├── utils/ # Ursprüngliche Hilfsmodule
│ ├── api.py # LLM-API-Interaktionshelfer
│ ├── database.py # SQLite-Hilfsfunktionen
│ └── config.py # Konfigurationskonstanten
├── data/ # Datensätze und Datenbanken
│ ├── vulnerabilities.csv # Schwachstellendaten
│ └── vulnerable and patched codes.sqlite
├── output/ # Generierte Ergebnisse und Datenbanken
│ ├── database_*.sqlite # Modellspezifische Datenbanken
│ ├── consensus_analysis/ # Ergebnisse der Konsensanalyse
│ ├── metrics/ # Leistungskennzahlen
│ └── database_exports/ # Exportierte Daten
├── examples/ # Verwendungsbeispiele
│ └── basic_usage.py # Demonstration der grundlegenden Verwendung
├── docs/ # Dokumentation
│ └── README_consensus_analysis.md
├── paper/ # Forschungspapier
│ ├── main.pdf # Veröffentlichtes Papier
│ └── main.tex # LaTeX-Quelltext
├── setup.py # Paketinstallation
├── requirements.txt # Abhängigkeiten
├── CHANGELOG.md # Änderungsprotokoll
├── LICENSE # MIT-Lizenz
└── README.md # Diese Datei
Repository klonen:
git clone https://github.com/Erroristotle/DVDR_LLM.git
cd DVDR_LLM
Abhängigkeiten installieren:
pip install -r requirements.txt
pip install -e . # Paket im Entwicklungsmodus installieren
Installation überprüfen:
python verify_package.py
# Schwachstellenerkennung mit Ensemble ausführen
dvdr-llm detect --models llama3-8b,codellama-7b --database data/vulnerabilities.sqlite
# Konsensmuster analysieren (RQ2)
dvdr-llm analyze consensus --input results/metrics/model_predictions.csv --threshold 0.6
# Visualisierung von Konfliktmustern erzeugen (Abbildung im Papier)
python dvdr_llm/visualization/conflict_pattern_plot.py results/metrics/reviewer_insights_disagreement_patterns.csv -o reviewer_insights
# Ensemble-Leistung über Abstraktionsebenen hinweg evaluieren (RQ3)
dvdr-llm evaluate --models-dir output/ --abstraction-analysis
from dvdr_llm import VulnerabilityDetector, ConsensusAnalyzer, ModelEvaluator
# Schwachstellendetektor initialisieren
detector = VulnerabilityDetector("llama3-8b-instruct")
# Mit Datenbank verbinden
detector.connect_to_database("data/vulnerabilities.sqlite")
# Code auf Schwachstellen analysieren
code = """
void vulnerable_function(char *input) {
char buffer[100];
strcpy(buffer, input); // Buffer overflow
}
"""
# CVE-Vorhersagen erhalten
cve_names = detector.analyze_code_for_cves(code, 2023)
print(f"Identified CVEs: {cve_names}")
# Schwachstelle erkennen
is_vulnerable = detector.detect_vulnerability(code)
print(f"Is vulnerable: {is_vulnerable}")
# Datenbankeinträge verarbeiten
stats = detector.process_database_entries(limit=100)
print(f"Processed {stats['processed']} entries")
# Aufräumen
detector.close()
# Multi-Modell-Konsensanalyse
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)
# Modellevaluierung
evaluator = ModelEvaluator()
evaluation_results = evaluator.evaluate_multiple_models(
model_databases,
"data/ground_truth.csv"
)
# Tabelle 2 erzeugen (Modellvergleich mit Delta-Prozenten)
python dvdr_llm/tools/model_contribution_analysis.py results/metrics/model_predictions.csv --compare-ensemble --threshold 0.7
# Einzelne vs. Ensemble-Leistung analysieren
dvdr-llm evaluate --comparison-analysis --threshold 0.7
# Abbildung 3 erzeugen (Schwellenwert-Sensitivitätsanalyse)
python dvdr_llm/tools/threshold_analysis.py results/metrics/model_predictions.csv --range 0.3-0.8
# Statistische Validierung der Schwellenwertauswahl
python dvdr_llm/analysis/statistical_validation.py --threshold-analysis
# Tabelle 3 erzeugen (Analyse der Abstraktionsebenen)
python dvdr_llm/evaluation/evaluator.py --abstraction-analysis --threshold 0.6
# Ebenenspezifische Leistungsbewertung
dvdr-llm evaluate --abstraction-levels 1,2,3 --ensemble
# Patch-Qualitätsmetriken analysieren (ROUGE, CodeBLEU, Komplexität)
python dvdr_llm/tools/patch_quality_analysis.py results/patches/ --weighted-scoring
# Abbildung 4 erzeugen (Patch-Ähnlichkeits- und Komplexitätsanalyse)
dvdr-llm visualize --patch-analysis --metrics results/patch_metrics.csv
# Hauptabbildung zur Konfliktmusteranalyse (Abbildung 2)
python dvdr_llm/visualization/conflict_pattern_plot.py results/metrics/reviewer_insights_disagreement_patterns.csv -o reviewer_insights
# Schwellenwert-Sensitivitätsanalyse (Abbildung 3)
python dvdr_llm/visualization/enhanced_figure3_generator.py results/metrics/model_predictions.csv
# Statistische Validierungsdiagramme (Anhang)
python dvdr_llm/analysis/statistical_significance_analysis.py --generate-plots
Bearbeiten Sie dvdr_llm/config.py, um LLM-Endpunkte zu konfigurieren:
LLM_MODELS = {
"llama3_8b": "ollama run llama3:8b-instruct",
"codellama_7b": "ollama run codellama:7b-instruct",
"mistral_7b": "ollama run mistral:7b-instruct",
# Fügen Sie Ihre Modellkonfigurationen hinzu
}
# Konsensschwellenwerte für verschiedene Szenarien
CONSENSUS_THRESHOLDS = {
"conservative": 0.8, # Hohe Präzision, wenige falsch-positive Ergebnisse
"balanced": 0.6, # Ausgewogene Präzision und Recall
"sensitive": 0.4 # Hoher Recall, mehr Schwachstellen erfassen
}
Das Framework verwendet standardisierte Prompt-Vorlagen für die Reproduzierbarkeit:
Δ% zeigt die Leistungsdifferenz zur Ensemble-Basislinie
# Benutzerdefinierte Konsensstrategie implementieren
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
# Benutzerdefinierte Visualisierung verwenden
from dvdr_llm.visualization import ConflictPatternPlotter
plotter = ConflictPatternPlotter()
plotter.create_professional_figure(
disagreement_data,
output_prefix="custom_analysis",
style="publication"
)
# Neues LLM-Modell hinzufügen
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):
# Benutzerdefinierte API-Interaktion implementieren
pass
# Neues Modell registrieren
detector.register_model("custom-llm", CustomLLMClient("api_url", "model_name"))
Die vollständigen Forschungsergebnisse sind in paper/main.tex dokumentiert. Zu den wichtigsten Beiträgen gehören:
Wir freuen uns über Beiträge! Bitte beachten Sie unsere Richtlinien für Mitwirkende:
git checkout -b feature/new-analysis)git commit -am 'Add new analysis method')git push origin feature/new-analysis)Siehe LICENCE-Datei.
Wenn Sie DVDR-LLM verwenden, zitieren Sie bitte: @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} }
| Modell | 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 % |
| Ensemble (60 %) | Basislinie | Basislinie | Basislinie | Basislinie |