
muad-dib v2.12.0
Echtzeit-Bedrohungserkennung für npm/PyPI-Lieferketten. Verhaltenskettenanalyse, AST-Scanning, IOC-Feeds und kombinierte Bewertungs-Engine.
Installation | Verwendung | Funktionen | VS Code | CI/CD
Warum MUAD'DIB?
Angriffe auf die Lieferkette von npm und PyPI explodieren. Shai-Hulud kompromittierte 2025 über 25.000+ Repositories. Bestehende Tools erkennen Bedrohungen, helfen aber nicht bei der Reaktion.
MUAD'DIB kombiniert 22 parallele Scanner (278 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 existiert im Code, ist aber derzeit inaktiv (siehe Evaluierung).
Positionierung
MUAD'DIB ist ein kostenloser, offener und vollständig prüfbarer Lieferketten-Scanner für npm und PyPI. Er erkennt bekannte Bedrohungen (225.000+ IOCs), RCE bei der Installation, Credential-Diebstahl mit anschließender Exfiltration, 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 verfügbar, die ihn in ein proprietäres Produkt einbetten oder als geschlossenen gehosteten Dienst betreiben müssen (siehe Lizenz).
Er versucht bewusst nicht, alles zu tun — siehe Umfang für genau das, was er erkennt und was nicht.
Umfang
Erkennt (npm & PyPI): bekannte bösartige Pakete (Name + SHA256-IOC-Abgleich), Typosquats, RCE bei der Installation (Lifecycle preinstall/postinstall, curl | sh, Python-Import-Zeit, binding.gyp), Credential-Lesen mit anschließender Netzwerk-Exfiltration (innerhalb und zwischen Dateien), obfuskierte / High-Entropy- / Stub-Loader-Payloads, binäre Dropper (chmod +x + exec/spawn) und Anti-Analyse-Evasion-Marker.
Außerhalb des Umfangs: Browser-only-Angriffe (DOM/window, keine Node.js-API), der Inhalt nativer Binärdateien / WASM (keine Binäranalyse), Zero-Day-unbekannte Pakete (der IOC-Feed ist reaktiv) und Nicht-npm/PyPI-Ökosysteme (RubyGems, Maven, Go). Entschlossenes Anti-Sandbox-Fingerprinting und mehrstufige Remote-Payloads sind bekannte False-Negative-Risiken. Vollständige Details: Bedrohungsmodell.
Keine Telemetrie. Ihr Code und Ihre Scan-Ergebnisse verlassen niemals Ihren Rechner — MUAD'DIB lädt nur Threat-Intel-Feeds herunter (muaddib update) und liest für die Bewertung öffentliche npm-Registry-Metadaten. Webhook-Benachrichtigungen sind optional.
Installation
npm (empfohlen)
npm install -g muaddib-scanner
Aus dem Quellcode
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm link
Verwendung
Grundlegender Scan
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).
Interaktiver Modus
muaddib
Sichere Installation
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.
Risikobewertung
Jeder Scan zeigt eine Risikobewertung von 0-100:
[SCORE] 58/100 [***********---------] HIGH
Erklärungsmodus
muaddib scan . --explain
Zeigt Regel-ID, MITRE-ATT&CK-Technik, Referenzen und Reaktions-Playbook für jede Erkennung.
Export
muaddib scan . --json > results.json # JSON
muaddib scan . --html report.html # HTML
muaddib scan . --sarif results.sarif # SARIF (GitHub Security)
Schweregrad-Schwelle
muaddib scan . --fail-on critical # Nur bei KRITISCH fehlschlagen
muaddib scan . --fail-on high # Bei HOCH und KRITISCH fehlschlagen (Standard)
Paranoider Modus
muaddib scan . --paranoid
Ultra-strikte Erkennung mit geringerer Toleranz. Erkennt jeden Netzwerkzugriff, jede Subprozess-Ausführung, jede dynamische Code-Auswertung und jeden Zugriff auf sensible Dateien.
Webhook-Benachrichtigungen
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
Strikte Filterung (v2.1.2): Benachrichtigungen nur bei IOC-Treffern, sandbox-bestätigten Bedrohungen oder Canary-Token-Exfiltration. Priorisierte Triage (v2.10.21): P1 (rot, IOC/Sandbox/Canary), P2 (orange, hohe Bewertung/zusammengesetzt), P3 (gelb, Rest).
Erkennung von Verhaltensanomalien (v2.0)
muaddib scan . --temporal-full # Alle 4 zeitlichen Merkmale
muaddib scan . --temporal # Erkennung plötzlicher Lifecycle-Skripte
muaddib scan . --temporal-ast # AST-Diff zwischen Versionen
muaddib scan . --temporal-publish # Anomalie der Veröffentlichungshäufigkeit
muaddib scan . --temporal-maintainer # Erkennung von Maintainer-Wechseln
Erkennt Lieferketten-Angriffe bevor sie in IOC-Datenbanken erscheinen, durch Analyse von Änderungen zwischen Paketversionen. Details siehe Evaluierungsmethodik.
Docker-Sandbox
muaddib sandbox <package-name>
muaddib sandbox <package-name> --strict
Dynamische Analyse in einem isolierten Docker-Container: strace, tcpdump, Dateisystem-Diff, Canary-Tokens, CI-bewusste Umgebung und Monkey-Patching-Preload für Zeitbomben-Erkennung (mehrfache Ausführung bei [0h, 72h, 7d] Offsets).
Andere Befehle
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 Bewertungs-Zerlegung
muaddib replay # Ground-Truth-Validierung (90/94 TPR@3, v2.11.48)
Funktionen
22 parallele Scanner
| Scanner | Erkennung |
|---|---|
| AST-Parse (acorn) | eval, Function, Credential-Diebstahl, binäre Dropper, Prototype-Hooks |
| Musterabgleich | Shell-Befehle, Reverse Shells, Dead Man's Switch |
| Datenflussanalyse | Credential-Lesen + Netzwerk-Senden (innerhalb und zwischen Dateien) |
| Obfuskations-Erkennung | JS-Obfuskationsmuster (.min.js überspringen) |
| Deobfuskierungs-Vorverarbeitung | String-Konkatenation, Charcode, base64, Hex-Array, Konstante-Propagation |
| Modulübergreifender Datenfluss | Dateiübergreifende Taint-Propagation (3-Hop-Ketten, Klassenmethoden) |
| Intent-Kohärenz | Quell-Senke-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 | High-Entropy-Strings (5,5 Bits + mind. 50 Zeichen) |
| KI-Konfigurations-Scanner | .cursorrules, CLAUDE.md, copilot-instructions.md-Injektion |
| Paket/Abhängigkeiten | Lifecycle-Skripte, IOC-Abgleich (225K+ Pakete) |
| GitHub Actions | Shai-Hulud-Backdoor-Erkennung |
| Hash-Scanner | Bekannte bösartige Datei-Hashes |
| IOC-Strings (intel-triage P1.1) | YARA-artiger String-Abgleich (Axios 2026, TeamPCP, GlassWorm, CanisterSprawl) |
| Anti-Forensik-AST (intel-triage P1.2) | XOR-Schleife + Selbstlöschung + Köder-Schreibvorgang zusammengesetzt (csec autodelete) |
| Stub-Paket (intel-triage P1.3) | Winzige Hauptdatei + externe Dep-URL + Lifecycle-Hook (ltidi-Kette) |
| 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-Quellcode (PYSRC) | Import-/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-Injektion (ASI) | Prompt-Injektionstext 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) |
278 Erkennungsregeln
Alle Regeln (273 REGELN + 5 PARANOID) sind MITRE-ATT&CK-Techniken zugeordnet. Die vollständige Regeln-Referenz finden Sie in SECURITY.md.
Erkannte Kampagnen
| 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 |
VS Code
Die VS-Code-Erweiterung scannt Ihre npm-Projekte automatisch.
code --install-extension dnszlsk.muaddib-vscode
MUAD'DIB: Scan Project- Gesamtes Projekt scannenMUAD'DIB: Scan Current File- Aktuelle Datei scannen- Einstellungen:
muaddib.autoScan,muaddib.webhookUrl,muaddib.failLevel
Vollständige Dokumentation finden Sie in vscode-extension/README.md.
CI/CD
GitHub Actions (Marketplace)
Minimal (Build bei HOCH+-Bedrohungen fehlschlagen lassen, einzelner Scan):
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DNSZLSK/[email protected] # auf ein veröffentlichtes Tag pinnen
with:
fail-on: 'high'
Mit SARIF-Upload auf den Security-Tab (benötigt security-events: write; führt einen zweiten Durchlauf zur SARIF-Erzeugung aus):
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: DNSZLSK/[email protected]
with:
path: '.'
fail-on: 'high'
sarif: 'results.sarif'
Eingaben
| Eingabe | Beschreibung | Standard |
|---|---|---|
path | Zu scannender Pfad | . |
fail-on | Minimale Schwere für Fehlschlag (critical/high/medium/low/none) | high |
sarif | SARIF-Ausgabedateipfad — setzen, um auch auf den Security-Tab hochzuladen | |
paranoid | Ultra-strikte Erkennung (höhere FPR) | false |
version | Zu installierende muaddib-scanner-npm-Version | latest |
Ausgaben (in späteren Schritten über steps.<id>.outputs.* konsumierbar)
| Ausgabe | Beschreibung |
|---|---|
risk-score | Risikobewertung 0–100 |
risk-level | SAFE / LOW / MEDIUM / HIGH / CRITICAL |
threats-count | Gesamtzahl erkannter Bedrohungen |
critical-count / high-count | Bedrohungen nach Schweregrad |
exit-code | 0 = fail-on-Schwelle bestanden, sonst ungleich Null |
sarif-file | Pfad zur SARIF-Datei (leer, wenn sarif nicht gesetzt) |
Pre-Commit-Hooks
muaddib init-hooks # Automatische Erkennung (husky/pre-commit/git)
muaddib init-hooks --type husky # husky erzwingen
muaddib init-hooks --mode diff # Nur NEUE Bedrohungen blockieren
Mit dem pre-commit-Framework:
repos:
- repo: https://github.com/DNSZLSK/muad-dib
rev: v2.11.139
hooks:
- id: muaddib-scan
Evaluierung
Zuletzt gemessen v2.11.48 (2026-05-26), nur Regeln (der ML-Klassifikator ist inaktiv — siehe unten). Ground Truth: 94 im Umfang liegende reale Angriffe + 200 zufällige npm + 124 PyPI + 107 adversariale/Holdout.
| 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) |
ML-Klassifikator: inaktiv. Ein XGBoost-Modell liegt in src/ml/ vor, ist aber nie in muaddib scan eingebunden und läuft seit 2026-04-08 nur im LOG-ONLY-Modus im Monitor (das trainierte Modell kollabierte, Neuschulung ausstehend). Alle obigen Zahlen sind nur Regeln.
Vollständiges Protokoll, Verlauf pro Track, der PyPI-Cap-35-Vorbehalt, operative (GHSA-denominierte) Abdeckung und die ML-Neuschulungsmethodik: Evaluierungsmethodik.
Mitwirken
IOCs hinzufügen
YAML-Dateien in iocs/ bearbeiten:
- id: NEW-MALWARE-001
name: "malicious-package"
version: "*"
severity: critical
confidence: high
source: community
description: "Threat description"
references:
- https://example.com/article
mitre: T1195.002
Entwicklung
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm test
Testen
- 4545 Tests über 155 modulare Testdateien
- 56 Fuzz-Tests - Fehlerhafte Eingaben, ReDoS, Unicode, Binär
- Datadog-17K-Benchmark - 14.587 bestätigte Malware-Beispiele (im Umfang)
- Ground-Truth-Validierung - 96 reale Angriffe (95,74% TPR@3, 88,30% TPR@20 — v2.11.48 vollständige Messung auf 94 im Umfang)
- False-Positive-Validierung (v2.11.48-Messung) - 1,10% FPR-Regeln (6/545 gescannt), 2,50% auf 200 zufällige, 9,68% auf 124/132 PyPI (erste ehrliche Messung nach Track-D-Download-Fix). ML-Klassifikator derzeit inaktiv — siehe Evaluierungsmetriken → ML-Klassifikator.
Community
- Discord: https://discord.gg/y8zxSmue
Dokumentation
- Blog - Technische Artikel zur Lieferketten-Bedrohungserkennung
- Carnet de bord - Entwicklungstagebuch (auf Französisch)
- Dokumentationsindex - Alle Dokumentation an einem Ort
- Evaluierungsmethodik - Experimentelles Protokoll, Holdout-Ergebnisse
- Bedrohungsmodell - Was MUAD'DIB erkennt und nicht erkennt
- Sicherheitsrichtlinie - Referenz der Erkennungsregeln (278 Regeln)
- Sicherheitsaudit - Bypass-Validierungsbericht
- FP-Analyse - Historische False-Positive-Analyse
Lizenz
MUAD'DIB ist unter der GNU Affero General Public License v3.0 only (AGPL-3.0-only) lizenziert — siehe LICENSE und NOTICE.
Sie dürfen es frei verwenden, studieren, modifizieren und weiterverbreiten — auch über ein Netzwerk — vorausgesetzt, abgeleitete Werke und netzwerkbereitgestellte Modifikationen werden unter derselben Lizenz veröffentlicht.
Kommerzielle Lizenzierung: Zur Einbettung von MUAD'DIB in ein proprietäres / Closed-Source-Produkt oder zur Bereitstellung als gehosteter Dienst ohne die Quelloffenlegungspflichten der AGPL ist eine separate kommerzielle Lizenz erhältlich. Öffnen Sie ein Issue oder kontaktieren Sie den Autor (DNSZLSK).
Copyright (C) 2026 DNSZLSK.
The spice must flow. The worms must die.