오픈소스 TruffleHog를 통한 하드코딩된 키 찾기

이군·2025년 5월 29일
0

TruffleHog 완전 가이드: 효율적인 시크릿 스캐너

들어가며: 왜 AI 대신 TruffleHog인가?

이 글을 읽는 분들은 모두들 아시겠지만 AI의 시대입니다.
그래서인지 다들 AI로 이것저것 하는 사례들을 보다가 시크릿 키 탐색을 위해 토큰을 태워서 키를 찾는 사례를 가끔 본 적이 있습니다.

물론 잘못된 방법은 아닙니다만, 파일마다 간단히 돌면서 패턴 검색하면 되는 정도에 AI 토큰을 사용하는 것이 저는 아깝습니다. 특히 수많은 코드나 파일들을 대상으로 하면 라인수가 엄청나니까 토큰도 어마어마하게 많이 듭니다.

이럴 때 사용할 수 있는 시크릿 키 탐색에 특화된 오픈소스 TruffleHog를 소개해보려고 합니다.

TruffleHog란 무엇인가?

TruffleHog는 전체 기술 스택에서 노출된 시크릿을 탐지하고 해결하는 데 도움을 주는 강력한 오픈소스 시크릿 스캐닝 엔진입니다.

핵심 특징

  • 오픈소스 시크릿 스캐너: API 키, 토큰, 비밀번호, 프라이빗 키 등 민감 정보를 코드·아티팩트에서 탐지
  • 다양한 입력 소스: Git (로컬/원격), GitHub Org, GitLab 그룹, 로컬 FS, Docker 이미지, AWS S3/GCS 버킷, CI 런너 아티팩트 등
  • 실시간 검증: 탐지된 자격 증명을 SaaS/API에 즉시 조회해 false positive 최소화
  • 800개 이상의 탐지기: AWS, Google Cloud, Stripe, GitHub 등 다양한 서비스의 시크릿 탐지
  • 고속 검색 엔진: 정규식 + 엔트로피 알고리즘 및 Driftwood 기술로 삭제된/프라이빗 커밋까지 추적

왜 TruffleHog가 특별한가?

TruffleHog의 가장 큰 차별점은 실시간 검증 기능입니다. 발견된 모든 시크릿을 실제 API에 대해 검증하여 활성 여부를 확인합니다. 예를 들어, AWS 자격 증명 탐지기는 GetCallerIdentity API 호출을 수행하여 AWS 자격 증명이 활성화되어 있는지 확인합니다.

설치 방법

TruffleHog는 여러 방법으로 설치할 수 있습니다:

1. Homebrew (macOS/Linux)

brew install trufflesecurity/trufflehog/trufflehog

2. Windows (Chocolatey)

choco install trufflehog

3. Docker (권장)

docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest --help

4. 바이너리 직접 다운로드

curl -Ls https://github.com/trufflesecurity/trufflehog/releases/latest/download/trufflehog_$(uname -s)_$(uname -m).tar.gz | tar -xz

5. Go를 통한 설치

git clone https://github.com/trufflesecurity/trufflehog.git
cd trufflehog
go install

기본 사용법

로컬 리포지토리 전체 스캔

trufflehog git file://$(pwd) --branch main --report trufflehog.json
  • --report 결과를 JSON 파일로 저장하여 SIEM, Jira 등과 연동하기 좋음
  • 기본적으로 HEAD뿐 아니라 모든 커밋 히스토리를 탐색

실제 결과 예시:

🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷

Found verified result 🐷🔑
Detector Type: AWS
Decoder Type: PLAIN
Raw result: AKIAYVP4CIPPERUVIFXG
Line: 4
Commit: fbc14303ffbf8fb1c2c1914e8dda7d0121633aca
File: keys
Email: developer@company.com
Repository: https://github.com/example/repo
Timestamp: 2024-01-15 10:17:40 -0700 PDT

10가지 상세 사용 사례

사례 1: Pre-commit 훅으로 개발 PC 단계 차단

개발자가 커밋하기 전에 자동으로 시크릿을 검사하도록 설정할 수 있습니다.

.pre-commit-config.yaml

repos:
  - repo: https://github.com/trufflesecurity/trufflehog
    rev: v3.88.34          # 사용 중인 최신 태그
    hooks:
      - id: trufflehog
        args: [--fail, --no-update]

설정 후:

# pre-commit 설치 및 설정
pip install pre-commit
pre-commit install

# 이제 git commit 시 자동으로 스캔됩니다
git add .
git commit -m "Add new feature"

→ 개발자가 커밋하기 전에 시크릿이 걸리면 커밋 자체가 block.

사례 2: GitHub Actions로 PR 게이트키핑

name: Secret Scan
on: [pull_request]
permissions:
  contents: read

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: trufflesecurity/trufflehog@main
        with:
          extra_args: --fail --results=verified,unknown
  • --results=verified,unknown 옵션으로 실제 시크릿만 실패로 처리해 FP 감소
  • 조직 차원에서 모든 PR을 자동 검사Shift-Left Security 실현

사례 3: 조직 전체 GitHub 리포지토리 일괄 스캔

export GITHUB_TOKEN=ghp_xxx
trufflehog github --org my-company --since "2024-01-01" --concurrency 10 --results=verified,unknown --json > org-scan.json
  • --since로 "최근 n개월" 코드만 재검사
  • --concurrency 병렬 스레드 수로 속도 ↑; rate-limit 주의
  • 사내 Slack/Webhook으로 org-scan.json 결과 요약 알림

사례 4: S3 버킷 & Terraform state 파일 스캔

# 특정 버킷 스캔
trufflehog s3 --bucket prod-tfstates --prefix states/ --results=verified,unknown --json

# IAM 역할을 통한 스캔
trufflehog s3 --role-arn=arn:aws:iam::123456789012:role/TruffleHogRole
  • AWS 자격 증명, DB 커넥션 스트링 등 IaC 유출 여부 확인
  • --json으로 Athena/QuickSight 대시보드에 적재 가능

사례 5: Docker 이미지 레이어 검사

# 단일 이미지 스캔
trufflehog docker --image myapp:2025-05-29 --results=verified,unknown

# 여러 이미지 스캔 (빌드 시간 단축)
trufflehog docker --image app1:latest --image app2:latest --results=verified,unknown
  • 빌드 중 포함된 .npmrc, .pypirc의 시크릿을 찾아 컨테이너 공급망 방어
  • 대용량 바이너리 스캔 속도 개선 가능

사례 6: 삭제·프라이빗 커밋 인시던트 포렌식

trufflehog github-experimental \
  --repo https://github.com/user/repo.git \
  --object-discovery --results=verified,unknown
  • Cross-Fork Object Reference를 사용해 이미 삭제된 커밋도 수집
  • 침해 사고 후 "누가 언제 어떤 시크릿을 올렸는지" 근거 확보
  • 20분~수 시간 소요되므로 중요한 사고 대응 시에만 사용

사례 7: 커밋 Diff 스캔으로 릴리즈 파이프라인 게이트

# PR이나 특정 브랜치의 변경사항만 스캔
trufflehog git file://. --since-commit main --branch feature-branch --results=verified,unknown --fail

# stdin을 통한 diff 스캔
git diff origin/main...HEAD | trufflehog stdin --fail
  • 새로 추가된 라인만 검사하므로 CI 속도 ↓, Change-based scanning

사례 8: 클라우드 스토리지 통합 스캔

# Google Cloud Storage 스캔
trufflehog gcs --project-id=my-project --cloud-environment --results=verified,unknown

# 여러 클라우드 환경 동시 스캔 스크립트
#!/bin/bash
trufflehog s3 --bucket=prod-bucket --results=verified,unknown --json > s3-results.json &
trufflehog gcs --project-id=prod-project --results=verified,unknown --json > gcs-results.json &
wait
jq -s 'add' s3-results.json gcs-results.json > combined-results.json

사례 9: 커스텀 Detector로 사내 패턴 추가

detectors.yaml

custom_detectors:
  - name: internal-api-key
    regex: 'lnk_[A-Za-z0-9]{32}'
    entropy: 3.5
    keywords:
      - "Authorization"
      - "X-API-Key"
  - name: company-db-password  
    regex: 'db_pwd_[A-Za-z0-9!@#$%^&*()]{16,32}'
    keywords:
      - "DATABASE_PASSWORD"
      - "DB_PASS"
trufflehog git file://. --config detectors.yaml --results=verified,unknown
  • 사내 전용 API 키 포맷, 사설 OAuth 토큰 등을 자체 정책에 맞춰 탐지

사례 10: SIEM 연동으로 Compliance Dashboard

# SARIF 형식으로 출력 (GitHub Security와 호환)
trufflehog git file://. --format sarif > results.sarif

# JSON 형태로 결과 처리 및 분석
trufflehog git file://. --results=verified,unknown --json | jq -c '.SourceMetadata.Data.Git as $git | {
  commit: $git.commit,
  file: $git.file,
  email: $git.email,
  repository: $git.repository,
  secretType: .DetectorName,
  secret: .Raw,
  verified: .Verified,
  timestamp: $git.timestamp
}' > processed-results.json
  • 자동 티켓 발행·통합 대시보드를 통해 지속 모니터링
  • GitHub Security Dashboard, DefectDojo, Elastic SIEM 등으로 인제스트
  • Splunk, ELK Stack과 연동하여 시각화 대시보드 구성

GitLab CI 통합 예시

security-secrets:
  stage: security
  image: alpine:latest
  before_script:
    - apk add --no-cache git curl jq
    - curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin
  script:
    - trufflehog filesystem . --results=verified,unknown --fail --json | jq
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

Jenkins 통합 스캔

# Jenkins 서버 스캔
trufflehog jenkins --url https://jenkins.company.com --username admin --password $JENKINS_PASSWORD --results=verified,unknown

운영 팁 & 모범 사례

항목권장 설정설명
False Positive 최소화--results=verified,unknown, --filter-entropy=4.0, --exclude 패턴실제 위험한 시크릿만 보고
메모리/속도 최적화--concurrency=N, 대형 리포 split 스캔병렬 처리로 성능 향상
결과 관리SARIF/JSON → SIEM 수집, baseline 관리지속적 모니터링 체계
CI/CD 실패 조건--fail, 심각도별 임계값 설정빌드 파이프라인 보안 게이트
시크릿 무시# trufflehog:ignore 주석 활용의도적 테스트 데이터 예외 처리

시크릿 무시 방법

# 테스트용 더미 키 (실제 서비스와 무관)
api_key = "sk-1234567890abcdef"  # trufflehog:ignore

# 또는 파일 단위 제외
echo "test-files/" > .trufflehogiginore

실제 기업 사례 및 ROI

Gett 사례 연구

Gett에서는 TruffleHog를 활용하여 유출된 시크릿을 식별하고 해결했으며, 내부 리소스에 최소한의 부담을 주면서 이를 달성했습니다.

"TruffleHog는 우리가 살펴본 도구 중 단순히 시크릿을 탐지하는 것을 넘어서는 유일한 도구였습니다. TruffleHog는 그것이 활성화된 키인지 허위 양성인지를 검증하고 코드에서 시크릿이 있는 위치를 분리합니다. 이 정보는 자동으로 개발자에게 전달되어 문제를 정확히 찾아 해결할 수 있게 합니다."

보안 효과 및 ROI

1. 보안 사고 예방

  • 실수로 커밋된 API 키로 인한 데이터 유출 방지
  • 클라우드 리소스 무단 사용 방지 (월 수백만원 절약 사례 다수)
  • 규정 준수 요구사항 충족 (GDPR, SOX, PCI-DSS)

2. 개발팀 생산성 향상

  • 자동화된 스캔으로 수동 검토 시간단축
  • 낮은 오탐률로 보안팀 작업 효율성 향상
  • Pre-commit hook을 통한 사전 예방으로 사후 대응 비용 절감

3. 비용 절감

  • 보안 사고로 인한 잠재적 손실 방지
  • 보안 감사 및 규정 준수 비용 절감
  • AI 토큰 사용 대비 99% 이상 비용 절약

고급 기능

1. TruffleHog Analyze

API 키 및 기타 시크릿과 관련된 리소스와 권한을 제공업체의 UI에 접근할 필요 없이 자동으로 식별합니다.

trufflehog analyze --secret-type aws --secret-value AKIA...

2. Driftwood 기술

수백만 개의 GitHub 사용자와 수십억 개의 TLS 인증서에 대해 프라이빗 키를 즉시 검증하는 고급 기술입니다.

3. 다양한 출력 형식

# JSON 형식
trufflehog git file://. --json

# SARIF 형식 (보안 도구 표준)
trufflehog git file://. --format sarif

# GitHub Actions 형식
trufflehog git file://. --github-actions

다른 도구와의 비교

특징TruffleHogGitleaks
실시간 검증✅ 800+ API 검증❌ 패턴 매칭만
스캔 범위Git, 클라우드, 컨테이너 등주로 Git
비용오픈소스 무료오픈소스 무료

마무리

TruffleHog는 DevSecOps 체계의 "첫 관문" 역할을 수행해 개발·배포 전 시크릿 유출을 선제적으로 차단합니다.

위 10가지 시나리오를 팀 워크플로우에 맞춰 조합하면 개발 단계 → PR 게이트 → 배포 → 운영 → 포렌식 전 주기에 걸쳐 실수를 최소화할 수 있습니다.

TruffleHog는 매일 25만 건 이상의 업데이트를 받는 널리 사용되는 오픈소스 보안 프로젝트로, 15,000개 이상의 GitHub 스타를 보유하며 전 세계 주요 조직들의 필수 도구가 되었습니다.

더욱 안전하고 효율적인 개발 환경을 구축하기 위해 TruffleHog를 사용해보시기 바랍니다.


참고 링크:

profile
이군의 보안, 그리고 생각을 다룹니다.

0개의 댓글