
CISA KEV, ThreatFox, URLhaus, MalwareBazaar 피드를 집계하는 위협 인텔리전스 관측소로, 검색, 변경 추적 및 STIX/CSV/JSONL 내보내기를 지원합니다.
악용된 취약점과 위협 지표를 검사하고, 해당 출처 증거를 확인하며, 보존된 변경 사항을 검토하세요.
실시간 관측소 열기 · KEV 둘러보기 체험 · 출처 범위 · 직접 실행하기
관측소는 CISA KEV, ThreatFox, URLhaus, MalwareBazaar를 하나의 분석가 작업 공간으로 통합합니다. 이를 사용하여 출처 레코드를 검사하고, 출처 날짜와 수집 시각을 구분하며, 범위가 제한된 현재 상태 결과를 내보낼 수 있습니다. 누락되었거나, 오래되었거나, 비활성화되었거나, 사용할 수 없는 데이터는 눈에 띄게 표시된 상태로 유지됩니다.
7일 보기에서 일치 항목이 반환되지 않으면 CURRENT KEV CATALOG를 사용하여 기존 항목을 검사하세요. 성공적인 빈 결과, 오래된 출처, 사용할 수 없는 읽기는 서로 다른 의미를 가집니다. 어느 것도 귀하의 시스템이 영향을 받지 않았다는 것을 입증하지 않습니다.
결과: 날짜 기준과 수집 한계가 표시된 상태로 검사하고 참조할 수 있는 출처 기반 CVE 레코드입니다. 이 워크플로는 귀하의 자산이 취약한지 여부를 판단하지 않습니다.
내보내기는 별도의 워크플로입니다. Pulse, Infrastructure, URLs, Malware에서 시작하여 시간 범위를 선택하고 사용 가능한 검색 또는 필터를 적용합니다. 그런 다음 Export를 선택하고, 출처 선택과 표시된 페이지 수를 검토하고, JSONL, CSV, STIX 2.1, 무력화 텍스트 또는 매니페스트를 선택한 후 결과를 다운로드합니다.
내보내기는 선택한 정책이 적용된 후 로드된 페이지를 대상으로 합니다. 내보낸 수와 지원되지 않는 수를 검토하세요. 전용 Exploited 작업 공간의 KEV 필터는 내보내기로 직접 이어지지 않습니다.
현재 출처 상태, 중요 변경 이벤트, 가져오기 원격 측정은 서로 분리되어 유지됩니다. 인터페이스는 데모 레코드나 추론된 귀속으로 대체하지 않습니다. 수집은 수요 기반이며, 이 배포는 지속적인 모니터링을 주장하지 않습니다.
구현과 한계는 아래에 문서화되어 있으며, 출처 범위, 보존, 출처 정보, 내보내기 의미를 포함합니다.

Pulse — 출처 간 관계, 출처 상태, 현재 상태 분석.

Replay — 보존된 NEW, UPDATED, REMOVED 전환의 페이지 범위 재구성.
추가 실시간 화면에는 대략적인 공인 IP 인프라 지리 정보와 자체 URLhaus / MalwareBazaar 증거 뷰가 포함됩니다. 해당 화면은 이 README에서 의도적으로 자리 표시자나 중복 스크린샷으로 표현하지 않습니다.
프로덕션 캡처는 실시간 v1.2.0 관측소에서 가져온 출처 보존 스크린샷입니다. 프레젠테이션을 위해 잘라내고 크기를 조정/압축했으며, 표시된 증거, 타임스탬프, 수치, IOC 값, 인터페이스 상태는 재생성되거나 대체되지 않습니다.
프로덕션 Worker는 Cloudflare D1을 기반으로 합니다. 피드 자격 증명은 서버 전용 Cloudflare Worker 시크릿으로 유지되며 브라우저에서 요구되지 않습니다.
1.2.222.13.0 이상이 배포는 demand-driven 모드로 실행됩니다. 저장소는 이제 표준 Cloudflare Workers를 직접 대상으로 하며, v1.2.2에서는 예약 트리거가 의도적으로 활성화되지 않으므로 애플리케이션은 지속적 수집을 주장하지 않습니다. 향후 스케줄러는 별도의 정확성 및 운영 검증 후 동일한 runIngestionCycle() 작업을 호출할 수 있습니다.
브라우저는 최초 사용 시 그리고 열려 있는 동안 5분마다 명시적인 제한된 유지보수 요청을 수행합니다:
POST /api/ingest
↓
runIngestionCycle()
↓
configuration → TTL → backoff → D1 lease → fetch → normalize → validate
↓
snapshot cache + current observations + material events + cycle statistics
일반 읽기는 별개이며 로컬에서 이루어집니다:
GET /api/observations → D1 current state, scoped before pagination
GET /api/search → D1 current state, scoped before pagination
GET /api/kev → D1 current CISA catalog
GET /api/events → D1 material change ledger
GET /api/geo → local observations + bounded cached IP enrichment
이 GET 라우트 중 어느 것도 소스 어댑터를 호출하지 않습니다. 이 프로젝트가 나중에 진정으로 지원되는 스케줄러를 갖추게 되면, 두 번째 갱신 구현을 만들지 않고도 동일한 runIngestionCycle() 작업을 호출할 수 있습니다.
| 소스 | 자격 증명 | TTL | 실제 커버리지 |
|---|---|---|---|
| CISA KEV | 없음 | 30분 | 전체 현재 검증된 카탈로그 |
| ThreatFox | THREATFOX_AUTH_KEY | 15분 | 요청된 24시간 IOC 윈도우 |
| URLhaus | URLHAUS_AUTH_KEY | 15분 | recent 엔드포인트가 반환한 최신 500개 레코드 |
| MalwareBazaar | MALWAREBAZAAR_AUTH_KEY | 15분 | 엔드포인트가 반환한 최신 100개 메타데이터 레코드 |
커버리지는 소스별로 표시됩니다. 범위가 제한된 API는 완전한 카탈로그로 제시되지 않습니다.
DB 바인딩은 서로 구분되는 데이터셋을 소유합니다:
threat_source_cache 및 threat_source_cache_chunks: 최신 검증된 소스별 스냅샷으로, 세대 키 기반 청크로 저장됩니다.observations: 안정적인 소스 식별자별 최신 정규화된 현재 상태입니다. 최초 수집, 최신 소스 목격, 마지막 실질적 변경, 현재 해시, 리비전 횟수, 최신 수집 결과를 보존합니다.observation_events: 의미 있는 NEW, UPDATED, 그리고 근거 있는 REMOVED 증거 이벤트입니다. 이전 및 현재 정규화된 페이로드, 해시, 결정적 필드 diff를 통해 이전 상태를 재구성할 수 있습니다.source_fetch_log: 응답 본문이나 자격 증명이 없는, 범위가 제한된 fetch 시도 텔레메트리입니다.source_ingest_cycles: fetched, valid, rejected, new, updated, unchanged, removed 레코드에 대한 범위가 제한된 갱신별 카운트입니다.source_refresh_lease: 동시에 실행되는 isolate가 업스트림 갱신을 중복 수행하지 않도록 방지하는, D1 기반의 소스별 단기 임차입니다.ingestion_runtime: 최신 전체 수집 사이클 상태입니다.geo_ip_cache: 검증된 대략적 IP 지오로케이션 결과와 범위가 제한된 네거티브 캐시 항목입니다. 성공한 결과는 30일 후 만료되며, 실패한 조회는 5분 후 재시도됩니다. 만료된 D1 행은 GEO 요청 중 기회적으로 제거되며, isolate 폴백은 최대 2,000개 항목으로 제한됩니다.런타임 스키마 정의는 db/schema.ts에 있습니다. 초기화는 종속 인덱스를 생성하기 전에 기존 observations 테이블에 새로운 현재 상태 컬럼을 추가합니다.
다음 질문들은 의도적으로 서로 다릅니다:
observations와 검증된 소스 스냅샷이 이에 답합니다./api/observations?window=...는 업스트림 observedAt을 기준으로 현재 관측을 필터링합니다.observation_events와 /api/revisions가 이에 답합니다.현재 상태는 7일 이력 테이블로 부정확하게 설명되지 않습니다. 실질적 이벤트 원장은 7일 동안 보존됩니다. fetch 및 사이클 텔레메트리는 2일 동안 보존되며 소스당 최대 200개 행으로 제한됩니다. 카탈로그가 아닌 현재 관측 중 7일 동안 다시 나타나지 않은 것은 정리됩니다. CISA는 모든 성공적인 응답이 전체 카탈로그이므로 현재 상태로 유지됩니다. 해당 카탈로그에서 제거된 행은 정리 전까지 30일 동안 사용 가능합니다.
현재 CISA의 부재만이 REMOVED 이벤트를 생성할 수 있는데, 그 어댑터가 전체 현재 카탈로그를 검색하기 때문입니다. 범위가 제한된 ThreatFox, URLhaus, MalwareBazaar 결과에서의 부재는 삭제로 간주되지 않습니다.
변경되지 않은 목격은 현재 lastObservedInSnapshotAt/lastIngestedAt을 갱신하지만 이벤트를 생성하거나 revisionCount를 증가시키지 않습니다. lastChangedAt은 이후의 변경되지 않은 목격에서도 유지됩니다.
Exploited 뷰는 다음을 구분합니다:
dateAdded가 명시적인 TODAY, 7D, 또는 30D 범위에 속하는 레코드입니다. 일 미만의 Observatory 윈도우는 CISA 정밀도로 제시되지 않습니다.현재 카탈로그는 서버 측 검색, 공급업체, 제품, 신규 추가, 랜섬웨어 연관성, 추가 날짜 필터, 그리고 불투명 커서 페이지네이션을 지원합니다. CVE, 공급업체, 제품, 취약점 이름, 추가 날짜, 기한, 랜섬웨어 연관성, 필수 조치를 표시합니다. CVSS 점수를 임의로 만들어내지 않습니다.
콘텐츠 해시는 정규화된 증거 필드를 대상으로 하며, Observatory의 부기 정보는 포함하지 않습니다. 해시가 변경되면 이전 정규화 페이로드, 새 정규화 페이로드, 이전/새 해시, 그리고 다음 항목에 대한 결정적 diff를 포함하는 UPDATED 이벤트가 생성됩니다:
출처 드로어는 /api/revisions?id=...를 조회하여 현재 해시, 마지막 실질 변경, 리비전 수, 보존된 이벤트, 필드 수준 diff를 노출합니다. 휘발성 수집 타임스탬프는 콘텐츠 diff에 나타나지 않습니다.
드로어는 또한 승인된 모든 레코드에 대해 버전이 지정된 증거 추적을 노출합니다: 승인된 정규화 필드, 부재로 남은 선택적 필드, 표시 전용 변환, 분류 근거, 안정적 식별 근거. 이 추적은 보존된 증거만을 설명합니다. 거부된 업스트림 값은 보존되지 않으며, 절대 합성된 Observatory 식별자가 부여되지 않습니다. 거부는 필드 및 사유 코드가 제한된 사이클별 집계 수치로 별도로 표현되며, 해당 스키마 이전에 수집된 오래된 사이클은 재구성되지 않고 세부 분석이 없는 것으로 표시됩니다.
최근 이벤트는 실질 변경만 표시합니다. 전체 CISA 새로고침 후 수백 개의 변경되지 않은 SEEN 행을 내보내지 않습니다. 해당 목격 정보는 소스 사이클 통계로 요약됩니다.