Elasticsearch Query Example
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
1. 엘라스틱서치는 lucene 이라는 검색 엔진 오픈 소스를 내장하고 있음.
2. Lucene Query 문법 (몇 가지만 알고 있으면 누구나 쉽게 검색 가능)
AND <- 그리고
OR <- ~이거나
NOT <- 아닌것
아래도 동일한 의미 둘중 편한것으로 사용하면됨.
&& <- AND
|| <- OR
! <- NOT
* null 값이 없는것 예: source.country_code2 국가코드가 없는것은 제외하고 싶을때
_exists_:source.country_code2
이외에도 다양한 문법이 있으나 자세한건 http://www.lucenetutorial.com/lucene-query-syntax.html 참조.
위에 3가지만 숙지하고 있어도 대부분의 찾고자 하는 보안이벤트 로그 검색은 가능함.
3. 사용 예 (elastic query example)
* 현재 ArcSight -> ELK STACK (FW,IPS,WAF,VPN 등) 모든 보안 이벤트 로그를 받고 있음
Query : source.country_code2:CN
설명 : 전체 로그중 출발지 국가가 중국인 로그만 검색
Query : destination.country_code2:(BR OR CN OR IL) AND sourceAddress:”1.24.13.0/24″
설명 : 목적지 국가가 “브라질” 이거나 “중국” 이건 “이란” 그리고 출발지가 1.24.13.0 c클래스 IP 대역만 검색
Query : !destination.country_code2:(KR || US) AND !destinationPort:(25 || 53 || 80 || 443 || 161 || 5518) && deviceAction:Permit && !name:”FIN Port Scan” && !deviceProduct:A01IPS
설명 : 목적지가 한국 미국이 아니며, 목적지 포트가 25, 53, 80등이 아니고 장비에서 Permit 된것만 그리고 A01IPS 가 아니며 / FIN Port Scan이 아닌것만 검색
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
설명 : 목적지가 한국,미국,일본 이 아니고 특정 대역을 제외한 특정 포트를 제외, 그리고 icmp를 제외한것만 출력.
검색 쿼리에 익숙해지면 응용 범위가 다양해지며, 보안 이슈 대응에 대한 로그 검색 시간도 단축.
4. 보안 장비별 쿼리들
Firewall
NAVFW01 1구역존
NAVFW02 1구역존
NAV2FW01 2구역존2차
NAV2FW02 2구역존2차
DMZFW01 DMZ1차
DMZFW02 DMZ2차
deviceHostName:(NAVFW01 || NAVFW02 || DMZFW01 || DMZFW02 || NAV2FW01 || NAV2FW02) && deviceAction:accept
deviceHostName:(NAVFW01 || NAVFW02 || DMZFW01 || DMZFW02 || NAV2FW01 || NAV2FW02) AND deviceAction:accept AND !destinationPort:(5052 OR 53 OR 110 OR 161 OR 123 OR 2048)
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
2구역존2차 방화벽
deviceAddress:(NAV2FW01 || NAV2FW02) && !destination.country_code2:(US OR KR) && !destinationPort:(25 || 443 || 80) && !sourceAddress:”10.0.0.0/8″ && !destinationAddress:”10.0.0.0/8″ && deviceAction:(accept || Permit)
-> 10.0.0.0/8 은 사용자 IP대역을 제외한것
사용자 PC 네트워크대역 -> 외부 통신
sourceAddress:”10.10.120.0/24″ && deviceAction:(Permit || accept) && !destinationAddress:(“10.0.0.0/8” || “192.168.0.0/16”) && !destination.country_code2:KR && !destinationPort:(80 || 443 || 53 || 6548 || 1233 || 123)
IPS
특정 서비스 구역 IPS -> IPSA xxx존 IPSB xxx존
사용자존 IPS -> UserIPS1 UserIPS2
ETC IPS / ETCIPSA || ETCIPSB
deviceHostName:(UserIPS1 || UserIPS2) && deviceAction:Permit && !sourceAddress:(12.x.x.147 || 12.x.x.157)
deviceHostName:(UserIPS1 || UserIPS2) && deviceAction:Permit && !deviceEventClassId:(0183 || 0003 || 0014) && !sourceAddress:(12.x.x.147 || 12.x.x.157)
deviceHostName:(UserIPS1 || UserIPS2) && deviceAction:Permit && !name:”FIN Port Scan” && !sourceAddress:(12.x.x.147 || 12.x.x.157) && deviceEventClassId:2242
deviceHostName:(UserIPS1 || UserIPS2) && deviceAction:Permit && !name:”FIN Port Scan” && !sourceAddress:(12.x.x.147 || 12.x.x.157) && deviceEventClassId:2242 && !destination.country_code2:KR
deviceProduct:UserIPS && deviceSeverity:High && !destination.country_code2:(KR || US) && !sourceAddress:12.x.x.147 && !name:(SNMP* || DRDOS*)
deviceHostName:(UserIPS1 || UserIPS2) && deviceAction:Permit && !deviceEventClassId:(0183 || 0014 || 0003 || 0182)
deviceVendor:TippingPoint && deviceAction:Permit && deviceAddress:11.x.x.160 && deviceHostName:ETCIPSB
deviceVendor:TippingPoint && deviceHostName:(ETCIPSA || ETCIPSB) && deviceAction:Permit && !deviceEventClassId:5683 && !source.country_code2:KR && !destinationPort:443
deviceVendor:TippingPoint && deviceHostName:(ETCIPSA || ETCIPSB) && deviceAction:Permit && !sourceAddress:”10.0.0.0/8″ && !destinationPort:443
deviceVendor:TippingPoint && deviceHostName:(ETCIPSA || ETCIPSB) && deviceAction:Permit && destinationPort:(6548 || 3389 || 1233) && !sourceAddress:”10.0.0.0/8″
deviceVendor:TippingPoint && deviceHostName:(IPSA || IPSB) && deviceAction:Permit && !deviceEventClassId:(5873 || 5683)
deviceVendor:TippingPoint && deviceAction:Permit && !source.country_code2:(US OR KR) && !sourceAddress:(“10.0.0.0/8” || “192.16.114.0/24”)
deviceVendor:TippingPoint && deviceAction:Permit && !destination.country_code2:(US OR KR) && !sourceAddress:”10.0.0.0/8″
AA 구역존 IDC IPS / IPSA IPSB
deviceVendor:TippingPoint && deviceHostName:(IPSA || IPSB) && deviceAction:Permit && !sourceAddress:”10.0.0.0/8″ && !destinationPort:443
deviceVendor:TippingPoint && deviceHostName:(IPSA || IPSB) && deviceAction:Permit && destinationPort:(6548 || 3389 || 1233) && !sourceAddress:”10.0.0.0/8″
deviceVendor:TippingPoint && deviceHostName:(IPSA || IPSB) && deviceAction:Permit && !deviceEventClassId:(5873 || 5683)
!destination.country_code2:(KR || US) && deviceAction:(Permit || Detect) && !destinationPort:(161) && !destinationAddress:(“10.0.0.0/8” || “192.16.114.0/24” || “192.168.0.0/16”)
WAF
deviceHostName:(WAF_A || WAF_B) && deviceAction:Detect && !requestUrl:” /robots.txt” && !destinationAddress:(2.2.x.180 || 2.2.x.168) && oldFileName:SQL삽입차단
deviceHostName:(WAF_A || WAF_B) && deviceAction:Detect && !requestUrl:” /robots.txt” && !destinationAddress:(2.2.x.180 || 2.2.x.168) && oldFileName:SQL삽입차단 && !destinationHostName:aaa.bbb.com
deviceProduct:WEBFRONT && deviceAction:Detect && !severity:Unknown && !source.country_code2:(KR || US)
deviceHostName:(DMZWAFA || DMZWAFB) && deviceAction:Detect && !severity:Unknown
NAT IP 찾기
destinationAddress:x.x.x.97 && !sourceAddress:x.x.x.135 (소스가 nat IP가 아닌것을 찾음 real IP 찾을수 있음)
sourceTranslatedAddress:x.x.x.238 && sourceAddress:10.10.107.42 && !destination.country_code2:KR
코인 채굴(mining) 통신 관련 로그 찾기
destinationPort:(18080 || 18081 || 28080 || 28081 || 7777 || 3333) && deviceAction:(Permit || accept) && !destination.country_code2:KR && _exists_:destination.country_code2
sourceAddress:x.x.x.229 && !destinationPort:(80 || 53 || 443)
sourceAddress:x.x.x.13 && !destination.country_code2:KR
destinationPort:7777 && !destination.country_code2:KR && !sourceAddress:10.4.2.3
C&C 서버 통신 쿼리(평판 DB 로 부터 받아온 c2 서버 리스트 기준)
destinationAddress:(x.x.x.x || x.x.x.1 || x.x.x.2 || x.x.x.3 || x.x.x.4) && !sourceAddress:x.x.x.x
NAT IP로 source IP 찾기
transip:208.xxx.x.x && destinationAddress:8.8.4.4
APT 장비 검색 쿼리 예
deviceHostName:APT && _exists_:source.country_code2 && !source.country_code2:KR && !applicationProtocol:(SMTP || IMAP || POP3)
– source IP 가 KR이 아니고 메일 관련 프로토콜은 제외
deviceHostName:DDI AND name:(SQL* OR MINER*) AND NOT destinationAddress:(x.x.17.162 OR x.x2.18.180)
– SQL injection OR Miner 통신 만 탐색