KI-Ökosystem sichern: Claude Skill-Security-Scanner Architektur
Mit Claude Code entstehen durch Drittanbieter-Skills neue Sicherheitsrisiken wie Datenexfiltration. Dieser Artikel zeigt den Entwurf eines Tools zur Erkennung bösartigen Codes, Risikobewertung durch Algorithmen und Erstellung visueller Sicherheitsberichte.
Auf dieser Seite
Ein tiefgreifender Blick auf die Architektur, Risikobewertungsalgorithmen und Implementierung eines Sicherheitsscanners für das Claude Code-Ökosystem.
Der Aufstieg von „Skills" und die Sicherheitslücke
Mit der Veröffentlichung von Claude Code erleben wir einen Paradigmenwechsel in der Art und Weise, wie Entwickler mit KI interagieren. Die Einführung des Skills-Mechanismus ermöglicht es Benutzern, die Fähigkeiten ihres KI-Assistenten durch benutzerdefinierte Skripte zu erweitern. Diese Skills können leistungsstarke Aktionen ausführen: auf das Dateisystem zugreifen, Systembefehle ausführen und Netzwerkanfragen initiieren.
Während dies die Effizienz drastisch verbessert, führt es eine massive Angriffsfläche ein. Ein bösartiger oder schlecht geschriebener Skill könnte:
- Ihre
~/.ssh/id_rsaoder API-Anmeldedaten lesen. - Daten an einen unbekannten externen Server exfiltrieren.
rm -rf /oder andere destruktive Befehle ausführen.
Derzeit fehlt den Benutzern beim Installieren von Skills von Drittanbietern eine standardisierte Möglichkeit zu überprüfen, was dieser Code tatsächlich tut. Um dies zu lösen, habe ich den Skill-Security-Scanner entwickelt – ein automatisiertes SAST-Tool (Static Application Security Testing), das speziell für das Claude-Ökosystem konzipiert wurde.
In diesem Artikel werde ich Sie durch die Systemarchitektur, die regex-basierte Erkennungs-Engine und die Risikobewertungsalgorithmen führen, die dieses Tool antreiben.
Systemarchitektur
Der Scanner ist auf Modularität ausgelegt und ermöglicht eine einfache Erweiterung, wenn neue Angriffsvektoren entdeckt werden. Die Architektur folgt einem Bottom-up-Schichtenansatz:
- Datenerfassungsschicht: Analysiert die Verzeichnisstruktur (ignoriert Rauschen wie
.gitodernode_modules), um relevante Codedateien zu extrahieren. - Regel-Engine: Die Kernlogik, die Regex-Muster, Positivlisten und Regeldefinitionen verwaltet.
- Analyse-Engine: Führt die eigentliche Überprüfung durch und berechnet Konfidenzintervalle für jede Übereinstimmung.
- Risikobewertung: Ein mathematisches Modell, das Befunde zu einer einzigen „Risikobewertung" aggregiert.
- Berichterstattung: Generiert menschenlesbare Ausgaben (Konsole, JSON und ein responsives HTML-Dashboard).
Wichtige Komponenten
- ConfigLoader: Verwaltet YAML-basierte Konfigurationen und ermöglicht es Benutzern, die Empfindlichkeit anzupassen oder vertrauenswürdige Domains auf die Positivliste zu setzen.
- Rules Factory: Verwendet das Factory-Pattern, um Sicherheitsregeln dynamisch zu laden, wodurch die Codebasis erweiterbar wird.
- Skill Analyzer: Die Worker-Komponente, die Dateiparsing und Befundaggregation durchführt.
Die Erkennungs-Engine: Wie sie funktioniert
Das Herzstück des Scanners ist sein Regelsystem. Wir klassifizieren Risiken in fünf Hauptkategorien:
- Netzwerksicherheit: Erkennung von unverschlüsselten HTTP-Aufrufen oder Datenexfiltration an unbekannte Domains.
- Dateioperationen: Markierung des Zugriffs auf sensible Pfade (SSH-Schlüssel, Umgebungsvariablen) oder gefährlicher Schreiboperationen.
- Befehlsausführung: Abfangen von Aufrufen an
subprocess,os.systemoder gefährliche Shell-Befehle (sudo,mkfs). - Code-Injection: Identifizierung von
eval(),exec()oder dynamischen Importen, die Logik verschleiern. - Abhängigkeitsrisiken: Erkennung von Dependency-Confusion-Angriffen oder erzwungenen globalen Paketinstallationen.
Der Matching-Algorithmus
Wir suchen nicht nur nach Schlüsselwörtern; wir berechnen Konfidenz. Ein einfaches Grep ist zu verrauscht. Unser Algorithmus passt die Konfidenzbewertung basierend auf dem Kontext an (z.B. befindet sich das Schlüsselwort in einem Kommentar?).
Hier ist eine vereinfachte Ansicht der Matching-Logik in Python:
import re
def match(content: str, patterns: list) -> list:
compiled_patterns = [re.compile(p, re.IGNORECASE) for p in patterns]
matches = []
for line_number, line in enumerate(content.split('\n'), 1):
for pattern in compiled_patterns:
if pattern.search(line):
confidence = calculate_confidence(line)
matches.append({
'line': line_number,
'content': line.strip(),
'confidence': confidence
})
return matches
def calculate_confidence(line: str) -> float:
base_confidence = 0.7
# Wenn es auskommentiert ist, Konfidenz reduzieren
if line.strip().startswith(('#', '//')):
base_confidence -= 0.2
# Wenn es hochriskante Schlüsselwörter enthält, Konfidenz erhöhen
if "sudo" in line or "rm -rf" in line:
base_confidence += 0.2
return max(0.0, min(1.0, base_confidence))
Risiko quantifizieren: Das Bewertungsmodell
Wie unterscheiden wir zwischen einem „etwas chaotischen" Skript und einer „kritischen Bedrohung"? Wir verwenden ein gewichtetes Bewertungsmodell.
1. Gewichtungszuweisung
Wir weisen Gewichte basierend auf dem Schweregrad zu:
- KRITISCH: 10,0 Punkte
- WARNUNG: 4,0 Punkte
- INFO: 1,0 Punkt
2. Die Formel
Die endgültige Bewertung wird auf eine Skala von 0-10 normalisiert.
$$ \text{Rohbewertung} = \sum (\text{Problemgewicht} \times \text{Problemkonfidenz}) $$
$$ \text{Normalisierte Bewertung} = \left( \frac{\text{Rohbewertung}}{\text{Maximal mögliche Bewertung}} \right) \times 10 $$
3. Visualisierung
Im HTML-Bericht werden diese Bewertungen auf intuitive Gefahrenzonen abgebildet:
- 🔴 KRITISCH (8,0 - 10,0): Nicht verwenden.
- 🟠 HOCH (6,0 - 7,9): Hohes Risiko, erfordert manuelle Überprüfung.
- 🟡 MITTEL (4,0 - 5,9): Mit Vorsicht fortfahren.
- 🟢 SICHER (0,0 - 1,9): Kein Problem.
Bericht generieren
Ein CLI-Tool eignet sich hervorragend für CI/CD, aber Menschen brauchen visuelle Darstellungen. Der Scanner generiert einen eigenständigen HTML-Bericht unter Verwendung von Tailwind CSS für das Styling und Vanilla JS für Interaktivität.
Internationalisierung (i18n)
Da das Tool auf ein globales Publikum abzielt, haben wir Pythons Standard-gettext-Bibliothek implementiert. Die Benutzeroberfläche passt sich basierend auf dem Gebietsschema des Benutzers an (mit standardmäßiger Unterstützung für Englisch und Chinesisch).
import gettext
from pathlib import Path
def init_i18n(lang: str = 'en_US'):
locale_dir = Path(__file__).parent / 'locales'
translator = gettext.translation('skill_scan', localedir=locale_dir, languages=[lang])
translator.install()
def _(message):
return get_translation().gettext(message)
Fallstudie: Aufdecken eines bösartigen Skills
Um das System zu testen, haben wir es gegen einen „Code-Optimizer"-Skill ausgeführt, der heimlich bösartige Nutzdaten enthielt.
Das Scan-Ergebnis:
Risikostufe: KRITISCH (10,0/10)
- [NET001] Erkannte POST-Anfrage an externen C2-Server.
- [FILE001] Versuch,
~/.ssh/id_rsazu lesen.- [CMD001] Versuch der Rechteausweitung über
sudo.- [INJ001] Verwendete
eval(), um Nutzdaten zu verschleiern.
Ohne dieses Tool hätte ein Entwickler möglicherweise einfach /optimize-code ausgeführt und unbewusst seine lokale Umgebung kompromittiert.
Leistungsoptimierung
Statische Analyse kann bei großen Repositories langsam sein. Wir haben die Leistung durch Folgendes optimiert:
- Intelligente Filterung: Automatisches Überspringen von Binärdateien, Bildern und großen Datensätzen (>50MB).
- Regex-Vorkompilierung: Kompilieren von Mustern einmal beim Start anstatt innerhalb der Schleife.
- Generator-Patterns: Verwenden von Python-Generatoren zum zeilenweisen Lesen von Dateien, wodurch der Speicherbedarf auch beim Scannen massiver Projekte gering bleibt.
Zukunfts-Roadmap
Der Skill-Security-Scanner ist derzeit v1.0.0, aber wir haben große Pläne:
- CI/CD-Integration: Native GitHub Actions- und GitLab CI-Runner, um unsichere Skills am Zusammenführen zu hindern.
- Maschinelles Lernen: Über Regex hinausgehen und LLMs zur Erkennung komplexer Logic Bombs und verschleierten Codes verwenden.
- Sandboxing: Ein optionaler dynamischer Analysemodus, der den Skill in einem Docker-Container ausführt, um das tatsächliche Verhalten zu beobachten.
Fazit
Da wir mehr Kontrolle an KI-Agenten und ihre Plugin-Ökosysteme übergeben, darf Sicherheit kein nachträglicher Gedanke sein. Der Skill-Security-Scanner bietet eine notwendige Verteidigungsschicht und gibt Entwicklern die nötige Transparenz, um Claude Skills sicher zu nutzen.
🔗 Code abrufen
Das Projekt ist Open Source und auf GitHub verfügbar. Beiträge, Issues und Sterne sind willkommen!
Repository: github.com/huifer/skill-security-scan
Kurzübersicht
| Aspekt | Wichtige Informationen |
|---|---|
| Thema | Entwicklung |
| Relevanz | Patientenaufklärung und -sensibilisierung |
| Maßnahme | Besprechen Sie dies mit Ihrem Arzt |
| Häufigkeit | Nach Empfehlung Ihres Behandlungsteams |
| Evidenz | Basierend auf aktuellen klinischen Richtlinien |
Häufig gestellte Fragen
F: Woher weiß ich, ob dies für mich relevant ist? A: Besprechen Sie Ihre persönliche und familiäre Krankengeschichte mit Ihrem Arzt, um Ihre individuellen Risikofaktoren zu bewerten und geeignete nächste Schritte zu bestimmen.
F: Was sollte ich meinen Arzt fragen? A: Gute Fragen sind unter anderem: „Was bedeuten meine Ergebnisse?", „Welche Optionen habe ich?", „Welche Veränderungen des Lebensstils würden helfen?" und „Wann sollte ich nachuntersuchen lassen?"
F: Gibt es Veränderungen des Lebensstils, die helfen können? A: Die meisten Erkrankungen profitieren von grundlegenden Maßnahmen: ausgewogene Ernährung, regelmäßige körperliche Aktivität (150+ Minuten/Woche), качественный сон (7-9 Stunden), stressmanagement und Vermeidung von Tabak.
Medizinischer Haftungsausschluss
Dieser Artikel dient ausschließlich zu Bildungszwecken und stellt keine medizinische Beratung dar. Konsultieren Sie immer einen qualifizierten Gesundheitsdienstleister, bevor Sie Entscheidungen über Ihre Gesundheit, Behandlung oder Pflege treffen. Individuelle Umstände variieren, und was für eine Person angemessen ist, kann für eine andere unangemessen sein.
Wenn Sie einen medizinischen Notfall haben, rufen Sie bitte sofort 911 (oder Ihre örtliche Notrufnummer) an.