Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Package-Inferno — 커뮤니티를 위한 공용 패키지 스캐너 | Kitploit
도구/GitHubGitHub/mhaggis/package-inferno
Static AnalysisVulnerability ScannersContainer SecurityMalware AnalysisCloud SecurityDevSecOpsSecret DetectionThreat IntelligenceSupply Chain Security
GitHubmhaggis/package-inferno

Package-Inferno

커뮤니티를 위한 공용 패키지 스캐너

133229개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
저장소 보기
공유

PackageInferno

PackageInferno 로고

간단하면서도 강력한, Docker 우선 npm 공급망 스캐너입니다. 하나의 compose 파일로 다음을 실행합니다:

  • Enumerator → 패키지 큐 구축
  • Fetcher → tarball 다운로드 (선택적으로 S3에 업로드)
  • Analyzer → 정적 분석 + 선택적 YARA
  • Postgres → 결과 저장용 로컬 DB
  • Streamlit Dashboard → http://localhost:8501 에서 결과 시각화

컨테이너 전용 에디션입니다. 이 프로젝트는 EC2, SQS, RDS를 사용하여 확장 가능하게 구축할 수 있으며, 대부분의 설정이 이미 도구 세트에 포함되어 있습니다.


제공 기능

  • Docker에서 종단 간 파이프라인 (호스트에 Docker 외의 설치 불필요)
  • scan.yml을 통해 설정 가능한 규칙 (허용 목록, 임계값, YARA)
  • 로컬 Postgres 스키마 + 스캔 기록 (scan_runs) 바로 사용 가능
  • 선택적 S3 업로드 (tarball 및 결과, 자격 증명은 ~/.aws 사용)
  • Streamlit 대시보드: 검색, 드릴다운, 분석

구성

  • docker-compose.yml – 서비스: db, enumerator, fetcher, analyzer, dashboard, init-db
  • enumerator/ – NDJSON 큐를 구축하는 Node 워커
  • fetcher/ – tarball을 다운로드하는 Node 워커 (+ S3 업로드 가능)
  • analyzer/ – Python 정적 분석기 (+ 선택적 YARA 인라인)
  • dashboard/ – Streamlit 앱 (포트 8501)
  • infra/migrations.sql – 핵심 DB 스키마 (packages, versions, findings, scores, indexes)
  • infra/20251106_scan_runs.sql – 스캔 기록 테이블
  • scan.yml – 분석 설정 (규칙, 점수, 허용 목록, YARA)
  • scripts/run_pipeline.sh – enumerate → fetch → analyze 실행
  • scripts/init_db.sh – DB 스키마 초기화
  • scripts/test_setup.sh – 자동 설정 검증
  • SCANNING_GUIDE.md – 상세 스캔 전략 및 예제

빠른 시작 (로컬)

필수: Docker Desktop (또는 엔진) + Compose v2.

한 줄 설치

curl -fsSL https://raw.githubusercontent.com/MHaggis/Package-Inferno/main/install.sh | bash

이 명령어는 리포지토리를 ~/package-inferno에 클론하고 시작 방법을 안내합니다.

옵션 A: 미리 빌드된 이미지 사용 (가장 빠름)

GitHub Container Registry에서 미리 빌드된 컨테이너를 가져와 실행:

# 설정 파일 및 스크립트를 위해 리포지토리 클론
git clone https://github.com/MHaggis/Package-Inferno.git
cd Package-Inferno

# 미리 빌드된 이미지로 실행
docker compose -f docker-compose.ghcr.yml up -d db
./scripts/init_db.sh
SEEDS="lodash,express" docker compose -f docker-compose.ghcr.yml run --rm enumerator
docker compose -f docker-compose.ghcr.yml run --rm fetcher
docker compose -f docker-compose.ghcr.yml run --rm analyzer

사용 가능한 이미지:

  • ghcr.io/mhaggis/package-inferno/enumerator:main
  • ghcr.io/mhaggis/package-inferno/fetcher:main
  • ghcr.io/mhaggis/package-inferno/analyzer:main

옵션 B: 소스에서 빌드

자동 설정 검증

테스트 스크립트를 실행하여 설치를 검증:

./scripts/test_setup.sh

다음을 검사:

  • ✓ Docker 및 Docker Compose 확인
  • ✓ 데이터베이스 시작 및 초기화
  • ✓ 테스트 스캔 실행 (2개 패키지)
  • ✓ 결과가 올바르게 저장되었는지 확인

수동 설정

  1. Postgres 시작 및 스키마 초기화:
docker compose up -d db
./scripts/init_db.sh
  1. 파이프라인 실행:
./scripts/run_pipeline.sh
  1. 대시보드 실행:
docker compose up -d dashboard
# http://localhost:8501 열기

결과는 ./out/findings/*.findings.json 및 DB가 활성화된 경우 findings 테이블에 저장됩니다.


스캔 모드

PackageInferno는 목표에 따라 여러 스캔 전략을 지원합니다:

모드사용 사례속도범위명령
특정 시드알려진 패키지 테스트/조사가장 빠름대상 지정SEEDS="pkg1,pkg2"
소규모 배치설정 검증, 샘플 스캔빠름10-100개 패키지MAX_CHUNKS=2 CHUNK_LIMIT=10
전체 레지스트리포괄적 공급망 감사수시간~수일2M+ 패키지MAX_CHUNKS=0 CHUNK_LIMIT=100
변경 피드새 릴리스 모니터링 (기본 포함)실시간최근 업데이트내장

1. 특정 패키지 스캔 (테스트 권장)

분석하려는 특정 패키지를 대상으로 설정:

# 시드로 한 번에 실행
export SEEDS="lodash,express,axios"
./scripts/run_pipeline.sh

# 또는 파일에서 읽기
echo -e "react\nvue\nangular" > packages.txt
export SEEDS_FILE=packages.txt
./scripts/run_pipeline.sh

초기 테스트 방법: SEEDS="is-odd,is-even" 사용하여 빠르게 검증.

2. npm 레지스트리에서 스캔 (_all_docs)

npm 레지스트리에서 페이지네이션으로 패키지 스캔:

# 이전 실행 결과 정리
rm -rf downloads/* out/*

# 페이지 2개, 페이지당 10개 패키지 (총 20개)
export MAX_CHUNKS=2        # 페이지 수
export CHUNK_LIMIT=10      # 페이지당 패키지 수
unset SEEDS                # 중요: 시드 모드 비활성화

# 각 단계를 개별적으로 실행하여 가시성 확보
docker compose run --rm enumerator  # 패키지 발견 및 큐잉
docker compose run --rm fetcher     # tarball 다운로드
docker compose run --rm analyzer    # 위협 스캔

출력 예시:

config: chunkLimit=10, maxChunks=2
checking recent changes feed...
changes feed: enqueued 2 new versions
enumerating via _all_docs (fresh scan)
page 1/2 count: 10
page 2/2 count: 10
done, enqueued 22 (22 new versions)

3. 연속 모니터링 (무제한 스캔)

전체 npm 레지스트리 스캔:

export MAX_CHUNKS=0        # 0 = 무제한
export CHUNK_LIMIT=100     # 효율성을 위해 큰 배치
./scripts/run_pipeline.sh

경고: 수시간/일 동안 실행되며 수십만 개의 패키지를 스캔합니다. 디스크 공간과 데이터베이스 크기를 모니터링하세요.

4. 중단된 스캔 재개

Enumerator는 상태를 ./out/enumerator_state.json에 커서 위치와 함께 저장합니다:

{
  "last_seq": "0",
  "last_startkey": "package-name",
  "last_run": "2025-11-23T19:24:49.123Z",
  "last_processed": 22,
  "last_new": 22
}

파이프라인을 다시 실행하면 자동으로 마지막 커서에서 재개됩니다:

./scripts/run_pipeline.sh  # 자동 재개

새로 스캔하려면:

rm -f out/enumerator_state.json
./scripts/run_pipeline.sh

스캔 결과 예시

22개 패키지의 2페이지 스캔 결과, PackageInferno가 탐지한 내용:

-- 점수별 상위 의심 패키지
SELECT p.name, s.score, s.label, COUNT(f.id) as findings 
FROM packages p 
JOIN versions v ON p.id = v.package_id 
JOIN scores s ON v.id = s.version_id 
LEFT JOIN findings f ON v.id = f.version_id 
GROUP BY p.name, s.score, s.label 
ORDER BY s.score DESC;

-- 결과:
   name                | score | label      | findings
-----------------------+-------+------------+----------
 rendition             | 606   | malicious  | 153
 vs-deploy             | 454   | malicious  | 119
 --123hoodmane-pyodide | 213   | malicious  | 46

rendition이 왜 의심스러운가?

  • 57 × url_outside_allowlist - 허용되지 않은 도메인
  • 46 × suspicious_pattern - 셸/eval 패턴
  • 12 × advanced_obfuscation - 16진수 인코딩, XOR, 문자열 배열
  • 6 × big_base64_blob - 대형 Base64 페이로드
  • 18 × url_in_code - 내장 URL

scan.yml에서 설정된 점수 시스템은 이러한 결과를 집계하여 위험 점수와 레이블(clean, suspicious, malicious)을 생성합니다.


결과 탐색

대시보드 사용 (권장)

docker compose up -d dashboard 실행 후 http://localhost:8501 열기

기능:

  • 📊 개요 탭: 요약 통계, 점수 분포 차트
  • 🔍 검색 탭: 패키지 이름 검색, 위험 레이블 필터
  • ⚠️ 고위험 탭: 드릴다운이 가능한 악성 패키지 목록
  • 🎯 C2 분석: 알려진 데이터 유출 엔드포인트가 있는 패키지
  • 📈 분석 탭: 추세, 일반 규칙, 시계열 분석

데이터베이스 쿼리 사용

직접 SQL로 맞춤 분석:

# 데이터베이스 연결
docker exec -it pi-postgres psql -U piuser -d packageinferno

유용한 쿼리:

-- 자격 증명 도용 시도가 있는 패키지
SELECT DISTINCT p.name, v.version, s.score
FROM packages p
JOIN versions v ON p.id = v.package_id
JOIN findings f ON v.id = f.version_id
JOIN scores s ON v.id = s.version_id
WHERE f.rule = 'env_snoop'
ORDER BY s.score DESC;

-- 발견된 모든 C2/웹훅 대상
SELECT p.name, f.details->>'endpoints' as c2_endpoints
FROM packages p
JOIN versions v ON p.id = v.package_id
JOIN findings f ON v.id = f.version_id
WHERE f.rule = 'c2_webhook';

-- 타입스쿼팅 시도
SELECT 
  p.name,
  f.details->>'target_package' as impersonating,
  f.details->>'similarity' as similarity_pct,
  f.details->>'typosquat_type' as attack_type
FROM packages p
JOIN versions v ON p.id = v.package_id
JOIN findings f ON v.id = f.version_id
WHERE f.rule = 'typosquat_detected'
ORDER BY (f.details->>'similarity')::float DESC;

-- 네이티브 바이너리가 있는 패키지
SELECT p.name, f.details->>'path' as binary_path
FROM packages p
JOIN versions v ON p.id = v.package_id
JOIN findings f ON v.id = f.version_id
WHERE f.rule = 'native_binary_present';

JSON 파일 사용

결과는 ./out/findings/ 아래에 구조화된 JSON으로도 저장됩니다:

# 특정 패키지 결과 보기
cat out/findings/[email protected] | jq .

# 심각도별 결과 개수
jq -r '.findings[].severity' out/findings/*.findings.json | sort | uniq -c

# 발견된 모든 C2 URL 추출
jq -r '.findings[] | select(.rule=="c2_webhook") | .details.full_urls[]' out/findings/*.findings.json

도구 다운로드