DevSecOps

DevSecOps에서 Gitleaks로 시크릿 유출 방지하기

S0NG 2025. 6. 28. 19:01
728x90
반응형

소스코드 보안은 DevSecOps에서 가장 먼저 다뤄야 할 영역입니다. 특히 Git 저장소에 API 키, 비밀번호, 토큰 등 민감 정보(Secrets) 가 유출되면, 그 피해는 CI/CD 전체를 무력화시킬 수 있습니다.

이 글에서는 Git 기반 비밀 정보 유출 탐지 도구인 Gitleaks에 대해 실무적인 관점에서 분석합니다.


1. Gitleaks란 무엇인가

Gitleaks는 Git 저장소에서 API 키, 토큰, 비밀번호, 인증 정보 등 민감한 시크릿 정보의 존재 여부를 스캔하고 탐지하는 오픈소스 보안 도구입니다.

  • Go 언어로 작성되어 빠르고 가볍습니다.
  • Git 히스토리까지 추적하여 과거 커밋 내 유출도 탐지 가능.
  • GitHub, GitLab, Bitbucket 등 대부분의 Git 저장소와 호환됩니다.

GitHub의 자체 시크릿 스캔(GitHub Advanced Security) 도 Gitleaks에서 영감을 받았을 정도로 신뢰도 높은 도구입니다.


2. 주요 기능


커밋 이력 전체 스캔 Git 로그를 따라가며 과거 유출도 탐지
PR/커밋 단위 검사 특정 커밋, 브랜치, PR에 대한 스캔 가능
정규표현식 기반 탐지 기본 내장된 수십 개의 시크릿 탐지 룰 사용
사용자 정의 룰 지원 조직 내부 패턴에 맞는 시크릿 룰 작성 가능
JSON 리포트 출력 CI 연동 및 보고서 자동화에 적합
Pre-commit hook 지원 개발자 로컬 환경에서도 사전 차단 가능
 

3. 탐지 대상 예시

Gitleaks는 다음과 같은 민감 정보를 탐지할 수 있습니다.

  • AWS Access Key (AKIA...)
  • Google API Key
  • Slack Webhook URL
  • GitHub Personal Access Token
  • Private Key (-----BEGIN PRIVATE KEY-----)
  • Database URI with credentials
  • 내부 시스템 고유 시크릿 (커스텀 룰 작성 필요)

4. 사용 방법

CLI 실행 예시

gitleaks detect --source . --report-path report.json

커밋 범위 제한

gitleaks detect --source . --log-opts "--since=2.days"

사용자 정의 설정

gitleaks detect --config-path=gitleaks.toml

5. .gitleaks.toml 설정 구조

사용자 정의 룰 예시:

[[rules]]
  description = "Internal Auth Token"
  regex = '''internal_token_[0-9a-f]{32}'''
  tags = ["custom", "auth", "token"]
  • 룰은 정규표현식 기반으로 작성합니다.
  • 룰별로 tags를 설정해 유형별 분류가 가능합니다.
  • 조직 내 사내 시스템 토큰이나 패턴을 룰로 등록하는 것이 중요합니다.

6. GitLab CI에 통합하기

.gitlab-ci.yml 예시:

secrets_scan:
  image: zricethezav/gitleaks:latest
  stage: test
  script:
    - gitleaks detect --source . --exit-code 1 --report-path gl-gitleaks-report.json
  artifacts:
    paths:
      - gl-gitleaks-report.json
    reports:
      dotenv: gl-gitleaks-report.json
  allow_failure: false
  • exit-code 1은 탐지 시 파이프라인 실패 처리
  • allow_failure: false를 통해 강제 차단
  • GitLab UI에서 결과를 다운로드하거나 파싱 가능

7. 실무 적용 시 고려사항

7.1. Pre-commit hook 연동

cat <<EOF > .pre-commit-config.yaml
- repo: https://github.com/gitleaks/gitleaks
  rev: v8.18.1
  hooks:
    - id: gitleaks
EOF

pre-commit install

→ 개발자가 커밋 전에 유출을 사전에 차단 가능. CI에서 발견되기 전에 방어선 구축.


7.2. 오탐/과탐 이슈 관리

  • 정규표현식 기반 도구의 한계상, 일부 정당한 문자열이 오탐지될 수 있습니다.
  • allowlist 기능 또는 .gitleaks.toml에서 제외 경로를 설정해야 안정적인 CI 운용이 가능합니다.

예:

[[allowlist]]
  description = "Test credentials"
  regexes = ['''test_key_[0-9]{4}''']

7.3. Git 히스토리 완전 정리 어려움

  • Gitleaks가 탐지했다고 해도 이미 push된 시점이라면 Git history에서 제거하지 않는 이상 기록은 남습니다.
  • 이 경우에는 BFG Repo Cleaner, git-filter-repo 등으로 Git 히스토리 재작성 및 강제 push가 필요합니다.

8. 한계점 및 보완 전략

 

단순 문자열 탐지 기반 → 우회 가능성 탐지 룰 지속적 업데이트, static + dynamic 분석 병행
False Positive 발생 가능 allowlist와 조직 맞춤형 정규표현식 구성
Push 후에 탐지하면 이미 늦음 Pre-commit, PR Hook에서 선제적 탐지
탐지 실패한 Secret이 실제 유효할 수도 있음 탐지 후 자동 폐기 및 rotation 정책 병행 필요
 

9. 결론

Gitleaks는 DevSecOps의 Shift-left 전략에서 핵심적인 역할을 수행하는 경량 시크릿 스캐너입니다.
Git 저장소 기반 개발 환경에서 필연적으로 발생할 수 있는 시크릿 유출 리스크를 사전 차단함으로써, 보안 사고를 예방하고 CI/CD 신뢰성을 높일 수 있습니다.

단, 오탐/과탐 이슈, 탐지 우회 가능성, Git 히스토리 처리 등 실무 적용 시에는 정책적/기술적 보완이 필수입니다.
CI에 통합하되, pre-commit hook, 사용자 정의 룰, 자동 폐기 정책까지 포함하는 다층 방어 전략이 이상적입니다.

728x90
반응형