시크릿 스캔
실수로 커밋한 API 키나 비밀번호가 Git 저장소에 그대로 남아 있다면 어떻게 될까요? 시크릿 스캔은 소스 코드와 커밋 이력 전체에서 노출된 자격증명을 자동으로 탐지하여, 공격자보다 먼저 문제를 발견할 수 있게 합니다.
한 번 커밋된 시크릿은 이후 커밋에서 삭제하더라도 Git 히스토리에 영구히 남습니다. 공개 저장소라면 노출 즉시 자동화된 봇이 키를 수집해 악용할 수 있습니다. 시크릿 스캔은 현재 코드뿐 아니라 과거 커밋까지 검사하여 이런 위험을 찾아냅니다.

개요
- 분석 대상: Git 저장소의 소스 코드 및 커밋 이력 전체
- 분석 엔진: Gitleaks
- 분석 기준: Gitleaks 정규식 룰셋 (API 키 · 토큰 · 비밀번호 패턴)
- 탐지 값 처리: 탐지된 시크릿은 마스킹되어 표시 · 저장되며 원본은 저장하지 않습니다
시크릿 스캔은 현재 시점의 파일뿐 아니라 커밋 이력 전체를 검사합니다. 따라서 과거에 잠깐 커밋되었다가 삭제된 시크릿도 탐지됩니다.
Step 1: 시크릿 스캔 진입
- 사이드바의 "보안" 그룹 > [보안 분석] 메뉴를 클릭합니다.
- 페이지 상단의 카드 캐러셀에서 분석할 서비스를 선택합니다.
- 시크릿 탭을 선택합니다.
/security?id={서비스ID}&area=secrets URL로 진입하면 해당 서비스의 시크릿 탭이 바로 열립니다.
Step 2: 스캔 입력 항목
시크릿 탭 상단의 트리거 바에서는 다음 항목을 사용합니다.
- Git 저장소 URL (필수): 검사할 저장소 URL
- 브랜치 (선택, 기본
main): 검사할 브랜치명 - Git 토큰 (선택, Private Repo용): 저장소 읽기 권한이 있는 토큰
Git URL, 브랜치, 토큰은 설정 탭에서 SAST/IaC/시크릿 공통으로 등록할 수 있습니다. 설정 탭에 등록해두면 시크릿 스캔 시 자동으로 사용됩니다.
Git 토큰을 직접 입력하지 않으면, 백엔드는 설정 탭이나 기관/조직 설정에 저장된 토큰을 자동으로 사용합니다.
Step 3: 스캔 실행
스캔 시작 버튼을 클릭하면 Gitleaks가 저장소를 클론하여 코드와 커밋 이력을 검사합니다. 진행률은 WebSocket을 통해 실시간으로 표시됩니다.
Gitleaks는 정규식 룰셋으로 다음과 같은 시크릿 패턴을 탐지합니다.
- 클라우드 서비스 액세스 키 (AWS, GCP, Azure 등)
- API 키 및 토큰 (GitHub, Slack, Stripe 등)
- 비밀번호, 데이터베이스 접속 문자열
- 개인 키 (PEM, SSH 키 등)
스캔이 완료되면 결과 화면이 자동으로 갱신됩니다.
Step 4: 결과 확인
4.1 결과 요약
스캔이 완료되면 다음 정보를 확인할 수 있습니다.
- 총 탐지 수: 발견된 노출 시크릿의 총 개수
- 유형별 분류: 탐지된 시크릿이 어떤 유형(API 키, 토큰, 비밀번호 등)인지 (매핑되지 않은 항목은 '미분류'로 표시)
- 심각도별 분류: 탐지된 시크릿의 심각도 분포 (Critical/High/Medium/Low/Unknown) — 심각도가 확인되지 않은 항목은 Unknown으로 분류됩니다.
- 검사한 저장소 URL 및 스캔 시각
4.2 탐지 항목 상세
각 탐지 항목에서 다음 정보를 확인할 수 있습니다.
- 위치: 시크릿이 발견된 파일 경로와 커밋
- 시크릿 유형: 탐지된 자격증명의 유형
- 마스킹된 탐지 값: 시크릿 값은 마스킹되어 표시됩니다 (원본은 저장하지 않음)
4.3 스캔 이력
시크릿 탭의 스캔 이력 테이블에서는 시점별 시크릿 탐지 추세를 확인할 수 있습니다. 매 스캔마다 결과가 누적되므로 보안 개선 상황을 시계열로 추적할 수 있습니다.
- 스캔 일시: 각 스캔 실행 시각
- Critical/High/Medium/Low: 각 심각도별 탐지 건수
- 탐지 총계: 누적 탐지 수와 이전 스캔 대비 증감 표시 (▲/▼)
- 보는 중: 현재 결과 영역에 표시 중인 시점을 마크
이력 테이블의 행을 클릭하면 그 시점의 상세 결과(탐지된 시크릿 목록)가 결과 영역에 표시됩니다. 특정 시점의 노출된 자격증명 목록을 정확히 확인할 수 있습니다.
노출된 시크릿 대응 절차
시크릿이 노출된 것이 확인되면 다음 순서로 대응하세요.
-
즉시 폐기 및 교체: 노출된 키/토큰은 코드에서 지우는 것만으로는 부족합니다. 해당 자격증명을 발급 기관에서 즉시 폐기(revoke) 하고 새 값으로 교체합니다.
-
코드에서 제거: 새 값은 코드에 직접 작성하지 말고 환경 변수나 시크릿 관리 도구로 주입합니다.
-
히스토리 정리 검토: 커밋 이력에 남은 시크릿은 코드 수정만으로 사라지지 않습니다. 필요 시 히스토리 재작성을 검토하되, 이미 폐기된 키라면 우선순위는 낮습니다.
시크릿을 커밋에서 삭제해도 이전 커밋에는 그대로 남아 있습니다. 가장 확실한 대응은 노출된 자격증명 자체를 폐기하고 새로 발급하는 것입니다.
시크릿 노출 예방
- 환경 변수 사용: 자격증명은 코드가 아닌 환경 변수나 시크릿 관리 도구로 주입합니다.
.gitignore활용:.env, 키 파일 등 시크릿이 담긴 파일은.gitignore에 등록합니다.- 커밋 전 점검: 커밋 전 단계에서 시크릿을 점검하는 습관을 들이세요.
- 정기 스캔: 시크릿 스캔을 정기적으로 실행하여 새로 유입된 노출을 빠르게 발견하세요.
문제 해결
스캔 실패
-
코드 접근 불가: Git 토큰에 저장소 읽기 권한이 있는지 확인하세요. 설정 탭이나 기관 설정의 저장된 토큰이 자동으로 사용됩니다.
-
타임아웃: 커밋 이력이 매우 긴 저장소는 검사 시간이 오래 걸릴 수 있습니다. 분석 범위를 특정 브랜치로 제한하세요.
오탐 (False Positive)
테스트용 더미 키나 예시 값이 시크릿으로 탐지될 수 있습니다. 탐지 항목이 실제 자격증명인지 확인하고, 더미 값이라면 코드에 명확한 예시 표기를 남겨 혼동을 줄이세요.