본 문서는 2025년 12월 10일 기준으로 작성되었습니다.
엘라스틱 Security에서 룰 설정에 관한 내용을 정리합니다.
Security → Rules에서 SIEM 룰을 설정할 수 있습니다.
Create Rule 화면에서 총 7가지의 유형을 확인할 수 있습니다.
Custom query (KQL): 단일 문서를 조건식으로 매칭합니다.
Event Correlation (EQL): 서로 다른 이벤트의 시퀀스를 분석할 수 있습니다.
ES|QL: 고급 통계·다단계 집계가 가능합니다.
Indicator Match: 특정 인디케이터와 매칭합니다.
New Terms: '처음 등장' 값을 감지합니다.
Threshold: 집계 결과가 임계값을 초과할 때 트리거합니다.
Machine Learning: ML Job 결과를 기반으로 통계적 이상치를 감지합니다.
KQL은 Kibana 화면에서 필터를 직관적으로 작성할 수 있도록 만든 질의 언어입니다.
필드 이름·연산자·값을 조합해 필터 조건만 기술한다는 점이 특징입니다.
대량 와일드카드는 성능에 영향을 줄 수 있습니다.
EQL은 보안 탐지·헌팅용으로 설계됐습니다. 이벤트의 순서를 다룰 수 있다는 것이 핵심입니다.
KQL만으로는 순서를 표현할 방법이 없고, 2단계 이상 상관 탐지는 Threshold의 ‘cardinality×시간’ 방식으로 우회해야 합니다.
KQL은 *pattern* 와일드카드나 : " 검색 정도만 지원해 JSON 서브필드 안까지 가시성 확보가 번거로운 반면, EQL은 함수 호출 한 줄이면 끝납니다.
필터, 집계, 변환을 한 번에 수행합니다.
대규모 로그·메트릭 탐색, ad‑hoc 분석, 시각화에 적합합니다.
스키마 제약이 거의 없으며 행(row) 단위 블록 처리 엔진에서 직접 실행합니다.
Join 기능이 강력합니다. 다만 이벤트 순서를 다루려면 EQL을 사용해야 합니다.
특정 인디케이터와 일치하면 경보를 발생시킵니다.
주로 TI 연동에 사용됩니다.
방화벽·프록시·EDR 등의 이벤트 IP를 IOC IP와 비교합니다.
필드명을 ECS 스키마에 맞춰야 정확도가 높습니다.
지정한 필드 값이 과거 N 일 동안 한 번도 등장하지 않았을 때 첫 등장(=새 용어)을 경보로 올리는 룰입니다.
최대 3개 필드를 조합해 “이 조합이 처음 나타났다”를 잡아낼 수 있습니다.
새로운 내부 IP 등장, 새로운 실행 파일 해시, 계정·단말 조합 최초 사용 탐지 등에 활용됩니다.
Threshold 유형은 특정 임계치를 넘으면 경보를 발생시키는 룰입니다.
Count는 고유값의 카디널리티를 집계하는 기능입니다.
위의 룰은 해당 그룹이 두 조건을 모두 만족하면 알림을 1건 생성합니다.
전체 이벤트 수 10000건 이상
고유 source.ip 수 200개 이상
ML 룰은 ML Job 결과가 특정 점수 이상이 탐지되었을 때 경보를 발생시킵니다.
ML Job 설정은 아래와 같이 구성됩니다.
Function
어떤 통계 함수로 이상치를 찾을지 설정합니다.
count, sum, mean, max, rare, time_of_week 등 50여 개 함수가 있습니다.
Field
함수가 값을 읽어 올 대상 필드입니다.
sum, mean, max 등 metric 계열은 숫자 필드가 필요합니다.
By field
개체(entity)별 ‘자기 과거’와 비교합니다.
동일 필드 값을 가진 레코드를 묶어, 각 개체의 히스토리 기반 모델을 생성합니다.
Over field
전체(population) 평균과 비교합니다.
선택한 필드 값을 ‘모집단’으로 보고, 각 모집단 평균에서 벗어나는지를 평가합니다.
Partition field
완전히 독립적인 서브‑모델로 분리합니다.
값마다 개별 베이스라인을 갖추고 서로 영향받지 않습니다.
Exclude frequent
모델이 너무 자주 등장하는 값 때문에 ‘항상 정상’으로 판단하는 현상을 방지합니다.
none | all | by | over 중 어느 축에서 제외할지 선택할 수 있습니다.
구성 순서
관심 지표를 먼저 정합니다 → 적합한 Function + Field 선택.
Anomaly를 누구 기준으로 볼지에 따라 by/over/partition 중 하나 또는 조합을 지정합니다.
단일 엔티티 이상: by user.name
집단 대비 이상: over host.name
둘 다 필요할 때: high_count by process.name over host.name
잦은 노이즈가 문제라면 exclude_frequent로 필터링을 시험합니다.
예제
high_count by user.name over host.name
같은 user.name이 다른 host.name에서 기록한 건수들의 typical과 비교합니다.
같은 host.name에서 다른 user.name이 기록한 건수들의 typical과 비교하는 것이 아닙니다.
이는 high_count over user.name partition_field_name=host.name으로 표현할 수 있습니다.
over 부분을 비교하는 셈입니다.
이와 관련하여 자세한 내용은 아래 링크를 참고하세요.
머신러닝 기능은 다른 솔루션에 비해 설정이 간단하고 강력합니다.
특히 Anomaly Detection을 다양한 보안 시나리오에서 쉽게 응용할 수 있어 편리합니다.
엘라스틱은 Join 기능을 강화하기 위해 ES|QL을 지속적으로 발전시키고 있습니다.