전수 확인했다는 말을 코드로 옮겨보자
공개 전에 눈으로 다 봤다고 보고했는데 실제로는 시크릿만 본 것이었다. 사내에서만 뜻이 통하는 개발 라벨은 어떤 패턴에도 안 걸려 그대로 나갔다
전수 확인했다는 말을 코드로 옮겨보자
전수 확인했다는 말을 코드로 옮겨보자
저장소를 공개하기 전에 민감한 것이 없는지 눈으로 훑고 “전수 확인했다”고 적었다. 나중에 보니 훑은 범위가 그때 내가 떠올린 항목뿐이었다.
1. 서론 (Introduction)
- 문제/상황 (Problem): 개인정보·자격증명·내부 주소를 기준으로 확인했고, 그 범위 안에서는 잘 걸러졌다. 그런데 사내에서만 뜻이 통하는 개발 라벨(결정 번호, 테스트 식별자)은 어떤 패턴에도 안 걸려 통과했고, 한참 뒤 우연히 발견됐다. 즉 “전수”가 아니라 “내가 떠올린 항목 한정 전수”였다.
- 목적 (Purpose): 확인 범위를 기억이 아니라 코드에 적는다. 그래야 다음에 같은 말을 할 때 그 말을 검증할 수 있다.
- 대상 (Target Audience): 사내 저장소를 공개로 돌리기 전에 무엇을 봐야 하는지 정리하려는 개발자.
2. 방법 및 과정 (Methods & Process)
배경 조사 및 데이터 (Data Collection): 유출은 한 종류가 아니고, 종류마다 숨는 자리가 다르다.
유형 어디에 숨는가 일반 시크릿 스캐너가 잡는가 자격증명(토큰·키) 워킹트리 + 지운 뒤에도 히스토리 잡는다 사설 IP·내부 경로 설정·문서 대체로 못 잡는다 내부 개발 라벨 주석·문서·테스트 이름 전혀 못 잡는다 반출 금지 파일 실수로 추적된 .env·DB못 잡는다 - 접근 방법 (Approach Methods):
- [방법 1]: 워킹트리는 추적 중인 파일만 훑는다. 빌드 산출물과 무시된 파일이 저절로 빠져서 잡음이 크게 준다.
- [방법 2]: 히스토리는 추가된 줄만, 그리고 자격증명 패턴만 본다. 전 카테고리를 히스토리까지 돌리면 느려지고, 느린 검사는 결국 아무도 돌리지 않는다.
- 분석 및 해결 프로세스 (Analysis Flow):
- 도구/기술: 표준 라이브러리 정규식과
git ls-files·git log -p. 별도 의존성 없음. - 주요 단계: 추적 파일 스캔 $\rightarrow$ 히스토리 추가줄 스캔 $\rightarrow$ 반출 금지 파일이 추적 중인지 확인 $\rightarrow$ 종료 코드로 보고.
- 결과 도출 및 검증: 토큰을 커밋했다가 다음 커밋에서 지운 저장소를 만들어 돌렸다. 워킹트리는 깨끗한데 히스토리에서 그대로 잡혔다. 내부 라벨
D-27·GT15도 적발됐고, 추적 중인local.db는 반출 가드가 걸렀다. 문서용 예시 IP에 무시 표시를 단 줄은 통과했다.
- 도구/기술: 표준 라이브러리 정규식과
3. 결과 (Results)
- 분석 결과 요약: 확인 범위가 카테고리 목록으로 코드에 남았고, 종료 코드가 있어 사람·CI·에이전트가 같은 신호를 쓴다. 자격증명 적중값은 앞 4자만 남기고 가린다 — 리포트 자체가 2차 유출이 되면 안 되기 때문이다. 다만 이 가리기를 전 카테고리에 적용했더니
D-27이…로 나와 무엇을 고쳐야 할지 알 수 없는 리포트가 됐다. 가리는 목적은 보안이지 일관성이 아니라서, 자격증명에만 적용하도록 되돌렸다.
4. 인사이트 및 액션 (Insights & Action)
- 인사이트 (Insight): 스캔 범위를 “추적 중인 파일”로 잡은 건 잡음을 줄이려는 선택이었는데, 그 대가가 같이 따라온다 — 아직 추적되지 않은 새 파일은 감사에 안 보인다. 실제로 새 파일을 만들고 돌리니 적발이 2건 그대로였고, 스테이징한 뒤에야 3건이 됐다. 공개 직전에 새로 쓴 파일이 가장 위험한데, 하필 그 파일이 사각지대에 있다.
- 실행 방안 (Action Plan): 감사를 돌리기 전에 스테이징부터 한다. 그리고 “무엇을 확인했다”는 문장을 쓸 때는 그 범위가 코드 어디에 적혀 있는지를 같이 적는다. 적을 곳이 없다면 확인한 것이 아니라 기억한 것이다.
- 한 줄 결론 (Key Takeaway): 사람이 떠올린 범위는 그 사람이 떠올리지 못한 것을 영영 못 본다. 범위를 코드로 옮겨야 다음에도 같은 범위가 나온다. 샘플 코드
- 다음 스텝 (Next Step): 아직 오탐을 재보지 않았다. 패턴이 넓어질수록 무시 표시를 다는 일이 늘어나고, 어느 지점부터 사람이 감사를 통째로 꺼버리는지가 이 도구의 실제 수명을 정한다. 그 임계를 모른 채로 카테고리를 더 늘리면 안 된다.
This post is licensed under CC BY 4.0 by the author.