
Detecção de ameaças em tempo real na cadeia de suprimentos npm/PyPI. Análise comportamental de cadeia, varredura de AST, feeds de IOC e mecanismo de pontuação composta.
Instalação | Uso | Recursos | VS Code | CI/CD
Os ataques à cadeia de suprimentos do npm e PyPI estão explodindo. Shai-Hulud comprometeu mais de 25 mil repositórios em 2025. As ferramentas existentes detectam ameaças, mas não ajudam você a responder.
MUAD'DIB combina 22 scanners paralelos (277 regras de detecção), um motor de desofuscação, análise de fluxo de dados entre módulos, pontuação composta (21 regras compostas) e uma sandbox gVisor/Docker para detectar ameaças conhecidas e padrões comportamentais suspeitos em pacotes npm e PyPI. Um classificador XGBoost existe no código, mas está atualmente inativo (consulte Avaliação).
MUAD'DIB é um scanner de cadeia de suprimentos gratuito, aberto e totalmente auditável para npm e PyPI. Ele detecta ameaças conhecidas (mais de 225.000 IOCs), RCE em tempo de instalação, fluxos de roubo de credenciais seguido de exfiltração, payloads ofuscados e outros padrões comportamentais suspeitos — localmente, sem telemetria.
Ele é licenciado sob a AGPL-3.0; uma licença comercial está disponível para organizações que precisam incorporá-lo em um produto proprietário ou executá-lo como um serviço hospedado fechado (consulte Licença).
Ele deliberadamente não tenta fazer tudo — consulte Escopo para ver exatamente o que ele detecta e o que não detecta.
Detecta (npm e PyPI): pacotes maliciosos conhecidos (correspondência de IOC nome + SHA256), typosquats, RCE em tempo de instalação (lifecycle preinstall/postinstall, curl | sh, tempo de importação do Python, binding.gyp), leitura de credenciais seguida de exfiltração de rede (intra e entre arquivos), payloads ofuscados / de alta entropia / stub-loader, droppers binários (chmod +x + exec/spawn) e marcadores de evasão anti-análise.
Fora do escopo: ataques apenas de navegador (DOM/window, sem API Node.js), o conteúdo de binários nativos / WASM (sem análise binária), pacotes desconhecidos de dia zero (o feed de IOC é reativo) e ecossistemas que não sejam npm/PyPI (RubyGems, Maven, Go). Fingerprinting anti-sandbox determinado e payloads remotos multi-estágio são riscos conhecidos de falsos negativos. Detalhes completos: Modelo de Ameaças.
Sem telemetria. Seu código e resultados de varredura nunca saem da sua máquina — MUAD'DIB apenas baixa feeds de inteligência de ameaças (muaddib update) e, para pontuação, lê metadados públicos do registro npm. Alertas de webhook são opcionais.
npm install -g muaddib-scanner
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm link
muaddib scan .
muaddib scan /caminho/para/projeto
Escaneia dependências npm (package.json, node_modules) e Python (requirements.txt, setup.py, pyproject.toml).
muaddib
muaddib install <pacote>
muaddib install lodash axios --save-dev
muaddib install pacote-suspeito --force # Força instalação apesar das ameaças
Escaneia pacotes em busca de ameaças ANTES de instalar. Bloqueia pacotes maliciosos conhecidos.
Cada varredura exibe uma pontuação de risco de 0 a 100:
[SCORE] 58/100 [***********---------] HIGH (ALTO)
muaddib scan . --explain
Mostra ID da regra, técnica MITRE ATT&CK, referências e playbook de resposta para cada detecção.
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 # Falha apenas em CRÍTICO
muaddib scan . --fail-on high # Falha em ALTO e CRÍTICO (padrão)
muaddib scan . --paranoid
Detecção ultra rigorosa com menor tolerância. Detecta qualquer acesso à rede, execução de subprocessos, avaliação dinâmica de código e acesso a arquivos sensíveis.
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
Filtragem rigorosa (v2.1.2): alertas apenas para correspondências de IOC, ameaças confirmadas por sandbox ou exfiltração de token canário. Triagem prioritária (v2.10.21): P1 (vermelho, IOC/sandbox/canário), P2 (laranja, pontuação alta/compostos), P3 (amarelo, restante).
muaddib scan . --temporal-full # Todas as 4 funcionalidades temporais
muaddib scan . --temporal # Detecção de script de ciclo de vida repentino
muaddib scan . --temporal-ast # Diferença de AST entre versões
muaddib scan . --temporal-publish # Anomalia de frequência de publicação
muaddib scan . --temporal-maintainer # Detecção de alteração de mantenedor
Detecta ataques à cadeia de suprimentos antes que eles apareçam em bancos de dados de IOC, analisando mudanças entre versões de pacotes. Consulte Metodologia de Avaliação para detalhes.
muaddib sandbox <nome-do-pacote>
muaddib sandbox <nome-do-pacote> --strict
Análise dinâmica em um contêiner Docker isolado: strace, tcpdump, diff do sistema de arquivos, tokens canários, ambiente ciente de CI e pré-carregamento de monkey-patching para detecção de bombas-relógio (múltiplas execuções em deslocamentos [0h, 72h, 7d]).
muaddib watch . # Monitoramento em tempo real
muaddib daemon # Modo daemon (auto-varredura no npm install)
muaddib update # Atualizar IOCs (rápido, ~5s)
muaddib scrape # Atualização completa de IOC (~5min)
muaddib diff HEAD~1 # Comparar ameaças com commit anterior
muaddib init-hooks # Ganchos pré-commit (husky/pre-commit/git)
muaddib scan . --breakdown # Decomposição explicável da pontuação
muaddib replay # Validação de verdade fundamental (90/94 TPR@3, v2.11.48)
Todas as regras (272 REGRAS + 5 PARANOICO) são mapeadas para técnicas MITRE ATT&CK. Consulte SECURITY.md para a referência completa das regras.
A extensão do VS Code escaneia automaticamente seus projetos npm.
code --install-extension dnszlsk.muaddib-vscode
MUAD'DIB: Scan Project - Escanear projeto inteiroMUAD'DIB: Scan Current File - Escanear arquivo atualmuaddib.autoScan, muaddib.webhookUrl, muaddib.failLevelConsulte vscode-extension/README.md para documentação completa.
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-detecção (husky/pre-commit/git)
muaddib init-hooks --type husky # Forçar husky
muaddib init-hooks --mode diff # Bloquear apenas NOVAS ameaças
Com framework pre-commit:
repos:
- repo: https://github.com/DNSZLSK/muad-dib
rev: v2.11.139
hooks:
- id: muaddib-scan
Última medição v2.11.48 (2026-05-26), apenas regras (o classificador ML está inativo — veja abaixo). Verdade fundamental: 94 ataques reais no escopo + 200 npm aleatórios + 124 PyPI + 107 adversariais/holdout.
Classificador ML: inativo. Um modelo XGBoost reside em src/ml/ mas nunca é conectado ao muaddib scan, e executa SOMENTE LOG no monitor desde 2026-04-08 (o modelo treinado colapsou, aguardando re-treinamento). Todos os números acima são apenas com regras.
Protocolo completo, histórico por faixa, a ressalva do cap-35 do PyPI, cobertura operacional (denominada GHSA) e metodologia de re-treinamento ML: Metodologia de Avaliação.
Edite arquivos YAML em iocs/:
- id: NEW-MALWARE-001
name: "pacote-malicioso"
version: "*"
severity: critical
confidence: high
source: community
description: "Descrição da ameaça"
references:
- https://example.com/artigo
mitre: T1195.002
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm test
MUAD'DIB é licenciado sob a GNU Affero General Public License v3.0 only (AGPL-3.0-only) — consulte LICENSE e NOTICE.
Você é livre para usar, estudar, modificar e redistribuí-lo — inclusive através de uma rede — desde que trabalhos derivados e modificações implantadas em rede sejam lançados sob a mesma licença.
Licenciamento comercial: para incorporar o MUAD'DIB em um produto proprietário / de código fechado, ou para oferecê-lo como um serviço hospedado sem as obrigações de divulgação de código da AGPL, uma licença comercial separada está disponível. Abra uma issue ou entre em contato com o autor (DNSZLSK).
Copyright (C) 2026 DNSZLSK.
A especiaria deve fluir. Os vermes devem morrer.
| Scanner | Detecção |
|---|
| Análise AST (acorn) | eval, Function, roubo de credenciais, droppers binários, hooks de protótipo |
| Correspondência de Padrões | Comandos de shell, shells reversos, interruptor de segurança |
| Análise de Fluxo de Dados | Leitura de credenciais + envio de rede (intra-arquivo e entre arquivos) |
| Detecção de Ofuscação | Padrões de ofuscação JS (pular .min.js) |
| Pré-processamento de Desofuscação | Concatenação de strings, charcode, base64, array hexadecimal, propagação de constantes |
| Fluxo de Dados entre Módulos | Propagação de taint entre arquivos (cadeias de 3 saltos, métodos de classe) |
| Coerência de Intenção | Pareamento fonte-sumidouro intra-arquivo (credencial + eval/rede) |
| Typosquatting | npm + PyPI (distância de Levenshtein) |
| Scanner Python | requirements.txt, setup.py, pyproject.toml, mais de 14 mil IOCs PyPI |
| Entropia de Shannon | Strings de alta entropia (5,5 bits + mínimo de 50 caracteres) |
| Scanner de Configuração de IA | Injeção em .cursorrules, CLAUDE.md, copilot-instructions.md |
| Pacote/Dependências | Scripts de ciclo de vida, correspondência de IOC (mais de 225 mil pacotes) |
| GitHub Actions | Detecção de backdoor Shai-Hulud |
| Scanner de Hash | Hashes de arquivos maliciosos conhecidos |
| Strings IOC (intel-triage P1.1) | Correspondência de strings estilo YARA (Axios 2026, TeamPCP, GlassWorm, CanisterSprawl) |
| AST Anti-Forense (intel-triage P1.2) | Loop XOR + auto-exclusão + gravação de isca composta (csec autodelete) |
| Pacote Stub (intel-triage P1.3) | Arquivo principal minúsculo + URL de dependência externa + hook de ciclo de vida (cadeia ltidi) |
| Scanner de Monorepo | Detecção de Lerna/pnpm-workspace/turbo (correção Sprint 1 audit MR-C2) |
| Diff de Dep Confiável (opt-in) | Diff contra tarballs de dependências confiáveis do registro (v2.10.x) |
| Fonte Python (PYSRC) | Padrões de RCE em tempo de importação / instalação em __init__.py / setup.py (v2.11.41 — fecha lacuna TrapDoor PyPI) |
| AST Python (PYAST) | AST Tree-sitter-Python com detectores cientes de taint (v2.11.42+) |
| Injeção Anti-Scanner (ASI) | Texto de injeção de prompt em comentários/strings que coage um revisor de código LLM a dar um veredito limpo ou a pular um payload ofuscado (ASI-001..004, campanha Hades 2026-06) |
| Campanha | Status |
|---|
| GlassWorm (2026, 433+ pacotes) | Detectada |
| Shai-Hulud v1/v2/v3 (2025) | Detectada |
| event-stream (2018) | Detectada |
| eslint-scope (2018) | Detectada |
| Protestware (node-ipc, colors, faker) | Detectada |
| Typosquats (crossenv, mongose, babelcli) | Detectada |
| Input | Descrição | Padrão |
|---|
path | Caminho para escanear | . |
fail-on | Severidade mínima para falhar | high |
sarif | Caminho do arquivo de saída SARIF | |
paranoid | Detecção ultra rigorosa | false |
| Métrica | Resultado |
|---|
| Taxa de detecção (TPR@3) | 95,74% (90/94) |
| Taxa de alerta (TPR@20) | 88,30% (83/94) |
| FPR — npm curado (548) | 1,10% (6/545) |
| FPR — npm aleatório (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) |