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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
supply-chain-monitor — 자동화된 공급망 보안 모니터로, PyPI 및 npm 레지스트리를 폴링하고 새 릴리스를 이전 버전과 비교(diff)하며, LLM 분석을 사용하여 악성 코드 변경을 탐지하고 Slack 알림을 보냅니다. | Kitploit
도구/GitHubGitHub/elastic/supply-chain-monitor
Vulnerability AnalysisCode AnalysisMalware AnalysisThreat IntelligenceSupply Chain SecurityIncident Response
GitHubelastic/supply-chain-monitor

supply-chain-monitor

자동화된 공급망 보안 모니터로, PyPI 및 npm 레지스트리를 폴링하고 새 릴리스를 이전 버전과 비교(diff)하며, LLM 분석을 사용하여 악성 코드 변경을 탐지하고 Slack 알림을 보냅니다.

저장소 보기
52961576개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Supply Chain Monitor

License: MIT

상위 PyPI 및 npm 패키지의 공급망 손상을 자동으로 모니터링합니다. 두 레지스트리를 폴링하여 새 릴리스를 찾고, 각 릴리스를 이전 버전과 비교(diff)한 후, LLM(Cursor Agent CLI 경유)을 사용하여 차이점을 양성 또는 악성으로 분류합니다. 악성 발견 시 Slack 알림이 전송됩니다.

기본적으로 두 생태계가 모두 모니터링됩니다. --no-pypi 또는 --no-npm을 사용하여 하나를 비활성화할 수 있습니다.

작동 방식

각 생태계는 자체 폴링 스레드를 실행하지만 분석 및 알림 파이프라인은 공유합니다.

         ┌─── PyPI ──────────────────────┐   ┌─── npm ───────────────────────┐
         │                               │   │                               │
         │ changelog_since_serial()      │   │ CouchDB _changes feed         │
         │       │                       │   │       │                       │
         │       ▼                       │   │       ▼                       │
         │  ┌────────────┐               │   │  ┌────────────┐               │
         │  │ All PyPI   │─┐             │   │  │ All npm    │─┐             │
         │  │ events     │ │             │   │  │ changes    │ │             │
         │  └────────────┘ ▼             │   │  └────────────┘ ▼             │
         │ hugovk ──► Watchlist          │   │ download-counts ─► Watchlist  │
         │       │                       │   │       │                       │
         │ "new release" events only     │   │ new versions since last epoch │
         └───────────────┬───────────────┘   └───────────────┬───────────────┘
                         │                                   │
                         ▼                                   ▼
               ┌───────────────────┐               ┌───────────────────┐
               │ Download old + new│               │ Download old + new│
               │ (sdist + wheel)   │               │ (tarball)         │
               └───────────────────┘               └───────────────────┘
                         │                                   │
                         └─────────────────┬─────────────────┘
                                           ▼
                                   ┌───────────────┐
                                   │ Unified diff  │
                                   │ report (.md)  │
                                   └───────┬───────┘
                                           ▼
                                   ┌───────────────┐  ◄── LLM analysis
                                   │ Cursor Agent  │      (read-only)
                                   │ CLI (ask mode)│
                                   └───────┬───────┘
                                           │
                                       verdict?
                                           │
                                 malicious │
                                           ▼
                                   ┌───────────────┐
                                   │ Slack alert   │
                                   └───────────────┘

탐지 대상

LLM 분석은 다음을 찾도록 프롬프트됩니다:

  • 난독화된 코드 (base64, exec, eval, XOR, 인코딩된 문자열)
  • 예상치 못한 호스트로의 네트워크 호출
  • 시작/지속성 위치에 파일 시스템 쓰기
  • 프로세스 생성 및 셸 명령
  • 미디어 파일의 스테가노그래피 또는 데이터 은닉
  • 자격 증명 및 토큰 유출
  • 타이포스쿼팅(typosquatting) 지표

전제 조건

  • Python 3.9+ — pip install -r requirements.txt로 런타임 종속성을 설치하세요 (표준 라이브러리로 대부분 커버됨; requests는 Slack 업로드에 사용됨)
  • Cursor Agent CLI — IDE가 아닌 독립 실행형 agent 바이너리

Cursor Agent CLI 설치

Windows (PowerShell):

irm 'https://cursor.com/install?win32=true' | iex

macOS / Linux:

curl https://cursor.com/install -fsS | bash

다음 명령으로 확인하세요:

agent --version

Cursor에 인증되어 있어야 합니다 (agent login 또는 CURSOR_API_KEY 설정).

Slack 설정

Slack 봇 토큰을 etc/slack.json에 배치하세요:

{
    "url": "https://hooks.slack.com/services/...",
    "bot_token": "xoxb-...",
    "channel": "C01XXXXXXXX"
}

봇은 대상 채널에 chat:write 범위가 필요합니다. channel 필드는 알림이 게시되는 Slack 채널 ID입니다.

빠른 시작

# One-shot: analyze releases from the last ~10 minutes
python monitor.py --once

# Continuous: monitor top 1000 packages (both ecosystems), poll every 5 min
python monitor.py --top 1000 --interval 300

# Production: monitor top 15000, alert to Slack
python monitor.py --top 15000 --interval 300 --slack

# npm only, top 5000
python monitor.py --no-pypi --npm-top 5000

# PyPI only
python monitor.py --no-npm

파일 개요

파일목적
monitor.py메인 오케스트레이터 — PyPI + npm 폴링, 차이점 비교, 분석, 알림 (병렬 스레드)
pypi_monitor.py독립 실행형 PyPI 변경 로그 폴러 (탐색용)
package_diff.py모든 PyPI 또는 npm 패키지의 두 버전 다운로드 및 차이점 비교
analyze_diff.pyCursor Agent CLI에 차이점 전송, 판정 분석
top_pypi_packages.py다운로드 수 기준 상위 N개 PyPI 패키지 가져오기 및 목록 출력
slack.pySlack API 클라이언트 (SendMessage, PostFile)
etc/slack.jsonSlack 봇 자격 증명
last_serial.yaml지속형 폴링 상태 (PyPI 시리얼 + npm 시퀀스/에포크)
logs/일일 로그 파일 (monitor_YYYYMMDD.log)

사용 세부 사항

monitor.py — 메인 오케스트레이터

python monitor.py [OPTIONS]

Options:
  --top N          Number of top packages to watch per ecosystem (default: 15000)
  --interval SECS  Poll interval in seconds (default: 300)
  --once           Single pass over recent events, then exit
  --slack          Enable Slack alerts for malicious findings
  --model MODEL    Override LLM model (default: composer-2-fast)
  --debug          Enable DEBUG logging (includes agent raw output)

PyPI options:
  --no-pypi        Disable PyPI monitoring
  --serial N       PyPI changelog serial to start from

npm options:
  --no-npm         Disable npm monitoring
  --npm-top N      Top N npm packages to watch (default: same as --top)
  --npm-seq N      npm replication sequence to start from

PyPI와 npm은 각각 자체 폴링 스레드에서 실행됩니다. 폴링 상태(PyPI 시리얼, npm 시퀀스 + 에포크)는 last_serial.yaml에 저장되어 재시작 후에도 중단된 지점에서 재개됩니다.

PyPI 파이프라인:

  • 상위 N개 패키지를 hugovk/top-pypi-packages 데이터셋에서 워치리스트로 로드
  • PyPI의 XML-RPC API에 연결하여 현재 시리얼 번호를 가져옴
  • --interval초마다 changelog_since_serial() 호출 — 마지막 확인 이후의 모든 이벤트를 반환하는 단일 API 호출
  • 워치리스트와 일치하는 "new release" 이벤트만 필터링
  • 각 새 릴리스마다: 이전 + 새 버전 다운로드(sdist 및 wheel, 둘 다 존재하는 경우), 차이점 비교, LLM 분석, 악성인 경우 Slack 알림

npm 파이프라인:

  • 상위 N개 패키지를 download-counts 데이터셋에서 로드 (npm search API로 폴백)
  • replicate.npmjs.com에서 현재 CouchDB 복제 시퀀스 읽기
  • --interval초마다 마지막 시퀀스 이후의 모든 레지스트리 변경 사항에 대해 _changes 피드 가져오기
  • 변경된 패키지를 워치리스트와 비교하고 마지막 폴링 에포크 이후 게시된 버전 확인
  • 각 새 릴리스마다: npm 레지스트리에서 이전 + 새 tarball 다운로드, 차이점 비교, LLM 분석, 악성인 경우 Slack 알림

모든 출력은 콘솔과 logs/monitor_YYYYMMDD.log 모두에 기록됩니다.

package_diff.py — 패키지 차이점 비교 도구

# Compare two versions from PyPI
python package_diff.py requests 2.31.0 2.32.0

# Compare two versions from npm
python package_diff.py --npm express 4.18.2 4.19.0

# Save to file
python package_diff.py telnyx 2.0.0 2.1.0 -o telnyx_diff.md

# Compare local archives
python package_diff.py --local old.tar.gz new.tar.gz -n mypackage

다운로드는 pip 또는 npm이 아닌 레지스트리 API(PyPI JSON API / npm 레지스트리)를 통해 직접 수행됩니다. 이는 다음을 의미합니다:

  • 다운로드에 pip/npm 의존성 없음
  • 플랫폼 독립적 — Windows에서 Linux 전용 패키지도 다운로드 및 비교 가능
  • PyPI: 휠 우선 (가능한 경우 순수 Python), 실패 시 sdist로 대체
  • npm: 레지스트리에서 tarball 직접 다운로드

analyze_diff.py — LLM 판정

# Analyze a diff file
python analyze_diff.py telnyx_diff.md

# JSON output
python analyze_diff.py telnyx_diff.md --json

# Use a specific model
python analyze_diff.py telnyx_diff.md --model claude-4-opus

Cursor Agent CLI를 --mode ask(읽기 전용) 및 --trust로 실행합니다. 에이전트가 차이점 파일을 읽고 구조화된 판정을 반환합니다.

종료 코드: 0 = 양성, 1 = 악성, 2 = 알 수 없음/오류.

pypi_monitor.py — 독립 실행형 폴러

# See what's being released right now (last ~10 min)
python pypi_monitor.py --once --top 15000

# Continuous monitoring (console output only, no analysis)
python pypi_monitor.py --top 1000 --interval 120

전체 분석 파이프라인을 실행하지 않고 PyPI 릴리스 속도를 탐색하거나 changelog API를 디버깅하는 데 유용합니다.

top_pypi_packages.py — 패키지 순위

도구 다운로드