Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/eris-ths/supply-chain-guard
Indicator of Compromise (IOC) ManagementVulnerability ScannersScripting & AutomationMalware AnalysisDevSecOpsThreat IntelligenceSupply Chain SecurityLearning & EducationIncident Response
GitHuberis-ths/supply-chain-guard

supply-chain-guard

npm/yarn 및 Python(pip/poetry/uv) 전반에서 공급망 공격을 탐지, 평가 및 대응합니다. Claude Code 스킬 + 독립 실행형 스크립트. axios RAT(2026-03-31) 및 Starlette BadHost CVE-2026-48710(2026-05-22) 기간 중에 구축됨.

저장소 보기
31개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Supply Chain Guard (SCG)

npm/yarn 및 Python (pip/poetry/uv) 공급망 공격 대응을 위한 인시던트 대응 도구 키트 — 무료, 로컬 실행, 종속성 없음.

SCG는 상용 도구와 커버리지에서 경쟁하는 스캐닝 엔진이 아닙니다. 이는 Claude Code 스킬이자 독립형 셸 도구 키트로, 세 가지 작업을 잘 수행합니다: (1) 특정 인시던트가 발생했을 때 빠르고 반복 가능한 초기 대응을 제공하며("내 머신이 지금 영향을 받고 있는가?"), (2) 기존 OSS 스캐너(npm audit, osv-scanner, pip-audit)를 하나의 구조화된 패스로 오케스트레이션하고, (3) 특히 AI 개발 환경에서 일반 스캐너가 다루지 않는 설계 위생 교훈을 문서화합니다.

실제 인시던트 중에 구축 및 강화되었으며, 다음 사례를 포함합니다:

  • [email protected] RAT 인시던트 (2026-03-31) — npm 관리자 계정 탈취(UNC1069/DPRK-APT)로 팬텀 종속성 RAT 주입
  • Starlette BadHost (CVE-2026-48710, 2026-05-22) — Python HTTP 프레임워크 Host 헤더 경로 주입 → SSRF/RCE, FastAPI, vLLM, LiteLLM 및 광범위한 AI 에이전트 생태계에 영향

v4의 새로운 기능 (2026-05-27)

  • Python 공급망 스캔 — pip-audit / osv-scanner / CVE 플래그 버전 탐지 기능을 갖춘 scripts/project-scan-py.sh
  • CVE 플래그 버전 계층 (L3-CVE) — 엄격한 semver 사양 평가로 합법적인 패키지의 알려진 취약 버전 추적 (BadHost CVE-2026-48710 기본 포함)
  • 설계 위생 가이드라인 — stdio 우선 MCP 전송, 버전 고정 규율, GCP 기본 compute SA 강화 (SKILL.md §D.7 DesignHygiene 참조)
  • Guild-CLI Devil 렌즈 통합 — guild-cli 워크플로우에서 SCG를 Devil 렌즈로 호출 (아래 "Guild-CLI Devil 통합" 참조)

목차

  • 존재 이유
  • SCG가 기존 도구와 다른 점
  • SCG가 무엇인지 (그리고 아닌지)
  • 아키텍처
  • 빠른 시작
  • 스캔 모드
  • 위협 인텔리전스
  • Devil Gate 프레임워크
  • 독립형 스크립트
  • CI/CD 통합
  • 대응 플레이북
  • IOC 참조
  • 면책 조항
  • 제한 사항
  • 무결성 검증
  • 라이선스

존재 이유

2026년 3월 31일, 널리 사용되는 axios npm 패키지(v1.14.1 및 v0.30.4)가 UNC1069/DPRK-APT(Google Threat Intelligence Group 추정)로 인한 관리자 계정 탈취를 통해 손상되었습니다. 이 공격은 postinstall 스크립트를 통해 합법적인 시스템 프로세스로 위장한 교차 플랫폼 RAT을 배포하는 팬텀 종속성([email protected])을 주입했습니다.

**Supply Chain Guard (SCG)**는 인시던트 중에 다음을 제공하기 위해 구축되었습니다:

  1. 즉시 탐지 — 내 머신이나 프로젝트가 지금 영향을 받고 있는가?
  2. 구조화된 평가 — 심각도는 얼마나 되는가? 폭발 반경은 무엇인가?
  3. 안내된 대응 — 안전 확인과 함께 단계별 문제 해결
  4. 지속적 방어 — 재발 방지를 위한 8-게이트 검증 프레임워크

SCG가 기존 도구와 다른 점

SCG는 기존 보안 도구를 대체하지 않습니다. 여러 탐지 계층을 구조화된 검증 프레임워크 및 안내된 문제 해결과 결합하여, 활성 인시던트 중에 사용하거나 기존 도구와 함께 정기 점검으로 사용하도록 설계되었습니다.

도구기능SCG와의 관계
npm audit레지스트리에서 알려진 취약점 확인SCG는 npm audit을 L1 계층으로 포함한 후, IOC 파일시스템/네트워크 스캐닝, 악성 패키지 탐지 및 상단의 구조화된 대응 워크플로우를 추가합니다
osv-scannerGoogle의 OSV 데이터베이스에 대한 잠금 파일 스캔SCG는 OSV를 L2 계층으로 포함합니다. osv-scanner는 파일시스템의 RAT 아티팩트나 활성 C2 연결을 확인하지 않습니다
Snyk / Socket.dev실시간 모니터링, PR 검사, 라이선스 스캐닝을 갖춘 상용 SaaSSCG는 무료이며, 로컬 우선, 계정 불필요, 제3자에게 데이터 전송 없음. 지속적인 모니터링보다 즉각적인 인시던트 대응을 위해 설계됨
수동 IR사용자 지정 스크립트를 사용한 임시 조사SCG는 인시던트마다 달라지는 일회성 체크리스트 대신 반복 가능한 프레임워크(8개 검증 게이트, 수렴 루프, 심각도 매트릭스)를 제공합니다

SCG를 사용해야 하는 경우:

  • 공급망 인시던트가 방금 발생했으며 지금 당장 머신과 프로젝트를 확인해야 하는 경우
  • 손상이 완전히 해결되었는지 확인하기 위한 구조화되고 반복 가능한 프로세스가 필요한 경우
  • SaaS 종속성 없이 로컬에서 실행되는 경량 검사가 필요한 경우

다른 것을 사용해야 하는 경우:

  • 지속적인 실시간 모니터링이 필요한 경우 → Snyk, Socket.dev
  • 라이선스 규정 준수 스캐닝이 필요한 경우 → Snyk, FOSSA
  • npm/yarn을 넘어서는 커버리지가 필요한 경우 → osv-scanner(pip, cargo, go 등 지원)

SCG가 무엇인지 (그리고 아닌지)

경계를 솔직히 밝히는 것이 과장 판매보다 낫습니다. SCG는 세 가지입니다:

  1. 코드로 작성된 인시던트 대응 플레이북. 명명된 인시던트(axios RAT, Shai-Hulud, 새로운 CVE)가 발생하면 SCG는 "내가 영향을 받았는가, 그렇다면 어떻게 해야 하는가?"를 실행 가능한 체크리스트(8개 검증 게이트, 심각도 매트릭스, 모든 파괴적 작업에 명시적인 [y/N] 확인이 필요한 문제 해결 스크립트)로 전환합니다. 이것이 주요 가치입니다: 상용 모니터링 도구가 제공하지 않는 빠르고 구조화된 초기 대응입니다.

  2. 기존 OSS 스캐너의 오케스트레이터. L1/L2 계층은 npm audit / pip-audit / osv-scanner를 래핑합니다. 원시 탐지 성능의 대부분은 차용되었습니다. SCG의 기여는 이를 하나의 패스로 묶고, 레지스트리 도구가 수행하지 않는 파일시스템/IOC 검사를 추가하며, 출력을 읽기 쉽고 실행 가능하게 만드는 것입니다.

  3. 실제 설계 위생 교훈 문서화 (SKILL.md §D.7) — 실제로 직면하거나 조사한 사항: MCP 전송 선택, GCP 기본-SA 강화, 설치 시 실행 벡터, AI 개발 도구를 표적으로 하는 위협(Shai-Hulud가 .claude/settings.json 읽기, SANDWORM_MODE가 MCP 구성 오염). 이 틈새 — AI 지원 개발을 위한 공급망 위생 — 가 SCG가 진정으로 차별화되는 부분입니다.

SCG가 의도적으로 NOT인 것

  • 커버리지 경쟁자가 아닙니다. 위협 데이터베이스(SKILL.md D.2, L3 정적 목록)는 수동 유지 관리됩니다 — 우리가 읽은 인시던트를 보유하며, 라이브 상용 피드가 추적하는 수만 개의 악성 패키지를 보유하지 않습니다. 수동 선별 목록은 실제 새로운 위협의 속도를 따라잡을 수 없으며, 우리는 그렇게 할 수 있다고 주장하지 않습니다.
  • 행동 분석 엔진이 아닙니다. SCG는 알려진 패턴을 매칭합니다. 난독화된 페이로드와 공개 권고사항이 없는 진정한 제로데이는 구조적으로 범위를 벗어납니다.
  • 지속적 모니터링이 아닙니다. 인시던트 중에 실행하거나 정기 스윕으로 실행하는 특정 시점 검사입니다 — 종속성 그래프를 감시하는 서비스가 아닙니다.

SCG의 방향성

수동 선별 데이터베이스는 커버리지에서 이길 수 없기 때문에, 항상 뒤처지는 영역보다는 SCG가 대체하기 어려운 부분에 의도적으로 투자하고 있습니다:

  • 더 깊은 인시던트 대응 플레이북 (#1) — 더 나은 초기 대응 사용성, 더 많은 인시던트 템플릿.
  • AI 개발 환경 위생 (#3) — Claude Code / Cursor / MCP 서버 및 유사 도구를 대상으로 하는 위협에 대한 탐지 및 지침. 상용 공급망 스캐너는 이를 대부분 다루지 않습니다.

정적 위협 데이터베이스(#2)는 주목할 만한 인시던트가 발생할 때마다 계속 업데이트되지만, 경쟁하려는 방향이 아님을 명시적으로 밝힙니다.


아키텍처

SCG는 세 가지 계층으로 도메인 주도 설계(DDD) 아키텍처를 따릅니다:``` +-----------------------------------------------------+ | Domain Layer | | Threat models, known threats DB, severity matrix, | | Devil Gate definitions | +-----------------------------------------------------+ | Application Layer | | Use cases, scan pipeline, response protocols, | | Devil execution loop | +-----------------------------------------------------+ | Infrastructure Layer | | Scanner scripts (npm audit, OSV, static list, | | IOC filesystem, network, lockfile integrity) | +-----------------------------------------------------+

root@kitploit:~
### 스캔 파이프라인

동일한 5계층 파이프라인이 두 생태계 모두에 적용되며, 각 계층에는 생태계별 스캐너가 있습니다:```
L1 ──→ L2 ──→ L3 ──→ IOC ──→ LF ──→ assess(SeverityMatrix) ──→ VERDICT
계층npm/yarn (project-scan.sh)Python (project-scan-py.sh)
L1npm auditpip-audit
L2osv-scanner / OSV.dev APIosv-scanner
L3정적 목록 (악성 + 오타스쿼팅)정적 목록 (악성/오타스쿼팅 + CVE 플래그 지정 버전)
IOC파일시스템 + 네트워크 아티팩트파일시스템 + 프로세스 아티팩트 (Python 스타일)
LFnpm ci --dry-run + 무결성 수잠금파일 무결성 (uv.lock / poetry.lock / requirements*.txt)

두 파이프라인 모두 동일한 SeverityMatrix 및 Devil Gate Framework에 연결됩니다.


빠른 시작

Claude Code 스킬로 사용하기

SKILL.md 파일을 Claude Code 스킬 디렉토리에 복사하세요:```bash

Global (all projects)

cp SKILL.md ~/.claude/skills/supply-chain-guard.md

Or project-specific

mkdir -p .claude/skills cp SKILL.md .claude/skills/supply-chain-guard.md

root@kitploit:~
그런 다음 Claude Code에서 호출하십시오:```
> /supply-chain-guard
> "Check this project for supply chain issues"
> "Is my machine affected by the axios compromise?"

독립 실행형 스크립트로 사용```bash

Environment-wide scan (IOC + all projects) [READ-ONLY]

./scripts/env-scan.sh

npm/yarn project scan (requires package.json in cwd) [READ-ONLY]

./scripts/project-scan.sh

Python project scan (requires pyproject.toml / requirements*.txt / poetry.lock / uv.lock in cwd) [READ-ONLY, added in v4]

./scripts/project-scan-py.sh

IOC-only scan (filesystem + network artifacts) [READ-ONLY]

./scripts/ioc-scan.sh

Remediation (interactive, every action requires confirmation)

./scripts/respond.sh --critical # Full RAT cleanup (npm + Python) ./scripts/respond.sh --high axios 1.14.0 # Pin npm package to safe version ./scripts/respond.sh --high urllib3 2.7.0 # Pin Python package (auto-detects pip/poetry/uv)

root@kitploit:~
> **Python 수정은 기본적으로 보수적으로 설계되었습니다.** npm의 경우 `--high`가 자동으로 재정의를 적용합니다. Python의 경우 *안내*합니다: 사용 중인 패키지 관리자(pip/poetry/uv)를 감지하여 정확한 고정 명령을 출력하고 안전한 단계만 적용합니다. 잠금 파일 변경 및 venv 재구축 명령은 실행할 수 있도록 표시만 됩니다. 이는 분열된 Python 패키징 생태계에서 오탐이 연쇄적인 강제 재설치를 유발하는 것을 방지합니다.

다중 언어 저장소(npm + Python)의 경우 관련 하위 디렉터리에서 순차적으로 두 프로젝트 스캐너를 실행하세요.

> **안전 설계:** 모든 스캔 스크립트는 엄격히 읽기 전용입니다. 어떤 것도 수정, 삭제 또는 설치하지 않습니다. 수정 스크립트(`respond.sh`)만이 파괴적인 작업을 수행하며, **모든 단일 작업에는 기본값이 NO인 명시적인 `[y/N]` 확인**이 필요합니다.

---

## 스캔 모드

### 환경 스캔 (`env_scan`)

개발 머신 전체를 침해 지표에 대해 스캔합니다.

| 검사 항목 | 설명 |
|-------|-------------|
| **IOC: 파일시스템** | RAT 바이너리, 지속성 메커니즘, 스테이징 파일 |
| **IOC: 네트워크** | 활성 C2 연결 (IP + 도메인) |
| **IOC: 프로세스** | 실행 중인 악성 프로세스 |
| **프로젝트 간** | 모든 `package-lock.json` 파일에서 손상된 버전 스캔 |
| **악성 패키지** | 모든 잠금 파일 내 알려진 악성 패키지 이름 |

**트리거:** "이 PC", "환경 검사", "머신 전체"

### 프로젝트 스캔 — npm/yarn (`project_scan`)

단일 npm/yarn 프로젝트의 심층 스캔. `package.json`이 포함된 디렉터리에서 실행합니다.

| 계층 | 스캐너 | 설명 |
|-------|---------|-------------|
| **L1** | `npm audit` | npm 레지스트리를 통한 알려진 취약점 |
| **L2** | `osv-scanner` / OSV.dev API | Google의 오픈소스 취약점 데이터베이스 |
| **L3** | 정적 목록 | 하드코딩된 알려진 악성 패키지 확인 |
| **IOC** | 파일시스템 + 네트워크 | RAT 아티팩트 탐지 |
| **LF** | 잠금 파일 무결성 | `npm ci --dry-run` + 무결성 해시 개수 |

**트리거:** "이 프로젝트", "npm audit", 또는 현재 작업 디렉터리에 `package.json`이 있는 경우

### 프로젝트 스캔 — Python (`project_scan_py`, v4에서 추가됨)

단일 Python 프로젝트의 심층 스캔. `pyproject.toml`, `requirements*.txt`, `poetry.lock`, 또는 `uv.lock`이 포함된 디렉터리에서 실행합니다.

| 계층 | 스캐너 | 설명 |
|-------|---------|-------------|
| **L1** | `pip-audit` | PyPI Advisory DB를 통한 알려진 취약점 (선택 사항 — 설치되지 않은 경우 SKIP; `pip install pip-audit` 권장) |
| **L2** | `osv-scanner` | Google의 오픈소스 취약점 데이터베이스, `uv.lock` / `poetry.lock` / `requirements*.txt` 대상 (선택 사항 — 설치되지 않은 경우 SKIP) |
| **L3-MAL** | 정적 악성 목록 (`_L3_LIST`) | 알려진 하이재킹/타이포스쿼팅 패키지 이름. PEP 621 목록, Poetry 인라인, requirements 스타일 선언과 일치합니다 ([PR #4](https://github.com/eris-ths/supply-chain-guard/pull/4) 참고). 적중 시 FAIL |
| **L3-CVE** | 정적 CVE 플래그 버전 목록 (`_L3_CVE_LIST`) | 합법적인 패키지의 알려진 취약한 버전 (예: [BadHost CVE-2026-48710](https://cryptobriefing.com/starlette-badhost-vulnerability-ai-agents/)에 대한 `starlette<1.0.1`). Python의 `packaging` 라이브러리를 통한 엄격한 semver 평가. 확인된 일치 시 FAIL. 패키지가 선언되었지만 잠금 파일이 없는 경우 경고 (버전을 평가할 수 없음) |
| **IOC** | 파일시스템 + 프로세스 | Python 특화 아티팩트 확인 (불량 스크립트, 의심스러운 프로세스) |
| **LF** | 잠금 파일 무결성 | `uv.lock` / `poetry.lock` / `requirements*.txt`가 깔끔하게 파싱되고 고정된 버전을 포함하는지 확인 |

**트리거:** Python 파일이 있는 "이 프로젝트" 또는 현재 작업 디렉터리에 `pyproject.toml` / `requirements*.txt` / `poetry.lock` / `uv.lock` 중 하나가 있는 경우

> **의존성 참고:** L1(`pip-audit`) 및 L2(`osv-scanner`)는 각 CLI가 없을 경우 힌트와 함께 정상적으로 SKIP합니다. L3는 항상 활성화된 계층이며 외부 도구가 필요하지 않지만, 정확한 L3-CVE 평가는 `pip install packaging`이 필요합니다.

---

## 위협 인텔리전스

### 알려진 위협 데이터베이스

| ID | 날짜 | 패키지 | 위협 행위자 | 벡터 |
|----|------|---------|-------------|--------|
| **T001** | 2026-03-31 | `[email protected]`, `[email protected]` | UNC1069/DPRK-APT | 유지 관리자 손상 → 유령 의존성 → RAT |
| **T002** | 2018-11 | `[email protected]` | 알 수 없음 | 의존성 주입 → 암호화폐 도난 |
| **T003** | 지속 중 | `crossenv`, `loadsh`, `crypto-js-esm` | 다양함 | 타이포스쿼팅 → 설치 후 데이터 유출 |

### T001 킬 체인 (axios RAT)```
Credential theft → npm publish (bypass CI) → Inject phantom dep (plain-crypto-js)
    → postinstall exec → RAT drop → C2 beacon (sfrclak.com:8000) → Persist

안전한 버전

패키지안전 버전손상된 버전
axios (latest)1.14.0 (정확히) 또는 >=1.14.21.14.1
axios (legacy)0.30.3 (정확히)0.30.4

권고 ID

  • GHSA-fw8c-xr5c-95f9
  • MAL-2026-2306

Devil Gate Framework

SCG는 8개의 게이트로 구성된 검증 프레임워크를 사용하며, 4개의 카테고리로 구성되어 있으며, 수렴 루프를 포함한 직렬 체인으로 실행됩니다.

게이트

#게이트카테고리질문
G1직접 종속성의존성 중독직접 종속성 중 손상된 버전이 있습니까?
G2전이 종속성의존성 중독전이 (간접) 종속성이 손상되었습니까?
G3RAT 아티팩트런타임 손상파일 시스템에 RAT 흔적이 있습니까?
G4Postinstall 스크립트런타임 손상의심스러운 postinstall 스크립트가 있습니까?
G5Lockfile 무결성무결성lockfile이 변조되었습니까?
G6출처무결성패키지가 합법적인 출처/유지 관리자의 것입니까?
G7네트워크환경의심스러운 아웃바운드 연결이 있습니까?
G8CI/CD 강화환경CI/CD가 postinstall을 우회하거나 frozen lockfile을 강제합니까?

체인 실행```

S1: Dependency (G1+G2) → S2: Runtime (G3+G4) → S3: Integrity (G5+G6) → S4: Environment (G7+G8) → Any fail? → Fix → Re-run entire chain → All pass? → "No concerns" → Done → 3 rounds without convergence? → Escalate to user

root@kitploit:~
### 심각도 매트릭스

| 수준 | 조건 | 조치 |
|-------|-----------|--------|
| **심각** | RAT 아티팩트 발견 또는 악성 패키지 설치됨 | 네트워크 격리 → 프로세스 종료 → 지속성 제거 → 재설치 |
| **높음** | 손상된 버전 사용 중 | 안전한 버전 고정 → 재정의 → `npm ci` → 확인 |
| **중간** | 의심스러운 설치 후 스크립트 | 수동 검토 → 허용 목록에 추가 또는 제거 |
| **낮음** | 락파일 차이 | `npm ci` 재동기화 |
| **정상** | 모든 검사 통과 | 조치 불필요 |

> **안전:** 심각/높음 응답은 파괴적인 작업을 수반합니다. SCG는 항상 결과를 제시하고, 사용자에게 명시적 확인을 요청한 후에야 수정을 실행합니다.

---

## 독립 실행형 스크립트

### `scripts/env-scan.sh`

전체 환경 검사. IOC 아티팩트를 확인하고, `$HOME`(구성 가능) 아래의 모든 락파일을 스캔하며, 손상된 패키지를 보고합니다.```bash
./scripts/env-scan.sh [scan_root_dir]
# Default: $HOME

scripts/project-scan.sh

프로젝트 수준 스캔. package.json이 포함된 디렉토리에서 실행하세요.```bash cd my-project /path/to/scripts/project-scan.sh

root@kitploit:~
### `scripts/ioc-scan.sh`

IOC 전용 스캔. 파일 시스템 아티팩트, 실행 중인 프로세스 및 네트워크 연결을 알려진 C2 지표와 비교하여 확인합니다. 크로스 플랫폼 (PowerShell을 통한 macOS/Linux/Windows).```bash
./scripts/ioc-scan.sh

scripts/respond.sh

대화형 수정. 모든 파괴적 작업에는 [y/N] 확인이 필요합니다 (기본값: 아니오).```bash

CRITICAL: Full RAT cleanup (kill → remove → reinstall)

./scripts/respond.sh --critical

HIGH: Pin compromised package to safe version

./scripts/respond.sh --high axios 1.14.0 # npm ./scripts/respond.sh --high event-stream 3.3.5 # npm ./scripts/respond.sh --high urllib3 2.7.0 # python (pip/poetry/uv auto-detected)

root@kitploit:~
`--critical` 모드의 단계:
1. 네트워크 격리 (`/etc/hosts`를 통해 C2 도메인 차단)
2. RAT 프로세스 종료
3. 지속성 제거 (LaunchAgents / crontab / 예약된 작업)
4. `node_modules` 및 Lockfile 삭제, npm 캐시 정리
   - **4b (Python):** pip 캐시 제거 (안전, 자동); venv 재구축은 수동 단계로 표시
5. 의존성 재설치
6. 확인 스캔 프롬프트 (`project-scan.sh` 및/또는 `project-scan-py.sh`)

각 단계는 작업이 실제로 필요한지 확인합니다 (예: 실행 중인 RAT 프로세스가 없으면 "kill"을 건너뜁니다). 그리고 확인을 요청하기 전에 실행될 내용을 정확히 보여줍니다.

**HIGH** 모드의 경우, npm은 자동으로 오버라이드를 적용합니다. Python은 안내됩니다 (관리자 감지 → pin 명령어 출력 → 안전한 단계만 적용). [빠른 시작](#quick-start)의 Python 수정 참고 사항을 확인하세요.

---

## CI/CD 통합

### GitHub Actions```yaml
name: Supply Chain Guard
on:
  pull_request:
    paths:
      - 'package.json'
      - 'package-lock.json'
      - 'yarn.lock'

jobs:
  scg-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies (hardened)
        run: npm ci --ignore-scripts

      - name: Run SCG project scan
        run: |
          chmod +x ./scripts/project-scan.sh
          ./scripts/project-scan.sh

      - name: Run IOC scan
        run: |
          chmod +x ./scripts/ioc-scan.sh
          ./scripts/ioc-scan.sh

강화 권장 사항```bash

Always use in CI:

npm ci --ignore-scripts # Block postinstall execution

npm ci already enforces lockfile integrity by design (errors on mismatch)

Yarn equivalent:

yarn install --frozen-lockfile --ignore-scripts

root@kitploit:~
> **SHA로 고정하고, 태그로 고정하지 마십시오.** 위 예제는 가독성을 위해 `actions/checkout@v4`를 사용했지만, 태그는 이동될 수 있습니다. 프로덕션에서는 전체 커밋 SHA로 고정하여 공급망 공격을 방지하십시오:
> ```yaml
> - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
> - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af  # v4.1.0
> ```

---

## 대응 플레이북

### CRITICAL (RAT 탐지됨) 시

> **당황하지 마십시오.** 다음 단계를 순서대로 수행하십시오. 각 단계마다 명시적 확인이 필요합니다.

1. **네트워크 격리** — `/etc/hosts`를 통해 C2 도메인 차단
2. **프로세스 종료** — RAT 프로세스 종료 (`com.apple.act.mond`, `ld.py`, `wt.exe`)
3. **지속성 제거** — LaunchAgents, crontabs, 예약된 작업 삭제
4. **npm 정리** — `node_modules` 및 `package-lock.json` 제거, npm 캐시 비우기
5. **재설치** — 신규 `npm install && npm ci`
6. **재스캔** — 전체 파이프라인 재실행, CLEAR 예상

### HIGH (손상된 버전 설치됨) 시

1. `respond.sh`를 사용하여 **안전한 버전으로 고정**:   ```bash
   ./scripts/respond.sh --high axios 1.14.0

This adds overrides (npm) or resolutions (yarn) to package.json, reinstalls, and prompts for verification.

  1. Or manually in package.json: ```json { "overrides": { "axios": "1.14.0" } }
    root@kitploit:~

Yarn: { "resolutions": { "axios": "1.14.0" } }

  1. 재설치: npm ci
  2. 확인: 스캔 다시 실행

IOC 참조

파일시스템 아티팩트

플랫폼경로유형
macOS/Library/Caches/com.apple.act.mondRAT binary
macOS~/Library/LaunchAgents/com.apple.act.mond.plistPersistence
Windows%PROGRAMDATA%\wt.exeRAT binary (disguised as Windows Terminal)
Windows%TEMP%\6202033.vbsDropper
Windows%TEMP%\6202033.ps1Dropper
Linux/tmp/ld.pyRAT script
Linux/tmp/.npm-cache/Staging directory

지속성 메커니즘

플랫폼메커니즘식별자
macOSLaunchAgentcom.apple.act.mond
WindowsScheduled TaskWindowsTerminalUpdate
LinuxCrontab entryReferences ld.py or .npm-cache

네트워크 지표

유형값
C2 Domainsfrclak.com
C2 IP142.11.206.73
C2 Port8000

위장 기술

플랫폼위장 대상
macOSApple system process (com.apple.act.mond)
WindowsWindows Terminal (wt.exe in ProgramData)

출력 형식```

SCG ────────────────────────────────── [L1:audit] CLEAR|!!sev [L2:osv] CLEAR|!!vuln-ids [L3:static] CLEAR|!!pkg [IOC:fs] CLEAR|!!C:artifact [IOC:net] CLEAR|!!C:c2 [LF:integ] CLEAR|!!drift ─── Devil Gate(8) ──────────────────── G1:direct_dep G2:transitive G3:rat_fs G4:postinstall G5:lockfile G6:provenance G7:network G8:cicd ─── Devil Chain(R.N) ───────────────── S1:dependency → S2:runtime → S3:integrity → S4:environment ─── Loop ───────────────────────────── R.N → converge|continue [VERDICT] CLEAR|HIGH|CRITICAL ───────────────────────────────────────

root@kitploit:~
---

## 참고 자료

| 출처 | 설명 |
|--------|-------------|
| [Zenn (JP)](https://zenn.dev/gunta/articles/0152eadf05d173) | 일본어 초기 보고서 |
| [Elastic Security Labs](https://elastic.co/security-labs/axios-one-rat-to-rule-them-all) | 기술 분석 (RAT 디스어셈블리, C2 프로토콜, 타임라인) |
| [SANS](https://sans.org/blog/axios-npm-supply-chain-compromise-malicious-packages-remote-access-trojan) | 기업 IR 절차 |
| [Huntress](https://huntress.com/blog/supply-chain-compromise-axios-npm-package) | YARA 시그니처 |
| [Elastic Detections](https://elastic.co/security-labs/axios-supply-chain-compromise-detections) | SIEM 탐지 규칙 (YARA/osquery/KQL) |
| [Semgrep](https://semgrep.dev/blog/2026/axios-supply-chain-incident-indicators-of-compromise-and-how-to-contain-the-threat/) | 정적 분석 규칙, 차단 가이드 |
| [SOCRadar](https://socradar.io/blog/axios-npm-supply-chain-attack-2026-ciso-guide/) | IOC 타임라인이 포함된 CISO 가이드 |
| [Wiz](https://wiz.io/blog/axios-npm-compromised-in-supply-chain-attack) | 클라우드 영향 분석, 컨테이너 스캐닝 |
| [NVD CVE-2026-48710](https://nvd.nist.gov/vuln/detail/CVE-2026-48710) | **기본** — NVD 정식 항목 (게시일 2026-05-26, CVSS 3.1 기본 점수 6.5 MEDIUM, AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N) |
| [GHSA-86qp-5c8j-p5mr](https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr) | **기본** — `Kludex/starlette`에 대한 GitHub Security Advisory (게시일 2026-05-21): "누락된 Host 헤더 검증으로 인해 request.url.path가 오염되어 경로 기반 보안 검사를 우회합니다." |
| [Starlette v1.0.1 릴리스 노트](https://github.com/Kludex/starlette/releases/tag/1.0.1) | **기본** — 수정 릴리스 (게시일 2026-05-21). `starlette>=1.0.1` (그리고 전이적 해결을 위해 `fastapi>=0.119`) 고정 |
| [Starlette BadHost 보도 (KuCoin)](https://kucoin.com/news/flash/starlette-vulnerability-exposes-millions-of-ai-agents-to-hackers) | 보조 — Python 생태계 영향, AI 에이전트 프레이밍 |
| [BadHost AI 에이전트 분석 (CryptoBriefing)](https://cryptobriefing.com/starlette-badhost-vulnerability-ai-agents/) | 보조 — FastAPI / vLLM / LiteLLM 다운스트림 영향 프레이밍 |

---

## Guild-CLI Devil 통합

만약 [guild-cli](https://github.com/eris-ths/guild-cli)(또는 Devil 렌즈 워크플로우를 노출하는 프로젝트)를 사용한다면, SCG는 리뷰 과정에서 보안 렌즈 중 하나로 호출될 수 있습니다.

### 권장 호출 패턴```bash
# Inside a guild-cli review session, in the project root:
~/path/to/supply-chain-guard/scripts/project-scan.sh       # for npm/yarn projects
~/path/to/supply-chain-guard/scripts/project-scan-py.sh    # for Python projects

# Capture the scan output as evidence for a judgment:
SCG_OUTPUT=$(~/path/to/supply-chain-guard/scripts/project-scan.sh 2>&1 || true)

# (a) Record it as a new judgment (fast-track — no prior review needed):
gate fast-track --from "$USER" \
  --action "SCG supply-chain scan (Devil lense)" \
  --reason "$SCG_OUTPUT"

# (b) Or attach it as the Devil lense on an existing review request <id>:
gate review <id> --lense devil --verdict concern --note "$SCG_OUTPUT"

플래그 노트 (guild-cli로 확인): gate review 필수 필요 는 기존 <id>, --lense (guild-cli에서는 "lense"로 표기), 그리고 --verdict (ok / concern / reject) 가 필요합니다. --area 플래그는 없습니다. 검토 객체가 없는 신규 발견 사항을 기록하려면 (a)에서처럼 gate fast-track을 사용하세요.

SCG와 Devil을 함께 사용하는 이유

Devil's Advocate ("壊しにいく")와 SCG는 동일한 태도를 공유합니다: 최악을 가정하고, 체계적으로 스캔한 후, 수렴합니다. SCG는 Devil pass의 공급망 차원을 제공합니다 — 프로젝트의 의존성이 사용자 모르게 무엇을 하고 있는지 — 보안/정확성/아키텍처/사용자/운영과 같은 다른 렌즈와 함께 제공됩니다.

Devil 조합의 한계

  • SCG는 읽기 전용으로 실행됩니다; Devil 렌즈는 수정 사항을 적용하지 않습니다. 수정이 필요할 때는 respond.sh를 별도로 사용하세요 (명시적 사용자 확인 포함)
  • 대규모 저장소에서는 SCG 출력이 Devil 컨텍스트 예산을 초과할 수 있습니다. 필요시 tail -50을 통해 파이프하세요
  • 다국어 저장소의 경우 project-scan.sh와 project-scan-py.sh를 모두 실행하고 결과를 병합하세요

면책 조항

SCG는 탐지 도구이지 보안을 보장하지 않습니다. 이 도구가 할 수 있는 것과 없는 것에 대해 솔직하게 밝히는 것이 설계의 일부입니다.

이 소프트웨어는 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. Supply Chain Guard를 사용함으로써 귀하는 다음 사항을 인지하고 동의하는 것으로 간주됩니다:

  • 전문 보안의 대체물이 아닙니다. SCG는 보조 탐지 도구이며 포괄적인 보안 솔루션이 아닙니다. 전문적인 사고 대응, 엔드포인트 탐지 및 대응(EDR) 소프트웨어, 또는 보안 감사를 대체하지 않습니다.
  • 탐지 보장 없음. CLEAR 판정은 도구의 알려진 위협 패턴과 일치하는 항목이 발견되지 않았음을 의미합니다. 이는 시스템이나 프로젝트가 손상되지 않았다는 것을 의미하지 않습니다. 새로운, 알려지지 않은, 또는 변형된 공격은 탐지되지 않을 수 있습니다.
  • 수정 보장 없음. 제공된 수정 단계(respond.sh)는 특정 위협의 알려진 지표를 해결합니다. 정교한 손상의 모든 흔적을 완전히 제거하지 못할 수 있습니다. 활성 손상이 의심되는 경우 전문 사고 대응 팀에 문의하십시오.
  • 자기 책임 하에 사용하십시오. 저자는 이 도구의 사용 또는 사용 불가능으로 인해 발생하는 손해, 데이터 손실 또는 보안 사고에 대해 책임을 지지 않습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다: 위음성(탐지 누락), 위양성(잘못된 탐지), 또는 수정 스크립트 실행의 예상치 못한 결과.
  • 법적 또는 규정 준수 조언이 아닙니다. 이 도구는 보안 스캐닝에 대한 규정, 규정 준수 또는 법적 요구 사항을 충족하지 않습니다. 규정 준수 요구 사항은 적절한 전문가와 상담하십시오.

한계

SCG가 할 수 없는 일을 이해하는 것은 할 수 있는 일을 아는 것만큼 중요합니다.

탐지 경계

SCG가 확인하는 항목SCG가 확인하지 않는 항목
알려진 손상된 패키지 버전 (하드코딩된 DB)공개 권고가 없는 제로데이 공급망 공격
알려진 악성 패키지 이름정적 목록에 아직 없는 타이포스쿼팅
알려진 위협에 대한 특정 IOC 파일 경로비표준 경로에 드롭된 임의의 악성코드
알려진 C2 IP 주소 및 도메인회전 또는 변경된 C2 인프라
직접 의존성의 postinstall 스크립트정상으로 보이는 스크립트 내 난독화된 악성 코드

위협 데이터베이스 최신성

알려진 위협 데이터베이스(SKILL.md의 D.2)는 수동으로 유지 관리됩니다. 실시간 위협 피드와 연결되어 있지 않습니다. 새로운 공급망 사고가 발견된 후 이 데이터베이스가 업데이트될 때까지 지연 시간이 존재합니다.

  • 마지막 업데이트: 2026-05-27 (v4: Python 지원, BadHost CVE-2026-48710 추가)
  • 범위: 3가지 npm 위협군(T001-T003) + 4가지 Python 하이재킹/타이포스쿼팅 항목 + 1가지 Python CVE 플래그 버전 항목 (BadHost)
  • Python 적용 범위 (v4): 주로 lockfile 기반 스캐닝(uv.lock / poetry.lock / requirements.txt). CVE 플래그 버전 계층은 최선의 노력입니다 — _L3_CVE_LIST 항목과 엄격한 semver 평가를 통해 일치하는 패키지만 플래그하며, 정확한 버전 일치를 위해 packaging이 설치되어 있어야 합니다.

항상 npm advisories, OSV.dev 및 참조 섹션에 나열된 공급업체 보안 블로그와 같은 실시간 소스와 교차 참조하십시오.

위양성 위험

다음 IOC 경로는 드물게 합법적인 소프트웨어와 충돌할 수 있습니다:

IOC 경로잠재적 위양성
/tmp/.npm-cache/비표준 구성에서의 합법적인 npm 캐싱
/tmp/ld.py동일한 파일 이름을 가진 관련 없는 Python 스크립트
프로세스 이름 wt.exeProgramData에 있는 합법적인 Windows 터미널

수정을 실행하기 전에 항상 IOC 결과를 확인하십시오. ioc-scan.sh 스크립트는 사람이 검토할 수 있도록 결과를 보고합니다 — 어떤 조치도 취하지 않습니다. respond.sh 스크립트는 모든 파괴적 작업에 대해 명시적 확인을 요구합니다 (기본값: 아니오). 바로 이러한 위험 때문입니다.

네트워크 스캐닝 한계

  • lsof 기반 네트워크 검사는 현재 활성화된 연결만 탐지합니다. 간헐적으로 연결되는 C2 비콘은 스캔 시점에 활성화되지 않을 수 있습니다.
  • DNS 캐시 검사는 최선의 노력이며 OS에 따라 다릅니다. 지워진 캐시는 과거 연결을 표시하지 않습니다.
  • 암호화되거나 터널링된 C2 트래픽은 포트/IP 매칭만으로는 탐지할 수 없습니다.

범위

  • npm/yarn 및 Python (pip/poetry/uv). cargo, go modules 또는 다른 패키지 생태계는 다루지 않습니다.
  • 알려진 위협만. 이 도구는 패턴 매칭 도구이지 행동 분석 엔진이 아닙니다.
  • 순간 스캔. 결과는 실행 시점의 상태를 반영합니다. 지속적인 모니터링은 반복 실행 또는 CI/CD 통합이 필요합니다.

무결성 확인

SCG 사본이 변조되지 않았는지 확인하십시오. 다음 SHA-256 체크섬을 로컬 파일과 비교하십시오:

```

67ac6216cbe18fdf7050fd267bce4157c016e5c60cd4f84f63b8cf71e80ae3b9 scripts/env-scan.sh da01f8362563b55b1553f923a748f07d24f24522366e0545e6ba0c09801f8e54 scripts/project-scan.sh 77e7ebba6d44ea020e511a49bc2cbc974d01495de40d35e8dfb7fcc93008954b scripts/project-scan-py.sh 82aaa4ed898ce354addc064ccf84cca9a498ef4e90fe58613e1110146577609f scripts/ioc-scan.sh 72ed333838b5584c3b1faf889edc81b0e3195c27396c3b36c62aaebf5f952117 scripts/ioc-scan.ps1 0e6b30e57c959180e22e0ba16f860e9fdc7304045947995084703fb14381d12e scripts/respond.sh a44be79d909058c9d216e7cbc5cca736cf8816a492c8d35a6b90c74c042abf5b SKILL.md

root@kitploit:~
<!-- CHECKSUMS-END -->

검증하려면:```bash
shasum -a 256 scripts/*.sh scripts/*.ps1 SKILL.md

참고: 이 체크섬은 최신 릴리스에 해당합니다. 로컬에서 파일을 수정한 경우 체크섬이 달라집니다. SCG가 업데이트되면 이 섹션도 코드 변경과 함께 업데이트됩니다.


라이선스

MIT


제작: Eris — 당신의 의존성이 다른 사람의 공격 표면이 되어서는 안 되기 때문입니다.

도구 다운로드