개발 완료 · 2026

RHEL VEX 수집기 구현과 채널·모듈 데이터 검증

채널·모듈 정보를 보존하는 수집기와 Airflow DAG를 구현하고, 65,440개 문서 시험 적재와 회귀 검증을 마쳤습니다.

기간2026 · 개발 완료
대상 저장소labrador-scrapers
역할데이터 엔지니어 · 수집기·DAG 구현과 검증
PythonAirflowCSAF/VEXMySQLData Modeling

작업 요약

개발 완료 · 65,440개 문서 시험 적재 · 최종 파싱 오류 0건

OVAL 시절의 가정이 남아 있었습니다

ServerCare의 RHEL 패키지 취약점 오탐을 따라가 보니 원천 포맷은 이미 VEX로 바뀌어 있었지만, 파싱 단계에는 OVAL 시절의 가정이 남아 있었습니다. 한 제품의 패치 버전을 같은 메이저의 모든 마이너 버전으로 늘리고, 모듈 조건을 판정에 쓰지 않으며, 패키지 이름을 첫 하이픈에서 자르는 문제가 함께 있었습니다.

현행 수집 테이블은 371만 행·14.7GB였습니다. 이 상태에서 파서만 부분 수정하면 어떤 행이 왜 만들어졌는지 설명하기 어려워, 기존 구현을 유지하지 않고 수집 단위와 서버의 취약점 판정 기준을 다시 정했습니다.

RHEL VEX 개발을 완료했습니다. 수집기·DAG 구현과 main 병합, 시험 적재 및 DEV DB 수집을 마쳤습니다. 운영 배포 여부와 오탐 감소율은 별도 확인 항목입니다.

전수 분석 뒤 65,440개 문서를 시험 적재했습니다

65,440
시험 적재한 VEX 문서
0건
재처리 후 남은 파싱 오류
2,778,589
시험 DB의 취약점 행
87행
구독 채널 사전

CPE·구독 채널·모듈 조건을 나눠 확인했습니다

아키텍처와 판정 경계

전체 구조를 먼저 보고, 크게 열어 세부 내용을 확인하세요.크게 보기ExcalidrawMermaid
개발을 완료한 RHEL VEX 수집 구조와 배포·판정 연계. 채널 사전, 취약점 데이터, 문서 상태를 분리하고 설치 패키지별 모듈 조건을 판정 입력으로 사용합니다. 운영 배포 여부는 별도 확인 항목입니다.
RHEL VEX 개발을 완료했습니다. 수집 DB의 채널 사전·취약점 데이터·문서 상태와 배포·판정 연계 구조를 보여줍니다. 운영 배포 여부는 별도 확인 항목입니다.

수집 DB에는 채널 사전, 취약점 데이터, 문서 상태를 나눠 저장합니다. 판정 입력의 CPE는 내부 채널로 변환하고, CHANNEL_ID와 설치 패키지·모듈 조건으로 조회 범위를 좁힙니다. 배포 DB에는 채널 사전과 취약점 데이터만 전달하도록 구성했습니다.

취약 버전은 단일 패치 버전 컬럼 대신 VERSION_RANGE에 저장합니다. 패치 이전의 모든 버전과 특정 구간만 취약한 경우를 같은 형식으로 표현하도록 공통 스키마를 정했고, 먼저 RHEL 수집기에 적용했습니다. 다른 OS 수집기의 전환까지 완료한 것은 아닙니다.

Airflow DAG는 원문 수집과 파싱을 두 작업으로 나눴습니다. 최초에는 전체 아카이브를 읽고, 이후에는 4시간 주기로 변경·철회 목록을 처리하도록 구성했습니다. 문서 처리 상태와 진행 기준 시각을 DB에 남겨 실패한 구간부터 다시 실행할 수 있게 했습니다.

고객사로 나가는 쓰기량까지 계산했습니다

배포DB는 고객사 on-premise 서버로 보내는 바이너리 로그의 발원지입니다. 문서가 바뀔 때 기존 행을 전부 지우고 다시 넣으면 내부 DB 부하에서 끝나지 않고 모든 고객사에 같은 쓰기가 전달됩니다.

결과

역할

기존 코드와 DB 행을 대조해 오탐을 만드는 가정을 찾고, VEX 원문을 전수 분석해 스키마와 판정 순서를 정했습니다. 이어서 수집기·파서·변경 행 적재 로직과 Airflow DAG를 구현하고 시험 적재와 회귀 검증을 맡았습니다. 수집기 개발 완료와 운영 배포 상태는 구분해 기록했습니다.

관련 항목: 멀티 배포판 OS 패키지 수집 개편 · OS 패키지 취약점 수집 정확도 개선