50줄로 시크릿 탐지 사전 커밋 훅 구축하기 노트

50줄로 시크릿 탐지 사전 커밋 훅 구축하기

Git 저장소에서 노출된 비밀 정보는 보안 침해의 주요 원인이며, AWS 키는 봇에 의해 빠르게 스크랩됩니다. 가장 효과적인 방어책은 커밋 전에 비밀 정보를 탐지하여 복잡한 이력 정리 및 비밀 정보 로테이션의 필요성을 방지하는 사전 커밋 훅(pre-commit hook)입니다. 기존의 CI/CD 스캐너는 수동적이어서 이미 저장소 이력에 포함된 유출을 감지하므로 침해의 여지를 남깁니다.약 50줄 길이의 가볍고 사용자 정의 가능한 Python 사전 커밋 훅은 효율적인 로컬 솔루션을 제공합니다. 이 훅은 AWS 액세스 키, 일반 API 키, 개인 키, 구성 파일의 비밀번호, 플랫폼별 토큰을 포함한 일반적인 비밀 정보 유형을 정규 표현식 패턴을 사용하여 대상으로 합니다. 밀리초 단위로 실행되며 Python 표준 라이브러리 외에 외부 종속성이 필요하지 않습니다.스크립트는 .git/hooks/에 사전 커밋 파일을 생성하고, 실행 가능하게 만들고, 다양한 비밀 정보에 대한 정규 표현식 패턴을 정의하는 것을 포함합니다. 스테이징된 변경 사항에서 추가된 줄만 파싱하여 기존의 유출이나 삭제가 아닌 새로운 유출을 구체적으로 찾습니다. 합법적인 오탐(false positive)의 경우, 이스케이프 해치(escape hatch)로 인라인 # nosecret 주석을 구현할 수 있습니다.훅을 배포하기 위해 커밋된 디렉토리에 저장하고 Makefile 설정을 통해 복사하거나, 더 깔끔하게는 git config core.hooksPath를 사용하여 공유 훅 디렉토리를 사용하도록 Git을 구성할 수 있습니다. 이 접근 방식은 팀 워크플로우에 훅을 원활하게 통합합니다. 팀은 내부 토큰 형식에 대한 패턴을 추가하여 훅을 확장할 수 있지만, 시스템에 대한 신뢰를 저하시키는 오탐을 피하기 위해 정확성이 중요합니다.이 사전 커밋 훅은 truffleHog 또는 gitleaks와 같은 CI 수준 스캐너와 같은 광범위한 보안 전략을 보완하며 중요한 첫 번째 방어선을 제공합니다. 개발에서 흔히 발생하는 실패 모드인 민감한 데이터의 우발적인 스테이징을 방지합니다. 이 낮은 노력으로 높은 효과를 내는 보안 제어는 광범위한 설정이나 아키텍처 변경 없이 전반적인 보안 태세를 크게 향상시킵니다.