프로젝트 · 2026.06 –

Detection Rule Studio

탐지 룰 생성·검증 도구

LLM으로 Wazuh 룰·디코더를 생성하고 자가검증 루프로 바로잡으며, Suricata 룰 운영과 CVE 기반 룰 생성까지 한 서비스에서 처리

오류 피드백룰 요청new · tune · correlate빈 ID 계산LLM 생성temp 0검증기XML · ID · regexWazuh logtestdiff 미리보기룰 배포쓰기 스위치NVD CVESID 토글ET Openroot 래퍼백업→쓰기→-T→복구Suricata 센서
직접 구현저장소외부 시스템

문제

Wazuh XML 룰을 손으로 쓰면 오류가 잦았다. 룰 ID가 충돌하고, 정규식 엔진 문법을 틀리고, 디코더의 order와 캡처 그룹 수가 어긋났다. 새로 도입한 NGIPS 장비는 syslog 디코더를 처음부터 만들어야 했다.

해결

LLM이 룰을 생성하면 검증기가 검사하고, 실패하면 오류를 다시 LLM에 넣어 재생성하는 자가검증 루프를 만들었다. 결과는 Wazuh logtest와 실제 장비 로그로 한 번 더 확인한다.

주요 기능

  • 룰 생성 3가지 모드
    • new: 신규 탐지 룰
    • tune: if_sid/overwrite로 기존 룰을 억제하거나 승격
    • correlate: frequency/if_matched_sid로 묶는 상관 룰
  • 디코더 생성·검증: order 필드와 캡처 그룹 개수가 맞는지 확인한다.
  • 일괄 생성: 장비 로그 정의서의 필드맵으로 디코더와 룰 여러 개를 결정적으로 만들고, logtest 결과와 대조한다.
  • diff 미리보기: 기존 룰 파일과 생성 결과를 줄 단위로 비교한다.
  • Suricata 운영: 원격 센서의 SID 사용/사용안함 전환, ET Open 업데이트, 예외 IP 처리, NVD CVE 기반 룰 생성, 스케줄링

설계 포인트

  • 자가검증 루프: XML 형식, ID 대역, 충돌, 정규식 엔진 규칙, 모드별 필수 구조를 검사하고 실패 사유를 피드백해 다시 생성한다. temperature=0과 고정 시드로 결과를 재현할 수 있다.
  • ID는 코드가 정한다: 사용 중인 수천 개 ID를 프롬프트에 나열하지 않고 다음 빈 ID를 계산해 준다. 토큰과 재시도가 함께 줄었다.
  • 최소 권한 root 래퍼: sudo로는 고정된 서브커맨드만 실행할 수 있다. 쓰기는 백업 → 쓰기 → suricata -T 검증 → 실패 시 복구 순서로 진행한다. 파싱은 권한 없는 쪽에 둬서, 로직을 바꿔도 래퍼를 다시 설치할 필요가 없다.
  • 쓰기 안전 스위치: 운영 룰 파일 쓰기는 기본적으로 막혀 있고, 명시적으로 켜야만 동작한다.
  • 실제 로그로 검증: 랩에서 저강도 공격 세트로 NGIPS 로그를 실제로 발생시켜, 미확정이던 필드 값을 확정했다.
  • 관측성: 모든 응답에 소요시간, LLM 시간, 시도 횟수, 모델이 포함된다.

스택

Python · FastAPI · pydantic v2 · httpx · APScheduler · Wazuh Manager API (logtest) · Suricata · NVD API 2.0 · 로컬 LLM (LM Studio) · systemd