월요일 아침, 슬랙에 Dependabot PR 알림이 17개 쌓여 있다. 또 시작이다. 클릭, 머지, 클릭, 머지. 이게 정말 보안을 위한 건지, 아니면 그냥 의식 행위인지 가끔 헷갈린다.
Go 생태계의 보안 전문가 Filippo Valsorda가 직설적으로 말한다: “Dependabot을 꺼라.” 처음엔 농담인 줄 알았다. 근데 아니었다.
노이즈 머신이라는 진단
그의 주장은 이렇다. Dependabot은 노이즈 머신이다. 실제로 영향받지 않는 취약점에 대해서도 무차별적으로 PR을 생성한다. 패키지 레벨, 심볼 레벨 필터링 없이 “일단 업데이트하세요”만 외친다.
실제 사례: filippo.io/edwards25519의 보안 패치가 나왔는데, 영향받는 함수를 사용하는 프로젝트는 거의 없다. 그런데 Dependabot은 수천 개의 PR을 열었다. Wycheproof 저장소처럼 해당 패키지를 아예 import조차 하지 않는 곳에도.
진짜 해결책: govulncheck
대안은 govulncheck다. Go의 공식 취약점 스캐너인데, 정적 분석을 통해 실제로 취약한 심볼을 호출하는지 확인한다. “이 모듈에 취약점이 있다”가 아니라 “당신의 코드가 이 취약점에 실제로 노출되어 있다”를 알려준다.
차이가 어마어마하다. Dependabot이 “빨간불! 빨간불!” 외칠 때, govulncheck는 “괜찮아, 그 함수 안 쓰잖아”라고 차분하게 말해준다.
Alert Fatigue의 실제 비용
경보 피로(Alert Fatigue)는 진짜 위협이다. 매일 가짜 경보에 시달리다 보면, 진짜 위험이 왔을 때 무시하게 된다. 양치기 소년 효과다.
나도 Dependabot PR을 리뷰 없이 머지한 적이 있다. 솔직히 인정한다. “어차피 테스트 통과했으니까”라는 생각으로. 그게 바로 문제다.
내 선택
Filippo의 글을 읽고 나서, 개인 프로젝트 몇 개에서 Dependabot을 끄고 govulncheck GitHub Action으로 교체했다. 회사 프로젝트는… 아직 설득 중이다. 관성이라는 게 참 무섭다.
보안은 체크리스트가 아니다. 실제로 위협을 이해하고 대응하는 것이다. 그런 의미에서, 가끔은 도구를 끄는 것도 보안이다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.