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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
layerleak — layerleak Docker Hub 시크릿 스캐너 | Kitploit
도구/GitHubGitHub/brumbelow/layerleak
Vulnerability ScannersContainer SecurityCloud SecurityDevSecOpsSecret DetectionAPI Security
GitHubbrumbelow/layerleak

layerleak

layerleak Docker Hub 시크릿 스캐너

저장소 보기
4221321일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

layerleak OCI 이미지 시크릿 스캐너

made-with-Go

기여 지침은 CONTRIBUTING.md를 확인하세요.

  • 모든 공개 OCI 호환 레지스트리(Docker Hub, GHCR, Quay, GCR, MCR, Amazon ECR Public, 자체 호스팅)에서 작동하는 OCI 이미지 시크릿 스캐너입니다. 이미지 레이어, 구성 메타데이터 및 이미지 기록을 분석한 후 매니페스트 다이제스트별로 중복 제거된 결과를 저장합니다.
  • 기존의 시크릿 스캐너는 종종 컨테이너 이미지를 평면 블롭으로 취급하거나 로컬 Docker 데몬에 의존합니다. 이 프로젝트는 OCI 이미지 내부 구조를 기반으로 설계되었습니다.

Contents

  • 문서 페이지
  • 현재 기능
  • 설치
  • Postgres 영속성
  • 시작 방법
  • HTTP API
  • Docker Compose 배포 (Dockge / Komodo)
  • 라이선스
  • 이 프로젝트 지원

문서 페이지

  • https://brumbelow.github.io/layerleak/docs

게시된 사이트는 .github/workflows/pages.yml에 의해 main 브랜치의 web/에서 빌드됩니다. 문서 소스와 시뮬레이션된 브라우저 데모는 모두 해당 디렉터리 아래에 있습니다.

현재 기능:

  • 모든 OCI 호환 레지스트리(Docker Hub, GHCR, Quay, GCR, MCR, Amazon ECR Public, 자체 호스팅)의 공개 이미지
  • 읽기 전용 스캔
  • 시크릿 검증 없음
  • Docker 데몬 의존성 불필요
  • 매니페스트 인식 및 레이어 인식 스캔
  • 최종 파일시스템 및 삭제된 레이어 아티팩트 스캔
  • 이미지 구성 메타데이터, 환경 변수, 레이블 및 기록 스캔
  • 시크릿 지문별로 결과 중복 제거 및 매니페스트별로 반복되는 동일 컨텍스트 스니펫 병합
  • 60개 이상의 시크릿 유형에 대한 네이티브 탐지기와 폴백 레이어로 TruffleHog 기본값
  • 개발 이미지의 오탐을 줄이기 위해 테스트/픽스처/스펙/e2e/인수 경로 결과 억제

설치

필수 조건:

  • Go 1.25.7+

Go로 설치:

go install github.com/brumbelow/layerleak@latest
layerleak --help

표준 설치 대상은 모듈 루트입니다. 릴리스를 명시적으로 고정하려면:

go install github.com/brumbelow/[email protected]

v1.0.0을 원하는 게시된 v1.x.y 태그로 바꾸세요. GOBIN 또는 GOPATH/bin 디렉터리가 PATH에 있는지 확인하세요.

모듈 경로는 github.com/brumbelow/layerleak이므로 go install @latest는 가장 높은 게시된 v1.x.y 태그로 해석됩니다. v2.x.y 모듈 릴리스는 모듈 경로를 github.com/brumbelow/layerleak/v2로 변경해야 합니다. 모듈로 설치된 바이너리는 layerleak --version을 통해 해석된 모듈 버전을 보고합니다. 로컬 체크아웃 빌드는 체크아웃에 대해 Go가 포함하는 버전을 보고하며, 모듈 버전을 사용할 수 없을 때는 dev로 대체됩니다.

소스에서 빌드:

git clone https://github.com/brumbelow/layerleak.git
cd layerleak
go build -o layerleak .
./layerleak --help

컨테이너 이미지로 API 실행:

docker pull ghcr.io/brumbelow/layerleak:latest
docker run --rm \
  -p 8080:8080 \
  -e LAYERLEAK_DATABASE_URL='postgres://<user>:<password>@<host>:5432/layerleak?sslmode=disable' \
  ghcr.io/brumbelow/layerleak:latest

컨테이너 이미지는 기본적으로 API를 실행하며 LAYERLEAK_API_ADDR=0.0.0.0:8080을 설정합니다.

선택적 환경 구성:

cp .env.example .env

결과 및 데이터베이스 구성:

export LAYERLEAK_LOG_LEVEL=info
export LAYERLEAK_FINDINGS_DIR=findings
export LAYERLEAK_API_ADDR=127.0.0.1:8080
export LAYERLEAK_PERSIST_RAW_SECRETS=0
export LAYERLEAK_TAG_PAGE_SIZE=100
export LAYERLEAK_HTTP_TIMEOUT=30s
export LAYERLEAK_MAX_FILE_BYTES=1048576
export LAYERLEAK_MAX_LAYER_BYTES=536870912
export LAYERLEAK_MAX_LAYER_ENTRIES=50000
export LAYERLEAK_MAX_MANIFEST_BYTES=0
export LAYERLEAK_MAX_CONFIG_BYTES=0
export LAYERLEAK_MAX_TAG_RESPONSE_BYTES=8388608
export LAYERLEAK_MAX_REPOSITORY_TAGS=0
export LAYERLEAK_MAX_REPOSITORY_TARGETS=0
export LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS=2
# 선택적 레지스트리 재정의; 일반적으로 설정하지 않은 상태로 둠.
export LAYERLEAK_REGISTRY_BASE_URL=
export LAYERLEAK_REGISTRY_AUTH_URL=
export LAYERLEAK_DATABASE_URL=postgres://postgres:postgres@localhost:5432/layerleak?sslmode=disable

동일한 변수와 기본값은 .env.example에 있으며, 이는 기본값의 진실 공급원(source of truth)입니다.

변수기본값용도
LAYERLEAK_LOG_LEVELinfo로그 수준: debug, info, warn 또는 error.
LAYERLEAK_FINDINGS_DIR설정되지 않음JSON 결과 파일을 작성할 위치. 설정되지 않은 경우 go.mod를 포함하는 가장 가까운 상위 디렉터리 아래의 findings/로 기본 설정되고, 해당 디렉터리가 없으면 현재 작업 디렉터리로 대체됩니다.
LAYERLEAK_API_ADDR127.0.0.1:8080API 서버의 바인드 주소. 컨테이너 이미지는 이를 0.0.0.0:8080으로 재정의합니다.
LAYERLEAK_PERSIST_RAW_SECRETS01로 설정하면 원시 시크릿 값과 원시 컨텍스트 스니펫을 디스크와 Postgres에 기록합니다. 결과는 기본적으로 수정된 상태로 유지됩니다.
LAYERLEAK_HTTP_TIMEOUT30s모든 레지스트리 호출(매니페스트, 블롭, 태그 페이지, 인증 토큰)에 대한 요청별 타임아웃. 모든 Go 기간(30s, 2m, 1h)을 허용합니다.
LAYERLEAK_MAX_FILE_BYTES1048576 (1 MiB)레이어 내 파일당 버퍼링되는 최대 압축 해제 바이트 수. 이보다 큰 파일은 크기 초과로 건너뜁니다. 0보다 커야 합니다.
LAYERLEAK_MAX_LAYER_BYTES536870912 (512 MiB)레이어당 최대 압축 해제 레이어 스트림 바이트 수. 0은 제한을 비활성화합니다.
LAYERLEAK_MAX_LAYER_ENTRIES50000레이어당 최대 tar 항목 수. 0은 제한을 비활성화합니다.
LAYERLEAK_MAX_MANIFEST_BYTES0최대 매니페스트 본문 바이트 수. 0은 제한을 비활성화합니다.
LAYERLEAK_MAX_CONFIG_BYTES0최대 이미지 구성 본문 바이트 수. 0은 제한을 비활성화합니다.
LAYERLEAK_MAX_TAG_RESPONSE_BYTES8388608 (8 MiB)레지스트리 태그 목록 응답 페이지당 최대 바이트 수. 0은 제한을 비활성화합니다.
LAYERLEAK_TAG_PAGE_SIZE100리포지토리 전체 스캔을 위한 레지스트리 태그 목록 페이지 크기.
LAYERLEAK_MAX_REPOSITORY_TAGS0리포지토리 스캔당 열거되는 최대 태그 수. 0은 제한을 비활성화합니다.
LAYERLEAK_MAX_REPOSITORY_TARGETS0리포지토리 스캔당 해석되는 최대 고유 대상 수. 0은 제한을 비활성화합니다.
LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS2각 레지스트리 요청의 시도 횟수(첫 번째 포함).
LAYERLEAK_REGISTRY_BASE_URL설정되지 않음선택적 재정의. 일반적으로 layerleak은 각 이미지 참조에서 이를 파생합니다. 프록시 또는 대체 엔드포인트를 통해 스캔을 강제로 수행하려는 경우에만 설정하세요.
LAYERLEAK_REGISTRY_AUTH_URL설정되지 않음선택적 재정의. 일반적으로 레지스트리의 WWW-Authenticate 챌린지에서 검색됩니다.
LAYERLEAK_DATABASE_URL설정되지 않음설정된 경우 layerleak이 스캔을 Postgres에 기록하고, 지속성이 성공하지 못하면 명령이 실패합니다.

MAX_* 제한 중 하나라도 양수 값으로 설정되면 초과 시 작업을 자동으로 자르는 대신 명확한 오류와 함께 스캔이 실패합니다.

결과 동작:

  • 실행 가능한 결과는 findings에 남아 있으며 0이 아닌 스캔 종료 상태를 유발합니다.
  • 테스트/예제/데모 플레이스홀더로 의심되는 항목은 억제된 예제 결과로 별도로 출력되며 total_findings에 포함되지 않습니다.
  • 결과 레코드에는 트라이지 및 오탐 검토를 쉽게 하기 위해 disposition, disposition_reason 및 line_number가 포함됩니다.
  • 구성된 운영 제한을 초과하면 layerleak은 실패 전에 생성된 부분 결과를 계속 기록하고 렌더링한 후 스캔이 불완전하므로 상태 1로 종료됩니다.

Postgres 영속성

Layerleak은 migrations/ 아래에 버전 관리된 SQL 마이그레이션을 제공합니다. 마이그레이션은 의도적으로 수동으로 수행됩니다. 스캐너는 스키마를 자동 생성하거나 자동 업그레이드하지 않습니다. Layerleak은 DB 기반 API 및 스캐너 영속성을 위해 PostgreSQL 서버 >= 16.13이 필요합니다.

순서대로 psql로 마이그레이션을 적용하세요:

psql "$LAYERLEAK_DATABASE_URL" -f migrations/0001_initial.up.sql
psql "$LAYERLEAK_DATABASE_URL" -f migrations/0002_finding_occurrence_metadata.up.sql
psql "$LAYERLEAK_DATABASE_URL" -f migrations/0003_scan_runs.up.sql

또는 컨테이너 헬퍼 명령을 사용하여 마이그레이션을 적용하세요:

docker run --rm \
  -e LAYERLEAK_DATABASE_URL="$LAYERLEAK_DATABASE_URL" \
  ghcr.io/brumbelow/layerleak:latest \
  layerleak-migrate-up

layerleak-migrate-up은 마이그레이션이 이미 적용된 경우 다시 실행해도 안전합니다. 부분 마이그레이션 상태가 감지되면 0이 아닌 종료 코드로 종료하고 수동 개입을 요청합니다. 헬퍼는 또한 서버 버전 >= 16.13을 강제하고 번들된 postgresql-client-16이 Ubuntu PGDG 24.04 패키징(.pgdg24.04+)을 버전 >= 16.13-1.pgdg24.04+1에서 사용하는지 확인합니다.

역순으로 마이그레이션을 롤백하세요:

psql "$LAYERLEAK_DATABASE_URL" -f migrations/0003_scan_runs.down.sql
psql "$LAYERLEAK_DATABASE_URL" -f migrations/0002_finding_occurrence_metadata.down.sql
psql "$LAYERLEAK_DATABASE_URL" -f migrations/0001_initial.down.sql

운영 기본값:

  • 마이그레이션은 추가 전용(additive)으로 유지될 것으로 예상됩니다.
  • 스키마는 first_seen_at 및 last_seen_at을 사용하여 현재 중복 제거된 상태를 유지하고, scan_runs에 추가 전용 스캔 기록도 저장합니다.
  • 현재 스캔에서 접촉한 태그에 대해 태그 매핑이 새로 고쳐집니다.
  • 결과는 (manifest_digest, fingerprint)로 정규적으로 중복 제거되며, 지속성 전에 반복되는 동일 컨텍스트 스니펫이 병합됩니다.
  • 스캔 기록은 원시 값이나 원시 스니펫이 아닌 공개 결과 JSON의 수정된 스냅샷을 저장합니다.

시크릿 안전 참고:

  • Postgres 영속성은 기본적으로 수정된 미리보기를 저장합니다.
  • LAYERLEAK_PERSIST_RAW_SECRETS=1이면 Postgres에 원시 결과 값과 원시 스니펫도 저장됩니다.
  • scan_runs.result_json 스냅샷은 수정된 상태로 유지됩니다.
  • layerleak을 위해 전용 데이터베이스 또는 스키마를 사용하세요.
  • 가장 안전한 제거 경로를 위해 개별 행을 정밀하게 삭제하려고 시도하기보다는 전용 데이터베이스 또는 스키마를 삭제하세요.

시작 방법

CLI 도움말 표시:

layerleak --help
layerleak scan --help

help_output

지원되는 모든 레지스트리에서 공개 OCI 이미지에 대해 스캔 실행:

도구 다운로드