
リアルタイム npm/PyPI サプライチェーン脅威検出。動作チェーン分析、ASTスキャン、IOCフィード、複合スコアリングエンジン。
インストール | 使い方 | 機能 | VS Code | CI/CD
npm と PyPI のサプライチェーン攻撃が急増しています。Shai-Hulud は 2025 年に 25,000 以上のリポジトリを侵害しました。既存のツールは脅威を検出しますが、対応には役立ちません。
MUAD'DIB は、22 個の並列スキャナー(277 の検出ルール)、難読化解除エンジン、モジュール間データフロー分析、複合スコアリング(21 の複合ルール)、および gVisor/Docker サンドボックスを組み合わせて、npm および PyPI パッケージにおける既知の脅威と疑わしい動作パターンを検出します。XGBoost 分類器がコードベースに存在しますが、現在は無効です(評価を参照)。
MUAD'DIB は、npm および PyPI 向けの無料・オープン・完全監査可能なサプライチェーンスキャナーです。既知の脅威(225,000 以上の IOC)、インストール時の RCE、認証情報の窃取・流出フロー、難読化されたペイロード、その他の疑わしい動作パターンを、テレメトリなしでローカルに検出します。
これは AGPL-3.0 の下でライセンスされています。商用ライセンスも提供しており、プロプライエタリ製品に組み込んだり、クローズドなホスティングサービスとして実行する必要がある組織向けに利用可能です(ライセンスを参照)。
すべてを網羅しようとは意図していません。何を捕捉し、何を捕捉しないかの正確な範囲については、スコープを参照してください。
検出対象(npm & PyPI):既知の悪意のあるパッケージ(名前 + SHA256 IOC マッチ)、タイポスクワッティング、インストール時の RCE(ライフサイクル preinstall/postinstall、curl | sh、Python インポート時、binding.gyp)、認証情報の読み取り→ネットワーク流出(ファイル内・ファイル間)、難読化/高エントロピー/スタブローダーペイロード、バイナリドロッパー(chmod +x + exec/spawn)、および分析回避の痕跡。
対象外:ブラウザのみの攻撃(DOM/window、Node.js API なし)、ネイティブバイナリ/WASM の内容(バイナリ分析なし)、ゼロデイ未知パッケージ(IOC フィードは事後的)、および npm/PyPI 以外のエコシステム(RubyGems、Maven、Go)。意図的なアンチサンドボックスフィンガープリンティングや多段階リモートペイロードは、既知の偽陰性リスクです。詳細:脅威モデル。
テレメトリなし。 あなたのコードとスキャン結果は決してマシンから送信されません。MUAD'DIB は脅威インテリジェンスフィードのダウンロード(muaddib update)と、スコアリングのための公開 npm レジストリメタデータの読み取りのみを行います。Webhook アラートはオプトインです。
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
npm(package.json、node_modules)と Python(requirements.txt、setup.py、pyproject.toml)の両方の依存関係をスキャンします。
muaddib
muaddib install <package>
muaddib install lodash axios --save-dev
muaddib install suspicious-pkg --force # 脅威があっても強制インストール
パッケージをインストール前にスキャンして脅威を検出します。既知の悪意のあるパッケージをブロックします。
各スキャンで 0-100 のリスクスコアが表示されます。
[SCORE] 58/100 [***********---------] HIGH
muaddib scan . --explain
各検出に対して、ルール ID、MITRE ATT&CK 手法、参照、対応プレイブックを表示します。
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 # CRITICAL のみで失敗
muaddib scan . --fail-on high # HIGH 以上で失敗(デフォルト)
muaddib scan . --paranoid
超厳格な検出。ネットワークアクセス、サブプロセス実行、動的コード評価、機密ファイルアクセスをすべて検出します。
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
厳格なフィルタリング(v2.1.2):IOC マッチ、サンドボックス確認済み脅威、カナリートークン流出のみアラート。優先順位トリアージ(v2.10.21):P1(赤、IOC/サンドボックス/カナリー)、P2(オレンジ、高スコア/コンパウンド)、P3(黄、その他)。
muaddib scan . --temporal-full # 4 つの時間的特徴すべて
muaddib scan . --temporal # 突発的なライフサイクルスクリプト検出
muaddib scan . --temporal-ast # バージョン間の AST 差分
muaddib scan . --temporal-publish # 公開頻度の異常
muaddib scan . --temporal-maintainer # メンテナー変更の検出
IOC データベースに出現する前に、パッケージバージョン間の変更を分析してサプライチェーン攻撃を検出します。詳細は評価方法論を参照。
muaddib sandbox <package-name>
muaddib sandbox <package-name> --strict
隔離された Docker コンテナ内での動的分析:strace、tcpdump、ファイルシステム差分、カナリートークン、CI 対応環境、タイムボム検出のためのモンキーパッチプリロード([0h、72h、7d] のオフセットで複数回実行)。
muaddib watch . # リアルタイム監視
muaddib daemon # デーモンモード(npm install を自動スキャン)
muaddib update # IOC の更新(高速、約5秒)
muaddib scrape # IOC の完全リフレッシュ(約5分)
muaddib diff HEAD~1 # 前回のコミットとの脅威比較
muaddib init-hooks # プリコミットフック(husky/pre-commit/git)
muaddib scan . --breakdown # スコアの分解表示
muaddib replay # グラウンドトゥルース検証(90/94 TPR@3、v2.11.48)
すべてのルール(272 RULES + 5 PARANOID)は MITRE ATT&CK 手法に対応付けられています。完全なルールリファレンスについては SECURITY.md を参照してください。
VS Code 拡張機能は npm プロジェクトを自動的にスキャンします。
code --install-extension dnszlsk.muaddib-vscode
MUAD'DIB: Scan Project - プロジェクト全体をスキャンMUAD'DIB: Scan Current File - 現在のファイルをスキャンmuaddib.autoScan、muaddib.webhookUrl、muaddib.failLevel詳細なドキュメントは vscode-extension/README.md を参照してください。
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 # 自動検出(husky/pre-commit/git)
muaddib init-hooks --type husky # husky を強制
muaddib init-hooks --mode diff # 新しい脅威のみブロック
pre-commit フレームワーク:
repos:
- repo: https://github.com/DNSZLSK/muad-dib
rev: v2.11.139
hooks:
- id: muaddib-scan
最終測定 v2.11.48(2026-05-26)、ルールのみ(ML 分類器は無効 — 後述参照)。グラウンドトゥルース:94 の実世界攻撃(スコープ内)+ 200 のランダム npm + 124 の PyPI + 107 の敵対的/ホールドアウト。
ML 分類器:無効。 XGBoost モデルが src/ml/ に存在しますが、muaddib scan には決して組み込まれておらず、2026-04-08 以降はモニター内で LOG-ONLY で動作しています(トレーニング済みモデルが崩壊し、再トレーニング待ち)。上記の数値はすべてルールのみです。
完全なプロトコル、トラック別履歴、PyPI cap-35 の注意点、運用(GHSA 表記)カバレッジ、および ML 再トレーニング方法論については、評価方法論を参照してください。
iocs/ 内の YAML ファイルを編集します。
- 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
git clone https://github.com/DNSZLSK/muad-dib
cd muad-dib
npm install
npm test
MUAD'DIB は GNU Affero General Public License v3.0 only(AGPL-3.0-only)の下でライセンスされています — LICENSE および NOTICE を参照してください。
あなたはそれを自由に使用、研究、修正、再配布することができます(ネットワーク経由を含む)。ただし、派生作品およびネットワーク上に配備された変更は、同じライセンスの下で公開されなければなりません。
商用ライセンス: MUAD'DIB をプロプライエタリ/クローズドソース製品に組み込んだり、AGPL のソース開示義務なしにホスティングサービスとして提供する場合、別途商用ライセンスが利用可能です。Issue を開くか、作者(DNSZLSK)に連絡してください。
Copyright (C) 2026 DNSZLSK.
スパイスは流れなければならない。ワームは死ななければならない。
| スキャナー | 検出 |
|---|
| AST 解析(acorn) | eval、Function、認証情報の窃取、バイナリドロッパー、プロトタイプフック |
| パターンマッチング | シェルコマンド、リバースシェル、デッドマンズスイッチ |
| データフロー分析 | 認証情報の読み取り+ネットワーク送信(ファイル内・ファイル間) |
| 難読化検出 | JS 難読化パターン(.min.js はスキップ) |
| 難読化解除前処理 | 文字列連結、charcode、base64、hex 配列、const 伝播 |
| モジュール間データフロー | ファイル間の汚染伝播(3 ホップチェーン、クラスメソッド) |
| 意図一貫性 | ファイル内のソース・シンクペア(認証情報+eval/ネットワーク) |
| タイポスクワッティング | npm + PyPI(Levenshtein 距離) |
| Python スキャナー | requirements.txt、setup.py、pyproject.toml、14,000 以上の PyPI IOC |
| シャノンエントロピー | 高エントロピー文字列(5.5 ビット以上、50 文字以上) |
| AI 設定スキャナー | .cursorrules、CLAUDE.md、copilot-instructions.md インジェクション |
| パッケージ/依存関係 | ライフサイクルスクリプト、IOC マッチング(225,000 以上のパッケージ) |
| GitHub Actions | Shai-Hulud バックドア検出 |
| ハッシュスキャナー | 既知の悪意のあるファイルハッシュ |
| IOC 文字列(intel-triage P1.1) | YARA スタイルの文字列マッチング(Axios 2026、TeamPCP、GlassWorm、CanisterSprawl) |
| フォレンジック防止 AST(intel-triage P1.2) | XOR ループ+自己削除+デコイ書き込み複合(csec autodelete) |
| スタブパッケージ(intel-triage P1.3) | 小さなメインファイル+外部依存 URL+ライフサイクルフック(ltidi チェーン) |
| モノレポスキャナー | Lerna/pnpm-workspace/turbo 検出(Sprint 1 監査 MR-C2 修正) |
| 信頼済み依存差分(オプトイン) | レジストリからの信頼済み依存 tarball との差分(v2.10.x) |
| Python ソース(PYSRC) | __init__.py/setup.py におけるインポート時/インストール時 RCE パターン(v2.11.41 — TrapDoor PyPI ギャップを解消) |
| Python AST(PYAST) | Tree-sitter-Python AST と汚染認識検出器(v2.11.42+) |
| アンチスキャナーインジェクション(ASI) | LLM コードレビュアーにクリーンな判定や難読化ペイロードのスキップを強制する、コメント/文字列内のプロンプトインジェクションテキスト(ASI-001..004、Hades キャンペーン 2026-06) |
| キャンペーン | ステータス |
|---|
| GlassWorm(2026年、433 以上のパッケージ) | 検出済み |
| Shai-Hulud v1/v2/v3(2025年) | 検出済み |
| event-stream(2018年) | 検出済み |
| eslint-scope(2018年) | 検出済み |
| Protestware(node-ipc、colors、faker) | 検出済み |
| タイポスクワッティング(crossenv、mongose、babelcli) | 検出済み |
| 入力 | 説明 | デフォルト |
|---|
path | スキャンするパス | . |
fail-on | 失敗する最小重大度 | high |
sarif | SARIF 出力ファイルパス | |
paranoid | 超厳格な検出 | false |
| メトリック | 結果 |
|---|
| 検出率(TPR@3) | 95.74%(90/94) |
| アラート率(TPR@20) | 88.30%(83/94) |
| FPR — キュレーション済み npm(548) | 1.10%(6/545) |
| FPR — ランダム npm(200) | 2.50%(5/200) |
| FPR — PyPI(132) | 9.68%(12/124) |
| ADR — 敵対的+ホールドアウト | 96.26%(103/107) |
| Wild TPR(Datadog 17K) | 92.8%(13,538/14,587) |