Skip to content

About

gitleaks 기반 git 저장소 시크릿 스캔 셸 스크립트 (전체 이력·빠른 스캔)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

git-scan-secrets

Bash Git gitleaks License: MIT

Git 저장소의 모든 브랜치와 전체 커밋 히스토리에서 유출된 시크릿(API 키, 토큰, 비밀번호 등)을 찾는 Bash 스크립트입니다.

원격 저장소를 임시 디렉터리에 git clone --mirror로 받아서 검사하고, 끝나면 임시 디렉터리를 지웁니다.

스크립트

파일 설명 필요한 도구
scan-secrets.sh grep 정규식과 파일 이름 목록으로 검사합니다. 결과를 텍스트 보고서로 저장합니다. git
quick-scan.sh gitleaks로 검사합니다. gitleaks가 없으면 설치를 시도합니다. git, gitleaks

요구 사항

  • Bash, Git
  • 검사할 저장소에 대한 SSH 접근 권한 (클론 주소가 git@github.com:... 형식입니다)
  • quick-scan.sh를 쓰려면 gitleaks (macOS는 brew install gitleaks)

사용법

  1. 검사할 저장소 목록을 수정합니다.
    • scan-secrets.sh: 파일 위쪽의 REPOS 배열
    • quick-scan.sh: 파일 아래쪽의 scan_repo 호출
  2. 스크립트를 실행합니다.
bash scan-secrets.sh
bash quick-scan.sh

두 스크립트 모두 인자를 받지 않습니다.

scan-secrets.sh가 검사하는 것

저장소마다 아래 순서로 검사합니다.

  1. 민감한 파일: .env, .env.local, .env.production, config.json, secrets.json, credentials.json, application.yml, application.properties 등이 히스토리에 한 번이라도 커밋된 적이 있는지 확인합니다.
  2. 시크릿 패턴: 모든 커밋의 diff에서 아래 패턴을 찾습니다.
    • Telegram 봇 토큰, chat_id
    • 일반 api_key, api_secret, secret_key
    • 한국투자증권(KIS) APP_KEY, APP_SECRET, CANO
    • 데이터베이스 password, DB_PASSWORD
    • AWS 액세스 키(AKIA...), aws_secret_access_key
    • JWT 토큰
    • BEGIN ... PRIVATE KEY
    • _TOKEN, _SECRET, _KEY로 끝나는 변수에 긴 값이 들어 있는 경우
  3. .gitignore: .env, *.pem, *.key, __pycache__, *.pyc가 빠져 있으면 알려 줍니다.
  4. 커밋 히스토리 요약: 최근 50개 커밋 그래프를 보고서에 넣습니다.

패턴을 추가하려면 PATTERNS 배열에 grep -E 형식의 정규식을 넣으면 됩니다. 파일을 추가하려면 SENSITIVE_FILES 배열에 파일 이름을 넣으면 됩니다.

결과

scan-secrets.sh는 현재 디렉터리의 secret-scan-results/ 아래에 저장소별 보고서를 만듭니다.

secret-scan-results/<저장소 이름>-scan-report.txt

quick-scan.sh는 gitleaks 출력을 화면에만 보여 줍니다.

시크릿이 발견되면

  1. 노출된 자격 증명을 즉시 폐기하고 새로 발급합니다.
  2. BFG Repo-Cleaner로 히스토리에서 지웁니다.
brew install bfg
bfg --delete-files .env
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force --all

주의 사항

  • 보고서에는 발견된 시크릿 값이 그대로 들어갑니다. secret-scan-results/를 커밋하지 마세요. 이 저장소에는 .gitignore가 없으므로 직접 추가해야 합니다.
  • quick-scan.sh는 gitleaks에 --no-git 옵션을 줍니다. 이 옵션은 커밋 히스토리를 따라가지 않고 디스크의 파일만 검사합니다. 따라서 quick-scan.sh의 결과만으로 히스토리가 깨끗하다고 판단하면 안 됩니다.
  • 클론에 실패하면 스크립트 전체가 멈춥니다. 뒤에 적힌 저장소는 검사되지 않습니다.

라이선스

MIT

About

gitleaks 기반 git 저장소 시크릿 스캔 셸 스크립트 (전체 이력·빠른 스캔)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages