본문으로 건너뛰기

© 2026 Molayo

GitHub릴리즈2026. 05. 19. 01:04

유출된 자격 증명을 탐지하는 강력한 보안 도구 TruffleHog

요약

TruffleHog는 Git, Slack, Jira 등 다양한 플랫폼에서 API 키, 데이터베이스 비밀번호와 같은 유출된 자격 증명을 탐지하고 분류하는 강력한 보안 도구입니다. 단순 탐지를 넘어 발견된 비밀 정보의 활성화 여부와 권한 범위를 직접 검증하는 기능을 제공합니다.

핵심 포인트

  • Git, 채팅, 위키, 로그 등 광범위한 소스에서 비밀 정보 탐지 가능
  • 800개 이상의 비밀 정보 유형을 식별하고 특정 ID로 분류
  • 발견된 자격 증명이 실제로 유효한지 확인하는 검증(Validation) 기능 제공
  • 자격 증명의 생성자, 접근 가능한 리소스, 권한 범위까지 상세 분석
  • 오픈 소스 프로젝트와 엔터프라이즈 제품을 병행 운영

유출된 자격 증명(Credentials)을 찾으세요.

...그리고 그 이상

TruffleHog와 그 기능 및 역량에 대해 더 자세히 알아보려면 제품 페이지를 방문하세요.

**Git, Jira, Slack, Confluence, Microsoft Teams, Sharepoint (등등)**에서 자격 증명을 지속적으로 모니터링하는 데 관심이 있으신가요? 이를 도와줄 엔터프라이즈 제품이 준비되어 있습니다! https://trufflesecurity.com/trufflehog-enterprise 에서 더 자세히 알아보세요.

저희는 엔터프라이즈 제품에서 발생하는 수익을 커뮤니티 전체가 혜택을 누릴 수 있는 더 멋진 오픈 소스 프로젝트들을 지원하는 데 사용합니다.

TruffleHog는 가장 강력한 비밀 정보(Secrets) 탐지(Discovery), 분류(Classification), 검증(Validation),분석(Analysis) 도구입니다. 여기서 비밀 정보(Secret)란 머신이 다른 머신에 자신을 인증하기 위해 사용하는 자격 증명(Credential)을 의미합니다. 여기에는 API 키, 데이터베이스 비밀번호, 개인 암호화 키(Private encryption keys) 등이 포함됩니다.

TruffleHog는 Git, 채팅, 위키(Wikis), 로그(Logs), API 테스트 플랫폼, 오브젝트 스토어(Object stores), 파일 시스템(Filesystems)을 포함한 다양한 곳에서 비밀 정보를 찾을 수 있습니다.

TruffleHog는 800개 이상의 비밀 정보 유형을 분류하여, 그것이 속한 특정 ID로 매핑합니다. AWS 비밀 정보인가요? Stripe 비밀 정보인가요? Cloudflare 비밀 정보인가요? Postgres 비밀번호인가요? SSL 개인 키(SSL Private key)인가요? 때로는 육안으로 확인하기 어려울 수 있으므로, TruffleHog는 발견된 모든 것을 분류합니다.

TruffleHog가 분류할 수 있는 모든 비밀 정보에 대해, 해당 비밀 정보가 실제로 활성화되어 있는지 확인하기 위해 직접 로그인할 수도 있습니다. 이 단계는 현재 활성화된 위험이 있는지 여부를 파악하는 데 매우 중요합니다.

가장 흔하게 유출되는 20여 가지의 자격 증명 유형에 대해서는, 비밀 정보의 로그인 가능 여부를 확인하기 위해 단 한 번의 요청을 보내는 대신, TruffleHog는 여러 요청을 보내 해당 비밀 정보에 대해 알 수 있는 모든 것을 파악할 수 있습니다. 누가 생성했는가? 어떤 리소스(Resources)에 접근할 수 있는가? 해당 리소스에 대해 어떤 권한(Permissions)을 가지고 있는가?

질문이 있으신가요? 피드백이 있으신가요? Slack이나 Discord로 오셔서 저희와 함께 소통하세요.

Slack 커뮤니티 참여하기

Secret Scanning Discord 참여하기

docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --org=trufflesecurity

여러 옵션이 제공됩니다:

brew install trufflehog

다음 명령을 실행하기 전에 Docker 엔진이 실행 중인지 확인하세요:

docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

docker run --rm -it -v "%cd:/=\%:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

docker run --rm -it -v "${PWD}:/pwd" trufflesecurity/trufflehog github --repo https://github.com/trufflesecurity/test_keys

docker run --platform linux/arm64 --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

https://github.com/trufflesecurity/trufflehog/releases에서 다운로드 및 압축 해제하세요.

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

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -v -b /usr/local/bin

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin <릴리스 태그 예: v3.56.0>

모든 아티팩트에는 체크섬이 적용되며, 결과 체크섬 파일은 cosign을 사용하여 서명됩니다.

서명을 확인하려면 다음 도구가 필요합니다:

확인 단계는 다음과 같습니다:

원하는 아티팩트 파일과 릴리스 페이지에서 다음 파일을 다운로드하세요.

  • trufflehog_{version}_checksums.txt

  • trufflehog_{version}_checksums.txt.pem

  • trufflehog_{version}_checksums.txt.sig

서명 확인:

cosign verify-blob <path to trufflehog_{version}checksums.txt>
--certificate <path to trufflehog
{version}checksums.txt.pem>
--signature <path to trufflehog
{version}_checksums.txt.sig>
--certificate-identity-regexp 'https://github\.com/trufflesecurity/trufflehog/\.github/workflows/.+'
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"

서명 확인 후, 다운로드한 아티팩트와 SHA256 합계가 일치하는지 검증할 수 있습니다:

sha256sum --ignore-missing -c trufflehog_{version}_checksums.txt

여기서 {version}을 다운로드된 파일의 버전으로 교체하세요.

대안적으로, 설치 스크립트를 사용하는 경우 -v 옵션을 전달하여 서명 검증을 수행할 수 있습니다. 이 기능은 설치 스크립트 실행 전에 Cosign 바이너리가 설치되어 있어야 합니다.

명령어:

trufflehog git https://github.com/trufflesecurity/test_keys --results=verified

예상 출력:

🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷
Found verified result 🐷🔑
Detector Type: AWS
...

trufflehog github --org=trufflesecurity --results=verified

명령어:

trufflehog git https://github.com/trufflesecurity/test_keys --results=verified --json

예상 출력:

{"SourceMetadata":{"Data":{"Git":{"commit":"fbc14303ffbf8fb1c2c1914e8dda7d0121633aca","file":"keys","email":"counter <counter@counters-MacBook-Air.local>","repository":"https://github.com/trufflesecurity/test_keys","timestamp":"2022-06-16 10:17:40 -0700 PDT","line":4}}},"SourceID":0,"SourceType":16,"SourceName":"trufflehog - git","DetectorType":2,"DetectorName":"AWS","DecoderName":"PLAIN","Verified":true,"Raw":"AKIAYVP4CIPPERUVIFXG","Redacted":"AKIAYVP4CIPPERUVIFXG","ExtraData":{"account":"595918472158","arn":"arn:aws:iam::595918472158:user/canarytokens.com@@mirux23ppyky6hx3l6vclmhnj","user_id":"AIDAYVP4CIPPJ5M54LRCY"},"StructuredData":null}
...

`trufflehog github --repo=https://github.com/trufflesecurity/test_keys --issue-comments --pr-comments

trufflehog s3 --bucket=<버킷 이름> --results=verified,unknown

trufflehog s3 --role-arn=<iam 역할 ARN>

docker run --rm -v "$HOME/.ssh:/root/.ssh:ro" trufflesecurity/trufflehog:latest git ssh://github.com/trufflesecurity/test_keys

trufflehog filesystem path/to/file1.txt path/to/file2.txt path/to/dir`

Git 리포지토리를 클론합니다. 예시로 테스트 키 리포를 사용합니다.

git clone git@github.com:trufflesecurity/test_keys.git

부모 디렉토리(git 리포 외)에서 trufflehog을 실행합니다.

trufflehog git file://test_keys --results=verified,unknown

로컬 스캐닝 시 악성 git 설정을 방지하기 위해 (CVE-2025-41390 참조), TruffleHog은 스캔 전에 로컬 git 리포지토리를 임시 디렉토리에 클론합니다. 이는 Git의 보안 모범 사례를 따릅니다. 만약 리포지토리를 클론할 사용자 지정 경로를 지정하고 싶다면 --clone-path 플래그를 사용할 수 있습니다. 로컬 클로닝 프로세스를 건너뛰고 리포지토리를 직접 스캔하고 싶다면 (신뢰하는 리포에만 사용), --trust-local-git-config 플래그를 사용할 수 있습니다.

trufflehog gcs --project-id=<프로젝트 ID> --cloud-environment --results=verified

여러 이미지를 스캔하려면 --image 플래그를 여러 번 사용합니다.

# 원격 레지스트리에서 스캔하는 방법
trufflehog docker --image trufflesecurity/secrets --results=verified
# 로컬 docker 데몬에서 스캔하는 방법
...

--since-commit 플래그를 사람들이 병합하는 기본 브랜치(예:

--workspace-id, --collection-id, --environment 플래그 (flags)를 여러 번 사용하여 여러 대상을 스캔할 수 있습니다.

trufflehog postman --token=<postman api token> --workspace-id=<workspace id>

trufflehog jenkins --url https://jenkins.example.com --username admin --password admin

TruffleHog를 사용하여 로컬 클러스터 (local cluster)에 인증하는 방법에는 두 가지가 있습니다: (1) 사용자 이름과 비밀번호, (2) 서비스 토큰 (service token).

trufflehog elasticsearch --nodes 192.168.14.3 192.168.14.4 --username truffle --password hog

trufflehog elasticsearch --nodes 192.168.14.3 192.168.14.4 --service-token ‘AAEWVaWM...Rva2VuaSDZ’

Elastic Cloud의 클러스터를 스캔하려면 Cloud ID와 API 키가 필요합니다.

trufflehog elasticsearch \
--cloud-id 'search-prod:dXMtY2Vx...YjM1ODNlOWFiZGRlNjI0NA==' \
--api-key 'MlVtVjBZ...ZSYlduYnF1djh3NG5FQQ=='

다음 명령은 GitHub 저장소 (repository)에서 삭제되거나 숨겨진 커밋 (commits)을 열거 (enumerate)한 다음, 해당 커밋들에서 비밀 정보 (secrets)를 스캔합니다. 이는 알파 버전 (alpha release) 기능입니다.

trufflehog github-experimental --repo https://github.com/<USER>/<REPO>.git --object-discovery

일반적인 TruffleHog 출력 결과 외에도, --object-discovery 플래그는 새로운 $HOME/.trufflehog 디렉토리에 valid_hidden.txtinvalid.txt라는 두 개의 파일을 생성합니다. 이 파일들은 커밋 열거 과정 동안 상태를 추적하고, 사용자에게 모든 숨겨지거나 삭제된 커밋의 전체 목록(valid_hidden.txt)을 제공하는 데 사용됩니다. 스캔 후 이 파일들을 자동으로 삭제하려면 --delete-cached-data 플래그를 추가하십시오.

참고: 이 방법을 사용하여 저장소의 모든 유효한 커밋을 열거하는 데는 저장소 크기에 따라 20분에서 몇 시간이 소요될 수 있습니다. 열거 작업이 얼마나 걸릴지 실시간으로 확인할 수 있도록 진행 표시줄 (progress bar)을 추가했습니다. 실제 비밀 정보 스캔 (secret scanning)은 매우 빠르게 실행됩니다.

Cross Fork Object References에 대한 자세한 내용은 저희 블로그 포스트를 읽어보시기 바랍니다.

trufflehog huggingface --model <model_id> --space <space_id> --dataset <dataset_id>

trufflehog huggingface --org <orgname> --user <username>

(선택적으로) 조직 또는 사용자를 스캔할 때, --skip-models,

, --skip-datasets`,

, --skip-spaces`

또는 특정 리소스에 대해 --ignore-models <model_id>,

, --ignore-datasets <dataset_id>`,

, --ignore-spaces <space_id>`

을 사용하여 전체 클래스의 리소스를 건너뛸 수 있습니다.

trufflehog huggingface --model <model_id> --include-discussions --include-prs

aws s3 cp s3://example/gzipped/data.gz - | gunzip -c | trufflehog stdin

  • 제가 보는 것은
    🐷🔑🐷 TruffleHog. 당신의 비밀을 찾아냅니다. 🐷🔑🐷

그리고 프로그램이 종료되는데, 이게 무슨 의미인가요? - 이는 비밀 정보가 감지되지 않았다는 것을 의미합니다.

  • GitHub 조직을 스캔할 때 시간이 오래 걸리는 이유는 무엇인가요?

  • 인증되지 않은(Unauthenticated) GitHub 스캔에는 속도 제한(rate limits)이 있습니다. 속도 제한을 개선하려면 개인 액세스 토큰과 함께 --token 플래그를 포함하세요.

  • 인증되지 않은(Unauthenticated) GitHub 스캔에는 속도 제한(rate limits)이 있습니다. 속도 제한을 개선하려면 다음을 포함하세요:

  • 개인 키가 확인되었다고 하는데, 그게 무슨 뜻인가요?

  • '확인됨(verified)' 결과는 TruffleHog이 서비스의 API를 사용하여 해당 자격 증명이 유효한지 테스트하여 확인했다는 의미입니다. 개인 키의 경우, SSH 또는 SSL 인증을 위해 해당 키가 라이브로 사용될 수 있음을 확인했습니다. 더 자세한 내용은 Driftwood 블로그 게시물을 참조하세요. [Blog post]

  • 특정 비밀 정보를 무시할 쉬운 방법이 있나요?

  • 스캔된 소스에 줄 번호(line numbers)를 지원하는 경우, 해당 비밀 정보가 포함된 줄에 trufflehog:ignore 주석을 추가하여 해당 비밀 정보를 무시할 수 있습니다.

  • 스캔된 소스가 줄 번호를 지원하는 경우, 다음을 추가할 수 있습니다.

TruffleHog v3는 Go로 완전히 재작성되었으며 많은 새롭고 강력한 기능을 갖추고 있습니다.

  • 각 API에 대한 능동적 검증 (active verification)을 지원하는 700개 이상의 자격 증명 탐지기 (credential detectors)를 추가했습니다. - 또한 GitHub, GitLab, Docker, 파일 시스템 (filesystems), S3, GCS, Circle CI 및 Travis CI 스캔에 대한 네이티브 지원을 추가했습니다. Driftwood 기술을 사용하여 수백만 명의 GitHub 사용자와 수십억 개의 TLS 인증서에 대해 개인 키 (private keys)를 즉시 검증합니다. - 바이너리 (binaries), 문서 및 기타 파일 형식을 스캔할 수 있습니다.
  • GitHub Action 및 프리 커밋 훅 (pre-commit hook)으로 사용할 수 있습니다.

탐지된 모든 잠재적 자격 증명에 대해, 해당 자격 증명이 속해 있을 것으로 판단되는 API를 대상으로 프로그래밍 방식의 검증 (programmatic verification)을 정교하게 구현했습니다. 검증을 통해 오탐 (false positives)을 제거하며, 세 가지 결과 상태를 제공합니다:

verified (검증됨): API 테스트를 통해 자격 증명이 유효하고 활성 상태임이 확인됨
unverified (미검증): 자격 증명이 탐지되었으나 유효함이 확인되지 않음 (무효하거나, 만료되었거나, 검증이 비활성화되었을 수 있음)
unknown (알 수 없음): 검증을 시도했으나 네트워크 또는 API 오류 등의 이유로 실패함

예를 들어, AWS 자격 증명 탐지기는 AWS 자격 증명이 활성 상태인지 확인하기 위해 AWS API에 대해 GetCallerIdentity API 호출을 수행합니다.

TruffleHog에는 스캔하고자 하는 각 데이터 소스에 대한 서브 커맨드 (sub-command)가 있습니다:

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Go (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0