← 아티클 목록

개발일지WhoAmI — 공부 기록을 발행 가능한 형태로 좁힌 파이프라인 →

자격증명 검사를 경고가 아니라 중단으로 뒀다

실습 기록에는 토큰이 섞여 들어온다. 경고만 띄우고 저장은 되게 할 생각이었다가 중단으로 바꾼 이유와, 강제 통과 버튼을 두지 않은 이유. 그리고 그 검사가 콘텐츠 파일만 보고 있었다는 것을 나중에 발견한 기록.

목차 3

실습 기록에는 자격증명이 섞인다. 명령 출력을 그대로 붙여 넣으면 액세스 키가 따라오고, 헤더 예시를 옮기면 토큰 값이 그대로 온다. 노트를 옮길 때 이 값까지 함께 공개되지 않도록 검사할 필요가 있었다.

처음 계획은 경고였다. 탐지되면 화면에 알리고 저장은 되게 하는 방식이다. 바꾼 이유는 두 가지다. 경고는 급할 때 지나친다. 그리고 한 번 커밋된 토큰은 파일을 고쳐도 git 이력에 남는다. 그래서 파일을 저장하기 전에 탐지된 값을 확인하도록 했다.

탐지되면 파일을 만들지 않는다

지금은 저장 시점에 멈춘다. 개인키 블록, AWS 액세스 키, GitHub 토큰, API 키, 서명이 붙은 JWT, 변수에 대입된 자격증명, Authorization 헤더 값, 세션 쿠키 값이 여기 해당한다. 탐지되면 파일을 쓰지 않고 종료한다.

강제 진행 버튼은 두지 않았다. 버튼이 있으면 그 버튼이 기본 동작이 된다. 막혔을 때의 정상 절차는 볼트 원본을 더미 값으로 고치고 다시 가져오는 것이고, 그 절차가 화면에 안내로 나온다. CLI 에는 우회 옵션이 있지만 문서에서 권장하지 않는다고 적어 두었다 — 터미널에서 옵션을 손으로 붙이는 것과 화면의 버튼을 누르는 것은 필요한 결심의 크기가 다르다.

막는 것과 별개로 경고만 하는 등급을 따로 뒀다. 사설 IP, 로컬 사용자 경로, 공인 IP, 내부 호스트명, 이메일이 여기 들어간다. 이것들을 막지 않는 이유는 실습 기록에 정당하게 등장하기 때문이다. DVWA 를 로컬에서 돌린 기록에 127.0.0.1 이 나오는 것은 정상이고, 그것을 막으면 실습 글을 쓸 수 없다. 대신 사람이 볼 수 있게 세어서 보여 준다.

명백한 더미 값은 통과시킨다. ${TOKEN}, <YOUR_API_KEY>, example 이나 dummy 가 포함된 값, 공식 문서의 예시 키가 그렇다. 탐지된 값은 로그에서 앞뒤 네 자만 남기고 마스킹된다 — 스캐너 출력 자체가 유출 경로가 되면 안 되기 때문이다.

경고를 실패로 올리지 않았다

저장소 전체를 검사하는 게이트를 나중에 붙이면서 이 결정을 한 번 더 했다. 경고 등급도 실패로 처리해서 전부 막아 버릴지였다.

실제로 돌려 보고 그만뒀다. 저장소 전체에서 경고가 100건 넘게 나오는데 그 대부분이 스캐너 자신의 정규식과 주석에 적힌 설명용 예시였다. 자기가 자기를 탐지하는 것이다. 이걸 실패로 올리면 게이트가 항상 빨간불이 되고, 그러면 사람은 그 색을 무시하는 법부터 배운다. 진짜 차단이 그 안에 묻힌다.

그래서 종료 코드는 차단 등급 하나로만 갈린다. 경고는 세어서 보여 주기만 한다. 상시화된 경고는 진짜 경고까지 안 보이게 만든다는 것이 이 저장소에서 반복해서 적용한 기준이고, 여기서도 그 기준을 적용했다.

검사가 콘텐츠 파일만 보고 있었다

한동안 이 검사에는 구멍이 있었다. 저장 시점 스캔은 콘텐츠 마크다운만 본다. 즉 scripts/ 나 docs/, 워크플로 파일에 커밋된 토큰은 어느 검사에도 걸리지 않았다. 글을 옮기는 통로만 지키고 있었고, 저장소에는 글 말고도 파일이 많다.

규칙을 새로 만들 필요는 없었다. 규칙 정의는 한 파일에 있었으므로 적용 범위만 git 이 추적하는 파일 전체로 넓혔다. 이진 파일과 2MB 넘는 파일은 열지 않고, 옵시디언 문법 잔여물처럼 자격증명이 아닌 규칙은 게이트에서 뺐다. 그것들은 콘텐츠 검증이 이미 그 자리에서 보고 있고, 게이트에 섞으면 차단이 묻힌다.

지금 이 게이트는 npm run verify 안에 있고, 배포 전 명령과 CI 가 같은 것을 돌린다. 토큰 형태 값으로 차단이 실제로 걸리는 것도 확인했다.

한계는 그대로 남아 있다. 이 검사는 형태를 아는 자격증명만 잡는다. 사내 시스템 이름이나 내부 경로처럼 형태가 없는 것은 사람이 판단해야 하고, 그래서 공개 범위 점검을 따로 두었다. 기계가 막는 선을 넓히려고 형태 없는 것까지 규칙으로 만들면, 앞에서 실측으로 확인한 그 문제로 돌아간다.

함께 보면 좋은 글

이 기록과 태그가 겹치는 아티클입니다.