비밀 키 탐지(Secrets Detection)는 소스 코드, 설정 파일, CI/CD 파이프라인 등에 API 키, 비밀번호, 인증 토큰과 같은 민감 정보(Secrets)가 하드코딩되어 유출되는 것을 식별하고 차단하는 보안 프로세스다. 한 번 유출된 자격 증명은 시스템 전체의 권한 탈취로 이어질 수 있으므로, 버전 관리 시스템(VCS)에 노출되기 전 단계에서 방어하는 것이 핵심이다.
2. 주요 탐지 기술
패턴 매칭 (Pattern Matching): 정규 표현식을 사용하여 알려진 API 키 형식(예: AWS Access Key, Stripe Token)을 탐지.
엔트로피 분석 (Entropy Analysis): 무작위성이 높은 긴 문자열을 탐지하여, 정형화되지 않은 고유 비밀번호나 개인 키 등을 식별.
시맨틱 분석 (Semantic Analysis): 코드의 문맥을 분석하여 단순한 문자열이 아닌 실제로 인증에 사용되는 변수나 값인지 판단.
검증 기능 (Verification Check): 탐지된 키가 실제로 유효한지(Live check) 해당 벤더 API에 확인하여 오탐지(False Positive) 제거.
3. 예방 및 대응 모범 사례
환경 변수 활용: 민감 정보는 코드와 분리하여 .env 파일이나 시스템 환경 변수로 관리하고, 해당 파일은 .gitignore에 등록하여 제외.
시크릿 관리 서비스 도입: AWS Secrets Manager, HashiCorp Vault 등 전문 도구를 사용하여 자격 증명을 암호화하고 런타임에 동적으로 주입.
Pre-commit Hook 적용: 코드가 커밋되기 전 로컬 환경에서 스캔을 수행하여 유출 가능성이 있는 코드의 생성 자체를 차단.
유출 시 즉각 대응: 자격 증명이 이미 노출된 경우, 단순히 코드를 지우는 것(Git history 삭제 포함)을 넘어 즉시 해당 키를 무효화(Revocation)하고 재발급(Rotation) 수행.
4. 트레이드오프 및 주의사항
오탐지(False Positive)로 인한 개발 방해: 테스트용 문자열이나 더미 데이터가 비밀 키로 오인되어 빌드가 차단될 수 있음. 정교한 제외 규칙(Allowlist) 관리 필요.
Git 이력의 영속성: 한 번 커밋된 비밀 키는 파일에서 삭제하더라도 과거 이력에 남아있다. git filter-repo 등을 통한 이력 세탁이 필요하지만, 팀 전체의 리베이스가 수반되는 고비용 작업임.
스캔 성능: 방대한 저장소의 모든 커밋 이력을 전수 조사하는 'Deep Scan'은 시간이 오래 걸리므로, 평소에는 증분 스캔 위주로 운영.