
Echtzeit-Bedrohungserkennung für npm/PyPI-Lieferketten. Verhaltenskettenanalyse, AST-Scanning, IOC-Feeds und kombinierte Bewertungs-Engine.
Installation | Verwendung | Funktionen | VS Code | CI/CD
Supply-Chain-Angriffe auf npm und PyPI explodieren. Shai-Hulud hat 2025 über 25.000 Repositories kompromittiert. Bestehende Tools erkennen Bedrohungen, helfen aber nicht bei der Reaktion.
MUAD'DIB kombiniert 22 parallele Scanner (277 Erkennungsregeln), eine Deobfuskierungs-Engine, modulübergreifende Datenflussanalyse, zusammengesetzte Bewertung (21 zusammengesetzte Regeln) und eine gVisor/Docker-Sandbox, um bekannte Bedrohungen und verdächtige Verhaltensmuster in npm- und PyPI-Paketen zu erkennen. Ein XGBoost-Klassifikator ist im Code vorhanden, aber derzeit inaktiv (siehe Evaluierung).
MUAD'DIB ist ein kostenloser, offener und vollständig prüfbarer Supply-Chain-Scanner für npm und PyPI. Er erkennt bekannte Bedrohungen (225.000+ IOCs), Installationszeit-RCE, Credential-Exfiltration-Abläufe, obfuskierte Payloads und andere verdächtige Verhaltensmuster – lokal, ohne Telemetrie.
Er ist unter der AGPL-3.0 lizenziert; eine kommerzielle Lizenz ist für Organisationen erhältlich, die ihn in ein proprietäres Produkt einbetten oder als geschlossenen Hosted-Dienst betreiben müssen (siehe Lizenz).
Er versucht bewusst nicht, alles zu können – siehe Umfang für eine genaue Auflistung, was er erfasst und was nicht.
Erkennt (npm & PyPI): bekanntermaßen bösartige Pakete (Name + SHA256 IOC-Übereinstimmung), Typosquats, Installationszeit-RCE (Lifecycle preinstall/postinstall, curl | sh, Python-Import-Zeitpunkt, binding.gyp), Credential-Lesen und anschließende Netzwerk-Exfiltration (innerhalb und zwischen Dateien), obfuskierte / hochentropische / Stub-Loader-Payloads, binäre Dropper (chmod +x + exec/spawn) und Anti-Analyse-Ausweichmerkmale.
Nicht im Fokus: reine Browser-Angriffe (DOM/window, keine Node.js-API), die Inhalte nativer Binärdateien / WASM (keine Binäranalyse), Zero-Day-unbekannte Pakete (der IOC-Feed ist reaktiv) und nicht-npm/PyPI-Ökosysteme (RubyGems, Maven, Go). Gezieltes Anti-Sandbox-Fingerprinting und mehrstufige Remote-Payloads sind bekannte Risiken für falsch-negative Ergebnisse. Vollständige Details: Bedrohungsmodell.
Keine Telemetrie. Ihr Code und Ihre Scan-Ergebnisse verlassen niemals Ihren Rechner – MUAD'DIB lädt nur Bedrohungsinformationen herunter (muaddib update) und liest für die Bewertung öffentliche npm-Registry-Metadaten. Webhook-Benachrichtigungen sind optional.
npm install -g muaddib-scanner
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm link
muaddib scan .
muaddib scan /path/to/project
Scannt sowohl npm- (package.json, node_modules) als auch Python-Abhängigkeiten (requirements.txt, setup.py, pyproject.toml).
muaddib
muaddib install <package>
muaddib install lodash axios --save-dev
muaddib install suspicious-pkg --force # Installation trotz Bedrohungen erzwingen
Scannt Pakete auf Bedrohungen VOR der Installation. Blockiert bekannte bösartige Pakete.
Jeder Scan zeigt eine Risikobewertung von 0-100 an:
[SCORE] 58/100 [***********---------] HOCH
muaddib scan . --explain
Zeigt Regel-ID, MITRE ATT&CK-Technik, Referenzen und Reaktions-Playbook für jede Erkennung an.
muaddib scan . --json > results.json # JSON
muaddib scan . --html report.html # HTML
muaddib scan . --sarif results.sarif # SARIF (GitHub Security)
muaddib scan . --fail-on critical # Nur bei KRITISCH fehlschlagen
muaddib scan . --fail-on high # Bei HOCH und KRITISCH fehlschlagen (Standard)
muaddib scan . --paranoid
Ultra-strenge Erkennung mit niedrigerer Toleranz. Erkennt jeglichen Netzwerkzugriff, Subprozessausführung, dynamische Codeauswertung und Zugriff auf sensible Dateien.
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
Strenge Filterung (v2.1.2): Benachrichtigungen nur bei IOC-Übereinstimmungen, sandboxbestätigten Bedrohungen oder Canary-Token-Exfiltration. Priorisierte Triage (v2.10.21): P1 (rot, IOC/Sandbox/Canary), P2 (orange, hohe Bewertung/zusammengesetzte), P3 (gelb, Rest).
muaddib scan . --temporal-full # Alle 4 zeitlichen Merkmale
muaddib scan . --temporal # Erkennung plötzlicher Lifecycle-Skripte
muaddib scan . --temporal-ast # AST-Differenz zwischen Versionen
muaddib scan . --temporal-publish # Anomalie der Veröffentlichungshäufigkeit
muaddib scan . --temporal-maintainer # Erkennung von Maintainer-Wechseln
Erkennt Supply-Chain-Angriffe bevor sie in IOC-Datenbanken auftauchen, durch Analyse von Änderungen zwischen Paketversionen. Siehe Evaluierungsmethodik für Details.
muaddib sandbox <package-name>
muaddib sandbox <package-name> --strict
Dynamische Analyse in einem isolierten Docker-Container: strace, tcpdump, Dateisystem-Diff, Canary-Token, CI-bewusste Umgebung und Monkey-Patching-Preload für Zeitbombenerkennung (mehrere Läufe zu [0h, 72h, 7d] Offsets).
muaddib watch . # Echtzeit-Überwachung
muaddib daemon # Daemon-Modus (automatischer Scan bei npm install)
muaddib update # IOCs aktualisieren (schnell, ~5s)
muaddib scrape # Vollständige IOC-Aktualisierung (~5min)
muaddib diff HEAD~1 # Bedrohungen mit vorherigem Commit vergleichen
muaddib init-hooks # Pre-Commit-Hooks (husky/pre-commit/git)
muaddib scan . --breakdown # Erklärbare Bewertungszerlegung
muaddib replay # Ground-Truth-Validierung (90/94 TPR@3, v2.11.48)
Alle Regeln (272 REGELN + 5 PARANOID) sind MITRE ATT&CK-Techniken zugeordnet. Siehe SECURITY.md für die vollständige Referenz der Regeln.
Die VS Code-Erweiterung scannt automatisch Ihre npm-Projekte.
code --install-extension dnszlsk.muaddib-vscode
MUAD'DIB: Scan Project – Gesamtes Projekt scannenMUAD'DIB: Scan Current File – Aktuelle Datei scannenmuaddib.autoScan, muaddib.webhookUrl, muaddib.failLevelSiehe vscode-extension/README.md für die vollständige Dokumentation.
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
security-events: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: DNSZLSK/muad-dib@v1
with:
path: '.'
fail-on: 'high'
sarif: 'results.sarif'
muaddib init-hooks # Auto-Erkennung (husky/pre-commit/git)
muaddib init-hooks --type husky # Husky erzwingen
muaddib init-hooks --mode diff # Nur NEUE Bedrohungen blockieren
Mit pre-commit-Framework:
repos:
- repo: https://github.com/DNSZLSK/muad-dib
rev: v2.11.139
hooks:
- id: muaddib-scan
Zuletzt gemessen v2.11.48 (2026-05-26), nur Regeln (der ML-Klassifikator ist inaktiv – siehe unten). Ground Truth: 94 reale Angriffe im Umfang + 200 zufällige npm + 124 PyPI + 107 adversarial/holdout.
ML-Klassifikator: inaktiv. Ein XGBoost-Modell befindet sich in src/ml/, ist aber nie in muaddib scan eingebunden und läuft seit 2026-04-08 im LOG-ONLY-Modus des Monitors (das trainierte Modell ist kollabiert, steht vor einem Retraining). Alle Zahlen oben sind nur Regeln.
Vollständiges Protokoll, Verlauf pro Track, die PyPI-Cap-35-Einschränkung, operative (GHSA-denominierte) Abdeckung und die ML-Retrain-Methodik: Evaluierungsmethodik.
Bearbeiten Sie YAML-Dateien in iocs/:
- id: NEW-MALWARE-001
name: "malicious-package"
version: "*"
severity: critical
confidence: high
source: community
description: "Bedrohungsbeschreibung"
references:
- https://example.com/article
mitre: T1195.002
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm test
MUAD'DIB ist lizenziert unter der GNU Affero General Public License v3.0 only (AGPL-3.0-only) – siehe LICENSE und NOTICE.
Sie dürfen es frei nutzen, studieren, modifizieren und weiterverbreiten – auch über ein Netzwerk – vorausgesetzt, dass abgeleitete Werke und netzwerkbereitgestellte Modifikationen unter derselben Lizenz veröffentlicht werden.
Kommerzielle Lizenzierung: zur Einbettung von MUAD'DIB in ein proprietäres / quellgeschlossenes Produkt oder um es als Hosted-Dienst ohne die Quelloffenlegungspflichten der AGPL anzubieten, ist eine separate kommerzielle Lizenz erhältlich. Eröffnen Sie ein Issue oder kontaktieren Sie den Autor (DNSZLSK).
Copyright (C) 2026 DNSZLSK.
Das Gewürz muss fließen. Die Würmer müssen sterben.
| Scanner | Erkennung |
|---|
| AST Parse (acorn) | eval, Function, Credential-Diebstahl, binäre Dropper, Prototype-Hooks |
| Pattern Matching | Shell-Befehle, Reverse Shells, Dead Man's Switch |
| Datenflussanalyse | Credential lesen + Netzwerksenden (innerhalb und zwischen Dateien) |
| Obfuskierungserkennung | JS-Obfuskierungsmuster (.min.js überspringen) |
| Deobfuskierungs-Vorverarbeitung | String-Konkatenation, charcode, base64, hex-array, const-Propagation |
| Modulübergreifende Datenfluss | Verbreitung von Taint über Dateien hinweg (3-Hop-Ketten, Klassenmethoden) |
| Intent-Kohärenz | Quell-Senken-Paarung innerhalb einer Datei (Credential + eval/Netzwerk) |
| Typosquatting | npm + PyPI (Levenshtein-Distanz) |
| Python-Scanner | requirements.txt, setup.py, pyproject.toml, 14K+ PyPI-IOCs |
| Shannon-Entropie | Hochentropische Zeichenketten (5,5 Bits + mind. 50 Zeichen) |
| KI-Konfigurationsscanner | .cursorrules, CLAUDE.md, copilot-instructions.md Injection |
| Paket/Abhängigkeiten | Lifecycle-Skripte, IOC-Abgleich (225K+ Pakete) |
| GitHub Actions | Shai-Hulud-Hintertürerkennung |
| Hash-Scanner | Bekannte bösartige Datei-Hashes |
| IOC-Strings (intel-triage P1.1) | YARA-ähnlicher String-Abgleich (Axios 2026, TeamPCP, GlassWorm, CanisterSprawl) |
| Anti-Forensik AST (intel-triage P1.2) | XOR-Loop + Selbstlöschung + Köder-Schreiben zusammengesetzt (csec autodelete) |
| Stub-Paket (intel-triage P1.3) | Kleine Hauptdatei + externe Abhängigkeits-URL + Lifecycle-Hook (ltidi chain) |
| Monorepo-Scanner | Lerna/pnpm-workspace/turbo-Erkennung (Sprint 1 Audit MR-C2-Fix) |
| Trusted-Dep-Diff (optional) | Diff gegen vertrauenswürdige Dep-Tarballs aus der Registry (v2.10.x) |
| Python Source (PYSRC) | Importzeit-/Installationszeit-RCE-Muster in __init__.py / setup.py (v2.11.41 – schließt TrapDoor PyPI-Lücke) |
| Python AST (PYAST) | Tree-sitter-Python-AST mit Taint-bewussten Detektoren (v2.11.42+) |
| Anti-Scanner Injection (ASI) | Prompt-Injection-Text in Kommentaren/Zeichenketten, der einen LLM-Code-Reviewer zu einem sauberen Urteil oder zum Überspringen einer obfuskierten Payload zwingt (ASI-001..004, Hades-Kampagne 2026-06) |
| Kampagne | Status |
|---|
| GlassWorm (2026, 433+ Pakete) | Erkannt |
| Shai-Hulud v1/v2/v3 (2025) | Erkannt |
| event-stream (2018) | Erkannt |
| eslint-scope (2018) | Erkannt |
| Protestware (node-ipc, colors, faker) | Erkannt |
| Typosquats (crossenv, mongose, babelcli) | Erkannt |
| Eingabe | Beschreibung | Standard |
|---|
path | Zu scannender Pfad | . |
fail-on | Mindestschweregrad für Fehlschlag | high |
sarif | SARIF-Ausgabedateipfad | |
paranoid | Ultra-strenge Erkennung | false |
| Metrik | Ergebnis |
|---|
| Erkennungsrate (TPR@3) | 95,74% (90/94) |
| Alarmrate (TPR@20) | 88,30% (83/94) |
| FPR – kuratierte npm (548) | 1,10% (6/545) |
| FPR – zufällige npm (200) | 2,50% (5/200) |
| FPR – PyPI (132) | 9,68% (12/124) |
| ADR – adversarial + holdout | 96,26% (103/107) |
| Wild TPR (Datadog 17K) | 92,8% (13.538/14.587) |