Files
dela 0335d572de
ci / go (push) Waiting to run
ci / go-db (agent) (push) Waiting to run
ci / go-db (config) (push) Waiting to run
ci / go-db (db) (push) Waiting to run
ci / go-db (evidence) (push) Waiting to run
ci / go-db (llmrec) (push) Waiting to run
ci / go-db (server) (push) Waiting to run
web / web (push) Waiting to run
docs / links (push) Canceled after 0s
detections / detections (push) Canceled after 0s
First Commit
2026-10-09 08:38:16 +08:00

83 lines
4.5 KiB
YAML

name: detections
# 탐지 규칙(Sigma·Suricata·ATT&CK 레이어)이 바뀌는 푸시·PR 마다, 그 규칙이 실제로
# 발화하고, 여러 SIEM 백엔드로 변환되며, 커버리지 레이어가 규칙과 일치하고, 지표가 상류
# 소스와 여전히 맞으며, SigmaHQ 관례 전체 검증을 통과하는지 재현 테스트로 검증한다. 규칙만
# 바꾸고 테스트·레이어를 갱신하지 않은 변경은 여기서 빨갛게 드러난다. CONTRIBUTING.md 와
# detections/tests/README.md 가 약속하는 "여덟 테스트가 기여 계약을 기계적으로 강제한다"를
# 머지 게이트로 실제로 뒷받침하는 워크플로다. Go 빌드·정적 분석·테스트는 ci.yml 이 맡는다.
# 여덟 테스트에 더해, 규칙이 아닌 두 게이트도 같은 머지 게이트에서 돈다: 하네스 레지스트리
# 동기 검사와, 호스트 분류 도구(detections/triage/artex_host_triage.py)의 자가 테스트다.
# 둘 다 여덟 규칙 테스트와 별개이고 run-all.sh 가 똑같이 돌린다.
#
# 여덟 테스트는 Docker 만 있으면 돈다(ubuntu-latest 러너에 Docker 가 들어 있다). 러너가
# sigma-cli·scapy·suricata·python 이미지를 내려받아 컨테이너에서 격리 실행하므로 러너
# 자체에는 아무것도 설치하지 않고, 규칙 트리와 지표가 가리키는 소스 파일을 읽기 전용으로만
# 마운트해 저장소에 쓰지 않는다. detections/ 아래가 바뀔 때 외에, 지표 테스트가 고정해 둔
# 소스 파일이 바뀔 때도 돌린다. enrich·selfupdate·guard·db 의 User-Agent·마커·파괴명령
# 토큰, cmd/artex/main.go 의 기본 리슨·프록시 포트, traffic/traffic.go 의 MITM CA 인증서
# 파일명, db/schema.sql 의 탐색 그래프 스키마 지문이 여기에 해당한다. 소스 변경이 지표를
# 바꿔 규칙·지표 목록이 조용히 낡는 경우를 머지 게이트에서 잡는다. 공개 Docker 이미지를 인증
# 없이 내려받으므로 드물게 Docker Hub 내려받기 속도 제한에 걸릴 수 있고, 그때는 작업을
# 다시 돌리면 해소된다.
on:
push:
paths:
- "detections/**"
- "enrich/enrich.go"
- "selfupdate/github.go"
- "selfupdate/stage.go"
- "guard/guard.go"
- "db/db.go"
- "db/schema.sql"
- "cmd/artex/main.go"
- "traffic/traffic.go"
- ".github/workflows/detections.yml"
pull_request:
paths:
- "detections/**"
- "enrich/enrich.go"
- "selfupdate/github.go"
- "selfupdate/stage.go"
- "guard/guard.go"
- "db/db.go"
- "db/schema.sql"
- "cmd/artex/main.go"
- "traffic/traffic.go"
- ".github/workflows/detections.yml"
permissions:
contents: read
# 같은 브랜치에 새 푸시가 오면 앞선 실행을 취소해, 자주 푸시하는 동안 불필요한 실행이
# 쌓이지 않게 한다.
concurrency:
group: detections-${{ github.ref }}
cancel-in-progress: true
jobs:
detections:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: 테스트 하네스 레지스트리 동기 검사 (run-all.sh ↔ CI ↔ 디렉터리)
run: detections/tests/check-harness-sync.sh
- name: 호스트 트리아지 도구 자가 테스트 (artex_host_triage.py --self-test · 규칙 아닌 게이트)
run: detections/tests/triage-selftest.sh
- name: Sigma 규칙 재현 테스트 (sigma check + 백엔드 변환 + 지표 보존)
run: detections/tests/sigma/run.sh
- name: Sigma 실제 이벤트 매칭 테스트 (원자·상관 규칙이 악성 샘플/타임라인에 발화·정상에 침묵)
run: detections/tests/sigma_match/run.sh
- name: Sigma SigmaHQ 관례 린트 (전체 검증기 세트 + 문서화된 기준)
run: detections/tests/sigma_lint/run.sh
- name: Sigma 백엔드 이식성 테스트 (상관 규칙이 여러 백엔드에서 변환되는지 확인)
run: detections/tests/sigma_backends/run.sh
- name: Suricata 규칙 재현 테스트 (pcap 합성 → suricata -r → 경보 수 단언)
run: detections/tests/suricata/run.sh
- name: ATT&CK 레이어 ↔ 규칙 정합 테스트
run: detections/tests/attack/run.sh
- name: 탐지 지표 ↔ 상류 소스 일치 테스트 (상류 재동기화 드리프트 가드)
run: detections/tests/indicators/run.sh
- name: 지표 MISP 내보내기 ↔ CSV 동기화 테스트 (pymisp 로 MISP 형식 유효성 검증)
run: detections/tests/misp/run.sh