
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