63,152개 CSAF/VEX 문서를 전수 분석해 CPE·구독 채널·모듈 기준의 수집 테이블과 서버 판정 순서를 다시 정리
ServerCare의 RHEL 패키지 취약점 오탐을 따라가 보니 원천 포맷은 이미 VEX로 바뀌어 있었지만, 파싱 단계에는 OVAL 시절의 가정이 남아 있었습니다. 한 제품의 패치 버전을 같은 메이저의 모든 마이너 버전으로 늘리고, 모듈 조건을 판정에 쓰지 않으며, 패키지 이름을 첫 하이픈에서 자르는 문제가 함께 있었습니다.
현행 수집 테이블은 371만 행·14.7GB였습니다. 이 상태에서 파서만 부분 수정하면 어떤 행이 왜 만들어졌는지 설명하기 어려워, 기존 구현을 유지하지 않고 수집 단위와 서버 판정 경계를 다시 잡았습니다.
현재 상태는 설계·전수 측정 완료입니다. 수집기 구현, 시험 적재, 배포 전환, 운영 오탐 감소율 측정은 아직 끝나지 않았습니다.
product_tree.relationships로 약 715만 개의 product_id를 모두 제품 CPE에 연결할 수 있음을 확인했습니다.STATUS_CONFLICT를 설계에 넣었습니다.mysql:8.0처럼 VEX에 모듈이 지정됐는데 서버에서 꺼져 있으면 해당 행을 제외합니다. 모듈 정보를 못 받는 경우도 조용히 넘기지 않고 상태로 드러내는 방향을 남겼습니다.수집DB에는 CPE 사전, 취약점 fact, 문서 상태를 두고 배포DB에는 CPE 사전과 fact만 둡니다. 약 90행인 CPE 사전은 API가 통째로 캐시하고, fact 조회는 대상 CPE와 설치 패키지 목록으로 좁힙니다.
배포DB는 고객사 on-premise 서버로 보내는 바이너리 로그의 발원지입니다. 문서가 바뀔 때 기존 행을 전부 지우고 다시 넣으면 내부 DB 부하에서 끝나지 않고 모든 고객사에 같은 쓰기가 전달됩니다.
deletions.csv는 별도 watermark로 처리해 철회된 CVE의 잔여 행을 지우도록 했습니다.known_not_affected 저장, 에이전트 입력, 배포 전환은 결정 항목으로 남겼습니다.기존 코드와 DB 행을 대조해 오탐을 만드는 가정을 찾고, VEX 전체 corpus를 측정해 스키마·수집 절차·판정 순서를 설계했습니다. 구현된 결과처럼 보이지 않도록 현재 완료 범위를 문서·측정·협의안으로 한정했습니다.
관련 항목: 멀티 배포판 OS 패키지 수집 개편 · OS 패키지 취약점 수집 정확도 개선