업데이트로 돌아가기
New releaseSep 3, 2026

muad-dib v2.12.0

실시간 npm/PyPI 공급망 위협 탐지. 행동 체인 분석, AST 스캐닝, IOC 피드 및 복합 점수 엔진.

공유

MUAD'DIB Logo

npm version CI Coverage OpenSSF Scorecard License Node IOCs

설치 | 사용법 | 기능 | VS Code | CI/CD

Version francaise


MUAD'DIB를 선택해야 하는 이유는?

npm 및 PyPI 공급망 공격이 폭발적으로 증가하고 있습니다. Shai-Hulud는 2025년에 25,000개 이상의 저장소를 손상시켰습니다. 기존 도구는 위협을 탐지하지만 대응을 돕지는 않습니다.

MUAD'DIB는 22개의 병렬 스캐너(278개 탐지 규칙), 난독화 해제 엔진, 모듈 간 데이터 흐름 분석, 복합 점수 산정(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 import 시, binding.gyp), 자격 증명 읽기 후 네트워크 외부 유출(파일 내 및 파일 간), 난독화/고엔트로피/스텁 로더 페이로드, 바이너리 드로퍼(chmod +x + exec/spawn), 및 안티 분석 회피 마커.

범위 외: 브라우저 전용 공격(DOM/window, Node.js API 없음), 네이티브 바이너리/WASM의 내용(바이너리 분석 없음), 제로데이 알려지지 않은 패키지(IOC 피드는 반응형), 및 npm/PyPI 이외의 생태계(RubyGems, Maven, Go). 의도적인 안티 샌드박스 핑거프린팅과 다단계 원격 페이로드는 알려진 오탐(false-negative) 위험입니다. 전체 세부 사항: 위협 모델.

텔레메트리 없음. 코드와 스캔 결과는 절대 기기를 떠나지 않습니다. MUAD'DIB는 위협 인텔리전스 피드를 다운로드만 하며(muaddib update), 점수 산정을 위해 공개 npm 레지스트리 메타데이터를 읽습니다. 웹훅 알림은 선택 사항입니다.


설치

npm (권장)

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 및 CRITICAL에서 실패 (기본값)

파라노이드 모드

muaddib scan . --paranoid

더 낮은 허용 오차로 초엄격 탐지. 모든 네트워크 액세스, 하위 프로세스 실행, 동적 코드 평가 및 민감한 파일 액세스를 탐지합니다.

웹훅 알림

muaddib scan . --webhook "https://discord.com/api/webhooks/..."

엄격한 필터링(v2.1.2): IOC 일치, 샌드박스 확인 위협 또는 카나리아 토큰 외부 유출에 대해서만 알림. 우선순위 분류(v2.10.21): P1(빨간색, IOC/샌드박스/카나리아), P2(주황색, 높은 점수/복합), P3(노란색, 나머지).

행동 이상 탐지 (v2.0)

muaddib scan . --temporal-full     # 4가지 시간적 특징 모두
muaddib scan . --temporal          # 갑작스러운 수명주기 스크립트 탐지
muaddib scan . --temporal-ast      # 버전 간 AST 차이
muaddib scan . --temporal-publish  # 게시 빈도 이상
muaddib scan . --temporal-maintainer # 유지관리자 변경 탐지

패키지 버전 간 변경 사항을 분석하여 IOC 데이터베이스에 나타나기 전에 공급망 공격을 탐지합니다. 자세한 내용은 평가 방법론을 참조하세요.

Docker 샌드박스

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)

기능

22개의 병렬 스캐너

스캐너탐지
AST 파싱 (acorn)eval, Function, 자격 증명 탈취, 바이너리 드로퍼, 프로토타입 훅
패턴 매칭셸 명령, 리버스 셸, 죽은 자의 스위치
데이터 흐름 분석자격 증명 읽기 + 네트워크 전송 (파일 내 및 파일 간)
난독화 탐지JS 난독화 패턴 (.min.js 건너뜀)
난독화 해제 전처리문자열 연결, charcode, base64, hex 배열, 상수 전파
모듈 간 데이터 흐름파일 간 오염 전파 (3홉 체인, 클래스 메서드)
의도 일관성파일 내 소스-싱크 페어링 (자격 증명 + eval/네트워크)
타이포스쿼팅npm + PyPI (Levenshtein 거리)
Python 스캐너requirements.txt, setup.py, pyproject.toml, 14K+ PyPI IOC
Shannon 엔트로피고엔트로피 문자열 (5.5비트 + 최소 50자)
AI 설정 스캐너.cursorrules, CLAUDE.md, copilot-instructions.md 주입
패키지/종속성수명주기 스크립트, IOC 매칭 (225K+ 패키지)
GitHub ActionsShai-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의 import 시 / 설치 시 RCE 패턴 (v2.11.41 — TrapDoor PyPI 격차 해소)
Python AST (PYAST)오염 인식 탐지기가 포함된 Tree-sitter-Python AST (v2.11.42+)
안티 스캐너 주입 (ASI)LLM 코드 리뷰어를 무해 판정으로 유도하거나 난독화된 페이로드를 건너뛰도록 강제하는 주석/문자열의 프롬프트 주입 텍스트 (ASI-001..004, Hades 캠페인 2026-06)

278개 탐지 규칙

모든 규칙(273 RULES + 5 PARANOID)은 MITRE ATT&CK 기술에 매핑됩니다. 전체 규칙 참조는 SECURITY.md를 참조하세요.

탐지된 캠페인

캠페인상태
GlassWorm (2026, 433+ 패키지)탐지됨
Shai-Hulud v1/v2/v3 (2025)탐지됨
event-stream (2018)탐지됨
eslint-scope (2018)탐지됨
Protestware (node-ipc, colors, faker)탐지됨
타이포스쿼트 (crossenv, mongose, babelcli)탐지됨

VS Code

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를 참조하세요.


CI/CD

GitHub Actions (마켓플레이스)

최소 구성 (HIGH+ 위협에서 빌드 실패, 단일 스캔):

name: Security Scan

on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: DNSZLSK/[email protected]   # 릴리스된 태그에 고정
        with:
          fail-on: 'high'

SARIF를 Security 탭에 업로드하는 구성 (security-events: write 필요, SARIF 생성을 위해 두 번째 패스 실행):

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'

입력

입력설명기본값
path스캔할 경로.
fail-on실패할 최소 심각도 (critical/high/medium/low/none)high
sarifSARIF 출력 파일 경로 — 설정 시 Security 탭에도 업로드
paranoid초엄격 탐지 (더 높은 FPR)false
version설치할 muaddib-scanner npm 버전latest

출력 (이후 단계에서 steps.<id>.outputs.*로 사용)

출력설명
risk-score위험 점수 0–100
risk-levelSAFE / LOW / MEDIUM / HIGH / CRITICAL
threats-count탐지된 총 위협 수
critical-count / high-count심각도별 위협 수
exit-code0 = fail-on 게이트 통과, 그 외에는 0이 아님
sarif-fileSARIF 파일 경로 (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건 + 무작위 npm 200개 + PyPI 124개 + 적대적/홀드아웃 107건.

지표결과
탐지율 (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)
실제 TPR (Datadog 17K)92.8% (13,538/14,587)

ML 분류기: 비활성. XGBoost 모델이 src/ml/에 존재하지만 muaddib scan에 연결되지 않았으며, 2026-04-08부터 모니터에서 LOG-ONLY로 실행됩니다(훈련된 모델이 붕괴되어 재훈련 대기 중). 위의 모든 수치는 규칙 전용입니다.

전체 프로토콜, 트랙별 이력, PyPI cap-35 주의 사항, 운영(GHSA 기준) 적용 범위 및 ML 재훈련 방법론: 평가 방법론.


기여

IOC 추가

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

테스트

  • 4545개 테스트155개의 모듈식 테스트 파일
  • 56개 퍼즈 테스트 - 잘못된 입력, ReDoS, 유니코드, 바이너리
  • Datadog 17K 벤치마크 - 확인된 악성 샘플 14,587개 (범위 내)
  • 실제 데이터 검증 - 실제 공격 96건 (95.74% TPR@3, 88.30% TPR@20 — v2.11.48 전체 측정, 범위 내 94건)
  • 오탐 검증 (v2.11.48 측정) - 1.10% FPR 규칙 (스캔된 545건 중 6건), 무작위 200건 중 2.50%, PyPI 124/132건 중 9.68% (Track-D 다운로드 수정 이후 첫 정직한 측정). ML 분류기는 현재 비활성 — 평가 지표 → ML 분류기 참조.

커뮤니티


문서


라이선스

MUAD'DIB는 GNU Affero General Public License v3.0 only (AGPL-3.0-only)로 라이선스가 부여됩니다 — LICENSENOTICE 참조.

파생 저작물과 네트워크 배포 수정 사항이 동일한 라이선스로 공개되는 조건 하에, 네트워크를 통한 사용을 포함하여 자유롭게 사용, 연구, 수정 및 재배포할 수 있습니다.

상용 라이선스: MUAD'DIB를 독점/폐쇄 소스 제품에 통합하거나 AGPL의 소스 공개 의무 없이 호스팅 서비스로 제공하려면 별도의 상용 라이선스가 제공됩니다. 이슈를 열거나 저자(DNSZLSK)에게 문의하세요.

Copyright (C) 2026 DNSZLSK.


The spice must flow. The worms must die.

카테고리