Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Vulnhalla — Automatisierte Sicherheitsanalyse-Pipeline, die CodeQL-Abfragen auf GitHub-Repositories ausführt und LLMs verwendet, um echte Schwachstellen von False Positives zu klassifizieren und zu filtern. | Kitploit
Tools/GitHubGitHub/cyberark/vulnhalla
Statische AnalyseSchwachstellenanalyseCode-AnalyseDevSecOpsMaschinelles LernenLernen & BildungKI-Sicherheit
GitHubcyberark/vulnhalla

Vulnhalla

Automatisierte Sicherheitsanalyse-Pipeline, die CodeQL-Abfragen auf GitHub-Repositories ausführt und LLMs verwendet, um echte Schwachstellen von False Positives zu klassifizieren und zu filtern.

Repository anzeigen
2014149vor 1 MonatVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Vulnhalla

Automatisierte CodeQL-Analyse mit LLM-Klassifizierung

Vulnhalla

Eine detaillierte Übersicht über die Forschung und Motivation hinter Vulnhalla finden Sie im offiziellen CyberArk Threat Research Blog-Beitrag:

Vulnhalla: Picking the True Vulnerabilities from the CodeQL Haystack

Vulnhalla automatisiert die gesamte Sicherheitsanalyse-Pipeline:

  1. Abrufen von Repositorys einer bestimmten Programmiersprache von GitHub
  2. Herunterladen der zugehörigen CodeQL-Datenbanken (sofern verfügbar)
  3. Ausführen von CodeQL-Abfragen auf diesen Datenbanken, um Sicherheits- oder Codequalitätsprobleme zu erkennen
  4. Nachbearbeitung der Ergebnisse mit einem LLM (ChatGPT, Gemini, usw.), um die Probleme zu klassifizieren und zu filtern

🚀 Schnellstart

Schritt 1: Voraussetzungen

Stellen Sie vor dem Start sicher, dass Sie Folgendes haben:

  • Python 3.10 – 3.13 (Python 3.11 oder 3.12 empfohlen)

    • Python 3.14+ wird nicht unterstützt (dieses Tool verwendet grpcio, das von Python 3.14+ nicht unterstützt wird)
    • Herunterladen von python.org
  • CodeQL CLI

    • Herunterladen von CodeQL CLI releases
    • Stellen Sie sicher, dass codeql in Ihrem PATH ist, oder Sie setzen den Pfad in .env (siehe Schritt 2)
  • (Optional) GitHub-API-Token

    • Für höhere Ratenlimits beim Herunterladen von Datenbanken
    • Holen Sie sich einen Token von GitHub Settings > Tokens
  • LLM-API-Schlüssel

    • OpenAI-, Azure-, Gemini- oder Bedrock-Anmeldedaten (je nach Anbieter)

Schritt 2: Umgebung konfigurieren

Die gesamte Konfiguration erfolgt in einer einzigen Datei: .env

  1. Repository klonen:
root@kitploit:~
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
  1. Kopieren Sie .env.example nach .env:
root@kitploit:~
cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
  1. Bearbeiten Sie .env und fügen Sie Ihre Werte ein:

Beispiel für OpenAI:

root@kitploit:~
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

# Optional: Logging-Konfiguration
LOG_LEVEL=INFO                  # DEBUG, INFO, WARNING, ERROR
LOG_FILE=                       # Optional: Pfad zur Logdatei (z. B. logs/vulnhalla.log)
LOG_FORMAT=default              # default oder json
# LOG_VERBOSE_CONSOLE=false     # Bei true: WARNING/ERROR im vollständigen Format (Timestamp - Logger - Level - Message)

📖 Für die vollständige Konfigurationsreferenz: Siehe Konfigurationsreferenz unten für alle unterstützten Anbieter (OpenAI, Azure, Gemini, Bedrock), erforderliche/optionale Variablen und detaillierte Beispiele.

Schritt 3: Poetry installieren (Empfohlen: pipx)

Windows (PowerShell):

root@kitploit:~
# Verfügbare Python-Versionen auflisten
py -0p

# Beliebige unterstützte Python-Version auswählen: 3.10 / 3.11 / 3.12 / 3.13
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# Terminal schließen und erneut öffnen (erforderlich)
pipx install poetry
poetry --version

macOS / Linux:

root@kitploit:~
# Python-Version prüfen
python3 --version

# Beliebige unterstützte Python-Version verwenden: 3.10 / 3.11 / 3.12 / 3.13
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# Terminal neu starten (erforderlich)
pipx install poetry
poetry --version

Schritt 4: Abhängigkeiten installieren und Setup

Windows (PowerShell):

root@kitploit:~
# Eine unterstützte Version auswählen, die Sie installiert haben: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12  # Poetry zwingen, eine unterstützte Python-Version zu verwenden, wenn mehrere Versionen installiert sind
poetry install
poetry run vulnhalla-setup

macOS / Linux:

root@kitploit:~
# Eine unterstützte Version auswählen, die Sie installiert haben: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12  # Poetry zwingen, eine unterstützte Python-Version zu verwenden, wenn mehrere Versionen installiert sind
poetry install
poetry run vulnhalla-setup

Schritt 5: Pipeline ausführen

root@kitploit:~
# Ein bestimmtes Repository analysieren, z. B.:
poetry run vulnhalla redis/redis

# Erneut herunterladen, auch wenn die Datenbank bereits existiert
poetry run vulnhalla redis/redis --force

# Hilfe anzeigen
poetry run vulnhalla --help

Dies wird automatisch:

  1. CodeQL-Datenbanken abrufen
  2. CodeQL-Abfragen auf allen heruntergeladenen Datenbanken ausführen
  3. Ergebnisse mit dem LLM analysieren und in output/results/ speichern
  4. Die UI zum Durchsuchen der Ergebnisse öffnen

Verwenden einer lokalen CodeQL-Datenbank

Wenn Sie bereits eine CodeQL-Datenbank auf der Festplatte haben (z. B. manuell erstellt oder von einem vorherigen Lauf), können Sie den GitHub-Abruf-Schritt mit dem --local / -l-Flag überspringen:

Windows (PowerShell):

root@kitploit:~
poetry run vulnhalla --local C:\path\to\my-codeql-db

macOS / Linux:

root@kitploit:~
poetry run vulnhalla --local /path/to/my-codeql-db

Hinweis: Das --local-Flag erwartet ein CodeQL-Datenbank-Verzeichnis, keinen Quellcode-Ordner. Sie können überprüfen, ob der Ordner eine codeql-database.yml-Datei enthält.

Zusätzliche Befehle

root@kitploit:~
# UI öffnen, um vorhandene Ergebnisse anzuzeigen (ohne Analyse auszuführen)
poetry run vulnhalla-ui

# Konfiguration validieren: CodeQL, LLM, Logging (ohne Analyse)
poetry run vulnhalla-validate

# Analysierte Repositorys und deren Problemzahlen auflisten
poetry run vulnhalla-list

# Beispiel-Pipeline ausführen (analysiert videolan/vlc und redis/redis)
poetry run vulnhalla-example

🖥️ Benutzeroberfläche (UI)

Vulnhalla enthält eine voll ausgestattete Benutzeroberfläche zum Durchsuchen und Erkunden der Analyseergebnisse.

UI starten

root@kitploit:~
poetry run vulnhalla-ui

UI-Layout

Die UI zeigt einen zweigeteilten oberen Bereich mit einer Steuerungsleiste unten an:

Oberer Bereich (nebeneinander, in der Größe veränderbar):

  • Linkes Panel (Problemliste):

    • Datentabelle mit: ID, Repo, Problemname, Datei, LLM-Entscheidung, Manuelle Entscheidung
    • Problemanzahl und Sortierindikator
    • Suchfeld unten, aktualisiert während der Eingabe (Groß-/Kleinschreibung wird ignoriert).
  • Rechtes Panel (Details):

    • LLM-Entscheidungsabschnitt: Zeigt die LLM-Klassifizierung (True Positive, False Positive oder Needs More Data)
    • Metadatenabschnitt: Problemname, Repo, Datei, Zeile, Typ, Funktionsname
    • Codeabschnitt:
      • 📌 Erster Code-Kontext (das erste Code-Snippet, das das LLM sah)
      • 📥 Zusätzlicher Code (Code, den das LLM während des Gesprächs anforderte) – nur angezeigt, wenn zusätzlicher Code vorhanden ist
      • Verwundbare Zeile rot markiert
    • Zusammenfassungsabschnitt: LLM-Endantwort/-Entscheidung
    • Manuelle Entscheidung auswählen: Dropdown unten, um das manuelle Urteil zu setzen (True Positive, False Positive, Uncertain oder Not Set)

Untere Steuerungsleiste:

  • Sprache: C (derzeit einzige unterstützte Sprache)
  • Filter nach LLM-Entscheidung: Alle, True Positive, False Positive, Needs more Info to decide
  • Aktionsschaltflächen: Aktualisieren, Analyse ausführen
  • Hilfetext zu Tastenkombinationen

Tastenkombinationen

  • ↑/↓ - Durch die Problemliste navigieren (zeilenweise)
  • Tab / Shift+Tab - Fokus zwischen den Panels wechseln
  • Enter - Details zum ausgewählten Problem anzeigen
  • / - Suchfeld fokussieren (im linken Panel)
  • Esc - Suche löschen und Fokus zurück zur Tabelle setzen
  • r - Ergebnisse von der Festplatte neu laden
  • [ / ] - Linkes/rechtes Panel in der Größe ändern (Teilungsposition anpassen)
  • q - Anwendung beenden

Interaktive Funktionen

Spaltensortierung

  • Klicken Sie auf einen beliebigen Spaltenkopf, um nach dieser Spalte zu sortieren
  • Standardsortierung: nach Repo (aufsteigend), dann nach ID (aufsteigend)

Größenveränderbare Panels

  • Verschiebbarer Trenner zwischen Problemliste und Detailpanel
  • Maus: Klicken und den Trenner ziehen, um die Größe zu ändern
  • Tastatur: Verwenden Sie [, um den Trenner nach links zu verschieben, ], um ihn nach rechts zu verschieben
  • Die Teilungsposition bleibt während der Sitzung erhalten

📊 Ausgabestruktur

Nach dem Ausführen der Pipeline werden die Ergebnisse in output/results/<LANG>/<ISSUE_TYPE>/ organisiert:

root@kitploit:~
output/results/c/Copy_function_using_source_size/
├── 1_raw.json      # Ursprüngliche CodeQL-Problemdaten
├── 1_final.json    # LLM-Gespräch und Klassifizierung
├── 2_raw.json
├── 2_final.json
└── ...

Jede *_final.json enthält:

  • Vollständiges LLM-Gespräch (System-Prompts, Benutzernachrichten, Assistentenantworten, Tool-Aufrufe)
  • Endgültiger Statuscode (1337 = verwundbar, 1007 = sicher, 7331/3713 = benötigt mehr Informationen)

Jede *_raw.json enthält:

  • Ursprüngliche CodeQL-Problemdaten
  • Funktionskontext
  • Datenbankpfad (enthält Org/Repo-Informationen: output/databases/<LANG>/<ORG>/<REPO>)
  • Problemposition

🛠 Fehlerbehebung

  • CodeQL CLI nicht gefunden:
    Setzen Sie CODEQL_PATH in Ihrer .env-Datei auf den vollständigen Pfad zu Ihrer CodeQL-Ausführungsdatei. Unter Windows: Der Pfad muss mit .cmd enden (z. B. C:\path\to\codeql\codeql.cmd).

  • GitHub-Ratenlimits:
    Setzen Sie GITHUB_TOKEN in Ihrer .env-Datei (Token von https://github.com/settings/tokens abrufen).

  • LLM-Probleme:
    Überprüfen Sie Ihre API-Schlüssel in der .env-Datei, ob sie mit Ihrem ausgewählten Anbieter übereinstimmen.

  • Importfehler in der UI:
    Stellen Sie sicher, dass Sie aus dem Projektstammverzeichnis ausführen, oder verwenden Sie python examples/ui_example.py, das die Pfadeinrichtung übernimmt.


⚙️ Konfigurationsreferenz

Umgebungsvariablen

Die gesamte Konfiguration erfolgt über Umgebungsvariablen in Ihrer .env-Datei. Hier ist eine vollständige Referenz:

Erforderliche Variablen

VariableErforderlich fürBeschreibung
CODEQL_PATHAllePfad zur CodeQL-Ausführungsdatei. Standard ist codeql, wenn CodeQL im PATH ist. Verwenden Sie den vollständigen Pfad, wenn nicht im PATH (z. B. C:\path\to\codeql\codeql.cmd unter Windows)
PROVIDERAlleLLM-Anbieter: openai, azure, gemini, bedrock, anthropic, mistral, groq, openrouter, ollama, usw.
MODELAlleModellname (z. B. gpt-4o, gpt-4-turbo, gemini-2.5-flash)

Anbieterspezifische erforderliche Variablen

OpenAI:

VariableBeschreibung
OPENAI_API_KEYIhr OpenAI-API-Schlüssel von platform.openai.com

Azure OpenAI:

VariableBeschreibung
AZURE_OPENAI_API_KEY oder AZURE_API_KEYIhr Azure OpenAI-API-Schlüssel
AZURE_OPENAI_ENDPOINT oder AZURE_API_BASEIhre Azure OpenAI-Endpunkt-URL (z. B. https://your-resource.openai.azure.com)
AZURE_OPENAI_API_VERSION oder AZURE_API_VERSIONAPI-Version (Standard: 2024-08-01-preview)

Gemini (Google):

VariableBeschreibung
GOOGLE_API_KEYIhr Google-API-Schlüssel von Google AI Studio

AWS Bedrock:

VariableErforderlichBeschreibung
AWS_REGION_NAMEJaAWS-Region (z. B. us-east-1, us-west-2)
AWS_PROFILENein*AWS-Profilname für SSO-/Credentials-Datei-Authentifizierung
AWS_ACCESS_KEY_IDNein*AWS-Zugriffsschlüssel (falls kein Profil verwendet wird)
AWS_SECRET_ACCESS_KEYNein*AWS-Geheimschlüssel (falls kein Profil verwendet wird)
AWS_SESSION_TOKENNeinSitzungstoken für temporäre STS-Anmeldeinformationen

* Authentifizierung: Verwenden Sie AWS_PROFILE oder AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (+ optional AWS_SESSION_TOKEN für STS).

Bedrock .env-Beispiel (SSO):

root@kitploit:~
PROVIDER=bedrock
MODEL=anthropic.claude-3-5-sonnet-20241022-v2:0
AWS_REGION_NAME=us-east-1
AWS_PROFILE=your-profile

⚠️ Voraussetzungen:

  • AWS-Anmeldeinformationen müssen konfiguriert sein (SSO, IAM-Profil oder Zugriffsschlüssel) mit Berechtigungen zum Aufrufen von Bedrock-Modellen
  • Für SSO-Benutzer: Führen Sie aws sso login --profile your-profile aus, bevor Sie Vulnhalla verwenden

🔧 Wichtig – Modellauswahl: Stellen Sie bei der Auswahl eines Bedrock-Modells sicher, dass es Tool-Aufrufe/Function Calling unterstützt (nicht alle Bedrock-Modelle tun dies). Tool-Aufrufe sind ein wesentlicher Bestandteil des Vulnhalla-Analyseflusses, daher macht die Wahl eines kompatiblen Modells einen großen Unterschied in der Funktionalität und den Ergebnissen. Kompatible Modelle umfassen: Claude 3.x, Mistral oder Cohere Command R.

Optionale Variablen

VariableStandardBeschreibung
GITHUB_TOKEN-GitHub-API-Token für höhere Ratenlimits. Holen Sie sich einen von GitHub Settings > Tokens
GITHUB_API_URLhttps://api.github.comGitHub-API-URL. Für GitHub Enterprise auf die API-URL Ihres Servers setzen (z. B. https://github.your-company.com/api/v3)
GITHUB_SSL_VERIFYtrueSSL-Zertifikatsüberprüfung. Setzen Sie auf false für GitHub Enterprise mit selbstsignierten oder internen CA-Zertifikaten
LLM_TEMPERATURE0.2LLM-Temperatur (0.0-2.0). Niedriger = deterministischer. Empfohlen: bei 0.2 belassen
LLM_TOP_P0.2LLM Top-P-Sampling (0.0-1.0). Niedriger = fokussierter. Empfohlen: bei 0.2 belassen
LOG_LEVELINFOLogging-Level: DEBUG, INFO, WARNING oder ERROR. Steuert die Ausführlichkeit der Konsolenausgabe
LOG_FILE-Optionaler Pfad zur Logdatei (z. B. logs/vulnhalla.log). Wenn gesetzt, werden Logs sowohl auf die Konsole als auch in die Datei geschrieben. Datei-Logging verwendet DEBUG-Level für detaillierte Ausgabe
LOG_FORMATdefaultLog-Format-Stil: default (menschenlesbar) oder json (strukturiertes JSON-Format)
LOG_VERBOSE_CONSOLEfalseBei true verwenden WARNING/ERROR/CRITICAL das vollständige Format (Timestamp - Logger - Level - Nachricht). Standard: WARNING/ERROR verwenden einfaches Format (LEVEL - Nachricht), INFO immer minimal (nur Nachricht)
THIRD_PARTY_LOG_LEVELERRORLog-Level für Drittanbieter-Bibliotheken (LiteLLM, urllib3, requests). Optionen: , , , . Standard unterdrückt die meisten Drittanbieter-Störungen

⚠️ Wichtig: Erhöhen Sie LLM_TEMPERATURE oder LLM_TOP_P nur, wenn Sie die Auswirkungen vollständig verstehen. Niedrigere Werte halten das Modell stabil und deterministisch, was für die Sicherheitsanalyse entscheidend ist. Höhere Werte können dazu führen, dass das Modell inkonsistent, kreativ wird oder Ergebnisse halluziniert.

📝 Hinweis: Weitere Konfigurationsbeispiele finden Sie in der Datei .env.example im Projektstamm.

Konfigurationsvalidierung

Vulnhalla validiert Ihre Konfiguration beim Start. Wenn erforderliche Variablen fehlen oder ungültig sind, werden klare Fehlermeldungen angezeigt, die angeben, was behoben werden muss.

Häufige Validierungsfehler:

  • Fehlender API-Schlüssel für den ausgewählten Anbieter
  • Ungültiger Anbietername (siehe PROVIDER für unterstützte Werte)
  • Fehlender Azure-Endpunkt (erforderlich für Azure-Anbieter)
  • Fehlende AWS-Anmeldeinformationen oder -Region (erforderlich für Bedrock-Anbieter)
  • Ungültiger CodeQL-Pfad (wenn CODEQL_PATH gesetzt ist, aber die Datei nicht existiert)

📝 Statuscodes

Das LLM verwendet die folgenden Statuscodes:

  • 1337: Sicherheitslücke gefunden (True Positive)
  • 1007: Code ist sicher, keine Schwachstelle (False Positive)
  • 7331: Mehr Code/Informationen erforderlich, um die Sicherheit zu validieren
  • 3713: Wahrscheinlich kein Sicherheitsproblem, aber mehr Informationen erforderlich (wird mit 7331 verwendet)

Die UI bildet diese wie folgt ab:

  • 1337 → "True Positive"
  • 1007 → "False Positive"
  • 7331 oder 3713 → "Needs More Data"

🔧 Entwicklung

Tests ausführen

Das Projekt enthält eine grundlegende Testinfrastruktur mit pytest:

root@kitploit:~
# Alle Tests ausführen
poetry run pytest

# Mit ausführlicher Ausgabe
poetry run pytest -v

Die Testsuite enthält Smoke-Tests, um zu überprüfen, ob die Testinfrastruktur korrekt eingerichtet ist.

Typprüfung

Das Projekt verwendet mypy für die statische Typprüfung:

root@kitploit:~
poetry run mypy src

Die Typprüfung ist in pyproject.toml unter [tool.mypy] konfiguriert. Die Konfiguration verwendet eine konservative Basislinie mit modulspezifischen Überschreibungen, um eine schrittweise Einführung zu ermöglichen.

Projektabhängigkeiten

Abhängigkeiten werden über Poetry in pyproject.toml verwaltet:

  • requests - HTTP-Anfragen für die GitHub-API
  • pySmartDL - Intelligenter Download-Manager für CodeQL-Datenbanken
  • litellm - Einheitliches LLM-Interface, das mehrere Anbieter unterstützt
  • python-dotenv - Verwaltung von Umgebungsvariablen
  • PyYAML - YAML-Parsing für CodeQL-Pack-Dateien
  • textual - Terminal-UI-Framework
  • pytest - Testframework (Entwicklungsabhängigkeit)
  • mypy - Statischer Typprüfer (Entwicklungsabhängigkeit)

CodeQL-Abfragen

CodeQL-Abfragen sind in data/queries/<LANG>/ organisiert:

  • issues/ - Abfragen zur Erkennung von Sicherheitsproblemen
  • tools/ - Hilfsabfragen (Funktionsbäume, Klassen, globale Variablen, Makros)

Jedes Verzeichnis enthält eine qlpack.yml-Datei, die das CodeQL-Pack definiert.


📄 Lizenz

Copyright (c) 2025 CyberArk Software Ltd. Alle Rechte vorbehalten.

Dieses Repository ist unter der Apache License, Version 2.0 lizenziert – siehe LICENSE.txt für weitere Details.


🤝 Mitwirken

Wir begrüßen Beiträge aller Art zu diesem Repository. Anweisungen zum Einstieg und Beschreibungen unserer Entwicklungsabläufe finden Sie in unserem Leitfaden für Mitwirkende.


Verhaltenskodex

Bitte lesen und befolgen Sie unseren Verhaltenskodex. Wir verpflichten uns, eine einladende und inklusive Umgebung für alle Mitwirkenden zu schaffen.


📧 Kontakt

Sie können uns gerne über GitHub-Issues kontaktieren, wenn Sie Feature-Wünsche oder Projektprobleme haben.

Tool herunterladen
DEBUG
INFO
WARNING
ERROR