폐쇄망 CVE 미러 설계 — 11일 지난 미러가 만든 조용한 거짓 안전감

인터넷이 없는 환경에서 SCA·의존성 스캔이 의미가 있으려면 CVE / OSV / 벤더 advisory 를 *내부에서* 유지해야 한다. 4 종류의 데이터 소스, 4가지 동기화 함정, 한 가지 검증.

백재민
백재민
CollabOps 창업자
폐쇄망 CVE 미러 설계 — 11일 지난 미러가 만든 조용한 거짓 안전감

작년 12월, 한 고객사 보안 검토 회의에서 한 줄을 듣는 데 2분 이 걸렸다.

"우리 SCA 가 clean 이라는데, 그 데이터가 얼마나 오래된 건가요?"

답이 11일 이었다. 우리 폐쇄망 CVE 미러가 11일 전에 마지막으로 동기화 됐다. 그 11일 동안 높은 심각도 CVE 가 7개 발표됐고, 그중 2개가 우리 의존성 트리에 영향 을 주는 것이었다. SCA 가 clean 이라고 보고한 건 사실이었다 — 11일 전 데이터로는.

그날 이후 우리 폐쇄망 CVE 미러 설계 전체를 다시 짰다. 이 글은 그 결과다.

왜 CVE 미러가 폐쇄망의 결정적 인프라인가

폐쇄망에서 SCA / 컨테이너 스캐너 / IaC 검사 도구는 내부 미러로부터 CVE 데이터를 받는다. 미러가 오래되면 도구는 오래된 데이터로 clean 보고 를 한다. 도구가 거짓말을 하는 게 아니라 — 미러가 거짓말을 시키는 것이다.

폐쇄망 보안 도구의 신뢰도는 도구 자체 가 아니라 그 도구에 들어가는 데이터의 신선도 가 결정한다.

4 종류의 데이터 소스

CVE 미러는 하나의 DB 가 아니라 4 개의 흐름 이다.

1. NVD / CVE.org      —  공식 CVE 식별자 + CPE 매핑
2. OSV (Google)       —  open source 패키지별 advisory + 영향 범위
3. 벤더 advisories    —  RedHat / Debian / Ubuntu / Alpine / 사내 패키지 backport
4. 사내 패치 트래커     —  *우리만* 의 fix / mitigation / 리스크 수용 기록

이 넷이 정렬되지 않으면 같은 취약점이 다른 곳에서 다른 status 로 보고된다.

4가지 동기화 함정

함정 1 — sync 지연이 조용히 누적된다

NVD 의 매시간 업데이트를 매시간 받지 못하면, 지연이 조용히 누적 된다. 일주일 지나면 경고 가 떠야 하는데, 보통 알람이 안 울려서 11일이 된다.

해결: 미러의 마지막 sync 시간자체 메트릭 으로 노출하고, 24시간 이상 지연되면 page 한다. 이 단순한 알람이 11일짜리 사고를 24시간짜리로 줄인다.

함정 2 — 단방향 sync 의 broken pipe

전송 영역(transit zone) 의 단방향 게이트웨이가 파일을 못 보내고 있는데도 오류는 안 나는 패턴. 게이트웨이 입장에서는 조용한 success, 우리 입장에서는 데이터가 안 들어옴.

해결: 미러가 마지막으로 받은 sync 의 hash 를 검증. 매 sync 마다 checksum 매칭 안 되면 alert. 이건 sync 실패 가 아니라 sync 위장 실패 를 잡는 것.

함정 3 — 벤더 advisory 가 언어가 다르다

RedHat 의 advisory 는 RHSA-XXXX, Ubuntu 는 USN-XXXX, Debian 은 DSA-XXXX. 같은 CVE 가 여러 벤더에서 다른 ID 로 다른 시점에 등장. 우리 미러가 한 벤더만 추적하면 다른 벤더 OS 를 쓰는 컨테이너가 내부 검사 통과외부 인증 실패.

해결: 사내에서 쓰는 모든 base 이미지의 OS 의 advisory 를 명시적으로 추적. 4~6 종 보통.

함정 4 — 수용된 리스크 가 미러에 안 들어 있다

사내 정책으로 어떤 CVE 는 수용 한다는 결정이 있다. 그게 미러에 없으면 SCA 가 매번 수용된 CVE경고 로 띄우고, 운영자는 경보 피로진짜 경보 까지 무시.

해결: 내부 risk-accepted 트래커를 미러에 5번째 흐름 으로 박음. SCA 가 그것을 인식해 수용된 항목은 informational 로 강등.

한 가지 검증 — 알려진 좋은 CVE알려진 시간 안에 보이는가

미러의 건강 을 어떻게 검증하나? 수동 검사는 안 된다. 우리는 다음 검증을 분기 1회 자동 으로 돌린다.

1. NVD 에 *지난 24시간 동안 발표된 CVE* 중 random 5개 선택
2. 우리 내부 미러에 *그 5개가 모두 있는지* 확인
3. 없으면 alert + 인시던트
4. 있으면 *한 단계 더* — 그 CVE 가 우리 의존성 트리와 매칭되는지

이 검증을 하기 전에는 미러가 잘 작동한다 라는 게 느낌 에 가까웠다. 검증 도입 후 3분기 동안 4번 의 sync 지연을 자동으로 잡았다.

왜 이 글이 별로 없나

폐쇄망 CVE 미러는 돈도 안 되고, 화려하지도 않은 분야다. 글로벌 SaaS 회사들은 이 문제를 겪지 않는다. 한국·일본·EU 의 공공·금융·방산만 매일 마주한다. 그래서 영문 자료 가 빈약하고, 한국어 자료 는 거의 없다. 이 빈자리가 우리에게 영업 자산 이 됐다 — 컨퍼런스 발표 중 이 표 한 장이 5분 만에 PoC 제안 으로 이어진 적이 두 번.

누가 이 글을 읽으면 좋은가

폐쇄망에서 SCA / 컨테이너 스캐너 / IaC 검사 도구를 돌리고 있는 보안 엔지니어. 마지막으로 미러 sync 시간을 확인한 게 언제 인가요? 답이 즉시 나오지 않으면, 위 4가지 함정 중 한 개 이상에 이미 빠져 있다.

태그#security#cve#onprem#vulnerability#supply-chain#devsecops