How GitHub used secret scanning to reach inbox zero
GitHub Blog · 2026-07-02 · Application security
GitHub 보안팀은 수천·수만 건의 비밀(시크릿) 경고를 다루는 과정에서 단순한 경고 수치는 실제 위험을 반영하지 않는다는 점을 확인했다. 초기 탐색에서 15,000여 저장소에 산재한 2만 건 이상의 알림 가운데 다섯 개 저장소가 약 1만8천 건을 차지했고, 이들은 테스트용 픽스처나 비활성화된 자격증명이어서 대다수가 '노이즈'였다. 이를 바탕으로 팀은 조직 수준에서 시크릿 스캐닝과 푸시 보호를 강제 적용해 신규 누출을 차단하고(Phase 1), 저장소·유형·연령 기준으로 분류해 대량 폐기 규칙을 만들며(Phase 2) 실사용 여부를 확인하는 유효성 검사 프로세스를 도입했다(Phase 3). 실사용 여부 판단은 최소한의 읽기 전용 호출로 한정했고, 이 과정에서 프라이버시·법무와 긴밀히 협업해 권한과 영향 범위를 관리했다. 또한 코드 외부(지원 티켓, 버그 바운티 제출, 인시던트 노트, 위키 등)에도 시크릿이 존재함을 확인하고 관련 플레이북을 정비했다. 유효성 판별 뒤에는 소유권 식별과 수작업 심사(Phase 4·5)가 뒤따랐다. 개인 액세스 토큰처럼 GitHub 발급 자격증명에는 메타데이터를 경고에 포함시켜 소유자를 빠르게 찾을 수 있게 했고, 소유자가 불명확한 저장소 문제는 저장소 소유권 정책과 커스텀 프로퍼티 도입으로 병행 해결했다. 재작성으로 깃 히스토리를 지우는 것은 포렌식 손실을 초래하므로 가능하면 회전(rotate)·폐기(revoke)를 먼저 고려했다. 마지막으로 경고를 중앙 취약점 관리 플랫폼으로 라우팅하고 유형별 플레이북·자동 알림·책임 지표를 마련해 조직적 대응을 정착시켰고, 이 접근법으로 9개월 만에 잔여 알림을 해소했다. 교훈은 숫자에 겁먹지 말고 전사적 강제 적용, 실사용 검증, 메타데이터 활용, 소유권 확보, 탐지 이후의 워크플로 자동화 및 의사결정 프레임 문서화가 핵심이라는 점이다. 많은 수작업 우회책은 현재 시크릿 스캐닝의 네이티브 기능으로 통합되어 있다.