이 글을 읽는 분들은 모두들 아시겠지만 AI의 시대입니다.
그래서인지 다들 AI로 이것저것 하는 사례들을 보다가 시크릿 키 탐색을 위해 토큰을 태워서 키를 찾는 사례를 가끔 본 적이 있습니다.
물론 잘못된 방법은 아닙니다만, 파일마다 간단히 돌면서 패턴 검색하면 되는 정도에 AI 토큰을 사용하는 것이 저는 아깝습니다. 특히 수많은 코드나 파일들을 대상으로 하면 라인수가 엄청나니까 토큰도 어마어마하게 많이 듭니다.
이럴 때 사용할 수 있는 시크릿 키 탐색에 특화된 오픈소스 TruffleHog를 소개해보려고 합니다.
TruffleHog는 전체 기술 스택에서 노출된 시크릿을 탐지하고 해결하는 데 도움을 주는 강력한 오픈소스 시크릿 스캐닝 엔진입니다.
TruffleHog의 가장 큰 차별점은 실시간 검증 기능입니다. 발견된 모든 시크릿을 실제 API에 대해 검증하여 활성 여부를 확인합니다. 예를 들어, AWS 자격 증명 탐지기는 GetCallerIdentity
API 호출을 수행하여 AWS 자격 증명이 활성화되어 있는지 확인합니다.
TruffleHog는 여러 방법으로 설치할 수 있습니다:
brew install trufflesecurity/trufflehog/trufflehog
choco install trufflehog
docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest --help
curl -Ls https://github.com/trufflesecurity/trufflehog/releases/latest/download/trufflehog_$(uname -s)_$(uname -m).tar.gz | tar -xz
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 등과 연동하기 좋음실제 결과 예시:
🐷🔑🐷 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
개발자가 커밋하기 전에 자동으로 시크릿을 검사하도록 설정할 수 있습니다.
.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.
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 감소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 주의org-scan.json
결과 요약 알림# 특정 버킷 스캔
trufflehog s3 --bucket prod-tfstates --prefix states/ --results=verified,unknown --json
# IAM 역할을 통한 스캔
trufflehog s3 --role-arn=arn:aws:iam::123456789012:role/TruffleHogRole
--json
으로 Athena/QuickSight 대시보드에 적재 가능# 단일 이미지 스캔
trufflehog docker --image myapp:2025-05-29 --results=verified,unknown
# 여러 이미지 스캔 (빌드 시간 단축)
trufflehog docker --image app1:latest --image app2:latest --results=verified,unknown
.npmrc
, .pypirc
의 시크릿을 찾아 컨테이너 공급망 방어trufflehog github-experimental \
--repo https://github.com/user/repo.git \
--object-discovery --results=verified,unknown
# PR이나 특정 브랜치의 변경사항만 스캔
trufflehog git file://. --since-commit main --branch feature-branch --results=verified,unknown --fail
# stdin을 통한 diff 스캔
git diff origin/main...HEAD | trufflehog stdin --fail
# 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
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
# 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
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 서버 스캔
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
Gett에서는 TruffleHog를 활용하여 유출된 시크릿을 식별하고 해결했으며, 내부 리소스에 최소한의 부담을 주면서 이를 달성했습니다.
"TruffleHog는 우리가 살펴본 도구 중 단순히 시크릿을 탐지하는 것을 넘어서는 유일한 도구였습니다. TruffleHog는 그것이 활성화된 키인지 허위 양성인지를 검증하고 코드에서 시크릿이 있는 위치를 분리합니다. 이 정보는 자동으로 개발자에게 전달되어 문제를 정확히 찾아 해결할 수 있게 합니다."
1. 보안 사고 예방
2. 개발팀 생산성 향상
3. 비용 절감
API 키 및 기타 시크릿과 관련된 리소스와 권한을 제공업체의 UI에 접근할 필요 없이 자동으로 식별합니다.
trufflehog analyze --secret-type aws --secret-value AKIA...
수백만 개의 GitHub 사용자와 수십억 개의 TLS 인증서에 대해 프라이빗 키를 즉시 검증하는 고급 기술입니다.
# JSON 형식
trufflehog git file://. --json
# SARIF 형식 (보안 도구 표준)
trufflehog git file://. --format sarif
# GitHub Actions 형식
trufflehog git file://. --github-actions
특징 | TruffleHog | Gitleaks |
---|---|---|
실시간 검증 | ✅ 800+ API 검증 | ❌ 패턴 매칭만 |
스캔 범위 | Git, 클라우드, 컨테이너 등 | 주로 Git |
비용 | 오픈소스 무료 | 오픈소스 무료 |
TruffleHog는 DevSecOps 체계의 "첫 관문" 역할을 수행해 개발·배포 전 시크릿 유출을 선제적으로 차단합니다.
위 10가지 시나리오를 팀 워크플로우에 맞춰 조합하면 개발 단계 → PR 게이트 → 배포 → 운영 → 포렌식 전 주기에 걸쳐 실수를 최소화할 수 있습니다.
TruffleHog는 매일 25만 건 이상의 업데이트를 받는 널리 사용되는 오픈소스 보안 프로젝트로, 15,000개 이상의 GitHub 스타를 보유하며 전 세계 주요 조직들의 필수 도구가 되었습니다.
더욱 안전하고 효율적인 개발 환경을 구축하기 위해 TruffleHog를 사용해보시기 바랍니다.
참고 링크: