이번 글에서는 Detection as Code(DaC)를 활용해 Sigma 규칙을 Git CI/CD 파이프라인으로 자동화하는 방법을 실전적으로 정리해드리겠습니다.
Splunk와 PantherLabs 자료에 따르면, DaC는 탐지 규칙을 코드처럼 작성하고, Git 저장소에 버전 관리하며, CI/CD로 테스트·배포하는 방식으로, 기존 GUI 룰 관리의 한계를 넘어섭니다.
즉, "룰 하나 추가에 3시간"에서 "PR 승인 후 3분 자동 배포"로 바뀌는 구조입니다.
◎ DaC가 필요한 이유
- 전통 SOC는 SIEM GUI에서 룰을 손으로 작성·테스트·배포합니다.
- 문제는 버전 관리 불가, 오탐 테스트 누락, 환경별 중복 작업입니다.
- DaC는 이를 해결하기 위해 코드처럼 취급합니다.
- Git: 버전 관리, PR 리뷰.
- CI/CD: 자동 테스트, 변환, 배포.
- Sigma: 플랫폼 독립 규칙.
- 결과: 탐지 개발 속도 5배↑, 오탐 80%↓.
◎ DaC 파이프라인 아키텍처
| GitHub Repo (Sigma YAML) ↓ PR GitHub Actions CI - sigma validate - sigma convert (Splunk/Elastic) - FP 테스트 (BOTSv3 EVTX) - 문서 생성 ↓ 승인 CD 배포 (SIEM API/파일) |
- 핵심 컴포넌트
- 저장소: GitHub/GitLab.
- 변환기: sigma-cli.
- 테스트 데이터: BOTSv3, evtx-baseline.
- 배포: SIEM API 또는 파일 배포.
1단계: Git 저장소 준비
- 디렉토리 구조:
| dac-sigma/ ├── rules/ │ ├── windows/ │ └── linux/ ├── tests/ │ ├── botsv3/ │ └── fp-baseline/ ├── pipelines/ │ ├── splunk_windows.yml │ └── elastic_ecs.yml └── .github/workflows/dac.yml |
- 샘플 규칙 (rules/windows/process_creation/win_ps_brute.yml)
| title: PowerShell Brute Force id: dac-ps-brute-001 logsource: category: process_creation product: windows detection: selection: Image|endswith: '\powershell.exe' CommandLine|contains: 'net user' condition: selection tags: - attack.credential_access - attack.t1078 |
2단계: CI 파이프라인 구축 (GitHub Actions)
- .github/workflows/dac.yml
| name: DaC Pipeline on: [push, pull_request] jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3.11' - run: pip install sigma-cli - name: Sigma Validate run: sigma validate rules/ - name: Sigma Convert run: | sigma convert rules/windows/*.yml --target splunk --pipeline splunk_windows > splunk_rules/ sigma convert rules/linux/*.yml --target elasticsearch --pipeline ecs_linux > elastic_rules/ test: needs: validate runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: | # BOTSv3 테스트 (다운로드 필요) sigma test rules/ tests/botsv3/ - name: FP Test run: sigma test --fail-on-fp rules/ tests/fp-baseline/ deploy: needs: test if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Deploy to Splunk run: | # Splunk API 또는 scp 배포 scp splunk_rules/ splunk-server:/opt/splunk/etc/apps/dac_rules/ - name: Notify Slack uses: 8398a7/action-slack@v3 with: status: success |
3단계: 테스트 데이터셋 준비
- BOTSv3 Dataset:
| # 다운로드 (GitHub 또는 S3) wget https://github.com/sbousseaden/BOT-Some9/releases/download/2024-RC1/BOTSv3-2024-RC1.zip unzip BOTSv3-*.zip -d tests/botsv3/ |
- FP Baseline
| # 정상 환경 EVTX (오탐 테스트용) tests/fp-baseline/ ├── dc01-security.evtx └── workstation.evtx |
- 테스트 명령
| sigma test rules/windows/*.yml tests/botsv3/ --fail-on-fp igma/ |
4단계: SIEM별 변환 파이프라인
- Splunk
| sigma convert --target splunk --pipeline splunk_windows rules/windows/*.yml # 출력: index=* sourcetype="WinEventLog:Security" EventCode="4688" ... |
- Elastic
| sigma convert --target elasticsearch --pipeline ecs_windows rules/windows/*.yml # 출력: event.code: "4688" and process.name: "powershell.exe" ... |
- Sentinel (KQL)
| sigma plugin install sentinel sigma convert --target sentinel rules/windows/*.yml |
5단계: 배포 자동화
- Splunk API 배포
| # savedsearches.conf 형식 생성 sigma convert --format savedsearches rules/ -o splunk_savedsearches.conf # Splunk REST API curl -k -u admin:pass https://splunk:8089/servicesNS/nobody/search/saved/searches \ -d name="dac_ps_brute" \ -d search="index=* EventCode=4688 ..." |
- 파일 배포
| rsync -av splunk_rules/ splunk-server:/opt/splunk/etc/apps/dac_rules/local/ ssh splunk-server "/opt/splunk/bin/splunk reload saved-searches" |
6단계: 모니터링과 피드백
- DaC 대시보드 (Grafana)
| - 규칙 수: 1,247개 - 커버리지: ATT&CK 78% - FP Rate: 2.3% - 배포 성공률: 99.8% |
- 자동 리뷰
| # GitHub Issue 생성 (오래된 규칙) - name: Mark Stale Rules run: | sigma check --stale rules/ > stale_rules.md gh issue create --title "Stale Sigma Rules" --body-file stale_rules.md |
7단계: 고급 기능
- Meta Rules
| correlation: type: event_count rules: - failed_logon - privilege_escalation timespan: 30m |
- 다중 SIEM 동시 배포:
| parallel: splunk: sigma convert --target splunk elastic: sigma convert --target elasticsearch sentinel: sigma convert --target sentinel |
- ATT&CK 커버리지:
| S2AN -d rules/ -w > attck_layer.json |
◎ 운영 팁
- PR Template
| ## Rule Details - **Logsource**: windows/process_creation - **Test EVTX**: 첨부 - **ATT&CK**: T1078.002 ## Changes - 오탐 필터 추가 |
- Branch Protection:
| - Require PR reviews (2명) - Status checks (validate, test) - Dismiss stale approvals |
- Rollback:
| git revert HEAD # 자동 재배포 |
◎ 마무리
Detection as Code는 Git + Sigma + CI/CD로 SOC를 코드처럼 운영하는 미래입니다.
수동 GUI 작업에서 벗어나 PR 승인 후 3분 자동 배포, 오탐 자동 테스트, 다중 SIEM 동시 관리로 효율 5배 향상됩니다.
'IT > Sigma Rule' 카테고리의 다른 글
| [Sigma Rule] 제18화: Sigma + Cloud Security 통합 (0) | 2026.05.09 |
|---|---|
| [Sigma Rule] 제17화: Sigma + EDR 통합 (0) | 2026.05.08 |
| [Sigma Rule] 제15화: 오픈소스 Sigma 레포지토리 200% 활용법 (CTI 연동 전략) (0) | 2026.05.06 |
| [Sigma Rule] 제14화: 단일 로그의 한계를 넘는 메타 룰(Meta Rule)과 상관분석 (0) | 2026.05.05 |
| [Sigma Rule] 제13화: "알람 지옥에서 탈출하라!" 오탐(False Positive) 튜닝의 기술 (0) | 2026.05.04 |
