본문 바로가기
AI, IT 이야기

Elasticsearch Lucene Query 사용 사례 - 1편

by xpassage 2025. 6. 10.
반응형

제가 근무중인 보안팀에서는 수많은 보안 위협 이벤트에 대한 탐지 및 분석용으로 Elasticsearch 플랫폼을 이용중에 있는데요. 이번 글에서는 엘라스틱서치의 기본 쿼리 문법에 대해 예시를 들어 보안 위협 이벤트 발생시 어떻게 분석하는지 설명드리도록 하겠습니다. 엘라스틱서치는 Lucene이라는 검색 엔진 오픈 소스가 내장되어 있습니다.

 

Lucene Query 문법 (간단한 몇 가지만 숙지하면 누구나 쉽게 검색 가능합니다)

 

  • AND: 그리고
  • OR: 혹은
  • NOT: 제외

 

같은 의미의 다른 표현도 사용 가능합니다.

 

  • &&: AND
  • ||: OR
  • !: NOT

 

* null 값이 없는 경우 예시: source.country_code2에 값이 null이 아닌 로그만 검색할 경우 _exists_:source.country_code2 사용

 

그 외의 다양한 문법에 대한 자세한 내용은 [Lucene Query Syntax](http://www.lucenetutorial.com/lucene-query-syntax.html)를 참고하시면 도움이 될 것입니다.

 

기본적인 위 3가지 문법만 이해하고 있더라도 대부분 보안 이벤트 로그를 검색하는 데 충분합니다.

 

사용 예시 (Elastic Query Example)

 

- Query: source.country_code2:CN

 

설명: 전체 로그 중 출발지 국가가 중국인 로그만 필터링.

 

Elasticsearch Lucene Query 예시
엘라스틱 서치 쿼리 예시

 

- Query: destination.country_code2:(BR OR CN OR IL) AND sourceAddress:10.*

 

설명: 목적지 국가가 브라질, 중국, 이란 중 하나이고 출발지가 10.0.0.0/8 대역에 해당하는 로그를 검색.

 

- Query: !destination.country_code2:(KR || US) AND !destinationPort:(25 || 53 || 80 || 443 || 161 || 5518) && deviceAction:Permit && !name:"SYN Port Scan" && !deviceProduct:IPSA01

 

설명: 목적지가 한국 또는 미국이 아니고, 목적지 포트가 25, 53, 80 등의 포트를 제외하며, SYN Port Scan 로그와 IPSA01 장비 이벤트는 제외하고 Permit된 액션만 필터링.

 

- Query: !destination.country_code2:(KR || US || JP) && deviceAction:(Permit || Accept) && !destinationAddress:("10.0.0.0/8" || "192.168.0.0/16" || "172.0.0.0/8") && !destinationPort:(80 || 25 || 2048 || 53 || 161 || 443 || 445 || 137 || 123) && !transportProtocol:ICMP

 

설명: 목적지가 한국, 미국, 일본이 아니며, 특정 IP 대역과 포트를 제외하고 ICMP 프로토콜이 아닌 이벤트만 추출.

 

예시와 같이 검색 쿼리에 익숙해지면 보안 이슈 대응을 위한 로그 검색 시간이 단축되고 효율이 극대화됩니다.

 

보안 장비별로 Elasticsearch Query 분석 예시

 

- Firewall 해당 장비별 특징

 

 

  • DMZFW01: DMZ 1차
  • DMZFW02: DMZ 2차
  • NAVFW01: 1구역 존
  • NAVFW02: 1구역 존
  • NAV2FW01: 2구역 존 (2차)
  • NAV2FW02: 2구역 존 (2차)

 

- deviceHostName:(NAVFW01 || NAVFW02 || DMZFW01 || DMZFW02 || NAV2FW01 || NAV2FW02) && deviceAction:accept

 

설명: 특정 방화벽 장비에서 accept된 이벤트만 필터링.

 

- deviceHostName:(NAVFW01 || NAVFW02 || DMZFW01 || DMZFW02 || NAV2FW01 || NAV2FW02) AND deviceAction:accept AND !destinationPort:(5052 OR 53 OR 110 OR 161 OR 123 OR 2048)

 

설명: 특정 방화벽 장비에서 accept 되었으나 특정 포트가 아닌 이벤트만 추출.

 

- deviceHostName:(NAVFW01 || NAVFW02 || DMZFW01 || DMZFW02 || NAV2FW01 || NAV2FW02) AND !destination.country_code2:KR AND !destinationPort:(5052 OR 53 OR 110 OR 161 OR 123 OR 2048) AND deviceAction:accept

 

설명: 특정 방화벽 장비에서 목적지 국가가 대한민국이 아니며, 특정 포트가 아닌 이벤트만 필터링.

 

지금까지 Elasticsearch를 활용한 보안 이벤트 분석 예시를 보면 알겠지만, 엘라스틱 lucene 쿼리는 정말 유연하고 확장성 있는 조합으로 내가 원하고자 하는 결과 값을 도출하는데 있어 매우 훌륭한 솔루션이 될 수 있습니다.

 

 

 

 

반응형