구문 분석 문제의 예

로그 소스 확장을 작성할 때 구문 분석 문제가 발생할 수 있습니다. 해당 XML 예제를 사용하여 특정 구문 분석 문제를 해결할 수 있습니다.

프로토콜 변환

다음 예제는 페이로드에서 TCP, UDP, ICMP 또는 GRE를 검색하는 일반적인 프로토콜 변환을 보여줍니다. 검색 패턴은 단어 경계(예제: 탭, 공백 또는 라인의 끝)로 묶여 있습니다. 또한 대소문자는 무시됩니다.

<pattern id="Protocol" case-insensitive="true" xmlns="">
<![CDATA[\b(TCP|UDP|ICMP|GRE)\b]]>
</pattern> 
<matcher field="Protocol" order="1" pattern-id="Protocol" capture-group="1" />

단일 대체 작성

다음 예제는 소스 IP 주소를 구문 분석한 후 결과를 겹쳐쓰고 IP 주소를 192.0.2.1로 설정하는(페이로드의 IP 주소는 무시) 대체를 보여줍니다.

이 예제에서는 소스 IP 주소가 쉼표 앞에 오는 SrcAddress=203.0.113.1과 유사한 항목과 일치한다고 가정합니다.

<pattern id="SourceIp_AuthenOK" xmlns=""> 
<![CDATA[SrcAddress=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}),]]>
</pattern>

<matcher field="SourceIp" order="1" pattern-id="SourceIp_AuthenOK" 
capture-group="192.0.2.1" enable-substitutions="true"/>

콜론으로 구분된 MAC 주소 생성

QRadar 는 콜론으로 구분된 양식으로 MAC 주소를 발견합니다. 모든 디바이스가 이 양식을 사용하지는 않으므로 다음 예제는 해당 상황을 정정하는 방법을 보여줍니다.

<pattern id="SourceMACWithDashes" xmlns="">
    <![CDATA[SourceMAC=([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-
    ([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})]]>
</pattern> 
 <matcher field="SourceMAC" order="1" pattern-id=" 
    SourceMACWithDashes" capture-group="\1:\2:\3:\4:\5:\6" />

이전 예제에서 SourceMAC=12-34-1a-2b-3c-4d12:34:1a:2b:3c:4d의 MAC 주소로 변환됩니다.

패턴에서 대시가 제거되면 패턴은 MAC 주소를 변환하고 구분 기호를 갖지 않습니다. 공백이 삽입되면 패턴은 공백으로 구분된 MAC 주소를 변환합니다.

IP 주소와 포트 결합

일반적으로 IP 주소와 포트는 콜론으로 구분되어 한 필드에 결합됩니다.

다음 예제에서는 한 패턴이 있는 여러 캡처 그룹을 사용합니다.

pattern id="SourceIPColonPort" xmlns="">
<! [CDATA[Source=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):([\d]{1,5})]]>
</pattern> 

<matcher field="SourceIp" order="1" pattern-id="SourceIPColonPort" capture-group="1" /> 
<matcher field="SourcePort" order="1" pattern-id="SourceIPColonPort" capture-group="2" />

이벤트 카테고리 수정

디바이스 이벤트 카테고리를 하드 코딩하거나 심각도를 조정할 수 있습니다.

다음 예제는 단일 이벤트 유형의 심각도를 조정합니다.

<event-match-single event-name="TheEvent" device-event-category="Actual Category" severity="6" send-identity="UseDSMResults" />

ID 변경 이벤트 금지

DSM은 불필요하게 ID 변경 이벤트를 전송할 수 있습니다.

다음 예제는 단일 이벤트 유형 및 이벤트 그룹에서 ID 변경 이벤트가 전송되지 않도록 하는 방법을 보여줍니다.

// Never send identity for the event with an EventName of Authen OK 
<event-match-single event-name="Authen OK" device-event-category="ACS" 
severity="6" send-identity="OverrideAndNeverSend" />

// Never send any identity for an event with an event name starting with 7, 
followed by one to five other digits: 
<pattern id="EventNameId" xmlns=""><![CDATA[(7\d{1,5})]]>
</pattern>

<event-match-multiple pattern-id="EventNameId" capture-group-index="1" 
device-event-category="Cisco Firewall" severity="7" 
send-identity="OverrideAndNeverSend"/> 

형식화 이벤트 날짜 및 시간소인

로그 소스 확장은 이벤트에서 여러 다른 날짜 및 시간소인 형식을 발견할 수 있습니다.

디바이스 제조업체가 표준 날짜 및 시간소인 형식을 따르지 않으므로 DeviceTime을 다시 형식화할 수 있도록 추가 데이터 선택 매개변수가 로그 소스 확장에 포함되어 있습니다. 다음 예제에서는 날짜 및 시간소인 형식을 정정하기 위해 이벤트를 다시 형식화할 수 있는 방법을 보여줍니다.

<device-extension> 
<pattern id="EventName1">(logger):</pattern> 
<pattern id="DeviceTime1">time=\[(\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2})\]</pattern> 
<pattern id="Username">(TLSv1)</pattern> 

<match-group order="1" description="Full Test"> 
   <matcher field="EventName" order="1" pattern-id="EventName1_Pattern" capture-group="1"/> 
   <matcher field="DeviceTime" order="1" pattern-id="DeviceTime1_Pattern" 
   capture-group="1" ext-data="dd/MMM/YYYY:hh:mm:ss"/> 
   <matcher field="UserName" order="1" pattern-id="Username_Pattern" capture-group="1"/>
</match-group>
</device-extension>

단일 로그 소스의 다중 로그 형식

다중 로그 형식이 단일 로그 소스에 포함되는 경우가 종종 있습니다.

May 20 17:15:50 kernel: DROP IN=vlan2 OUT= MAC= SRC=<Source_IP_address> 
DST=<Destination_IP_address> PROTO=UDP SPT=1900 DPT=1900
May 20 17:16:26 <server>[22331]: password auth succeeded for 'root' from <IP_address>
May 20 17:16:28 <server>[22331]: exit after auth (root): Exited normally </br>
May 20 17:16:14 <server>[22331]: bad password attempt for 'root' from <IP_address>:3364

예를 들어, 방화벽 이벤트용과 인증 이벤트용으로 하나씩 두 개의 로그 형식이 있습니다. 이벤트를 구문 분석하려면 여러 패턴을 작성해야 합니다. 구문 분석 순서를 지정할 수 있습니다. 일반적으로 빈도가 낮은 이벤트 보다 빈도가 높은 이벤트를 먼저 구문 분석합니다. 모든 이벤트를 구문 분석하기 위해 필요한 만큼 패턴을 사용할 수 있습니다. 순서 변수는 패턴이 일치되는 순서를 판별합니다.

다음 예제에서는 EventName 및 UserName 필드에 대한 여러 형식을 보여줍니다.

고유한 각 로그 유형을 구문 분석하기 위해 별도의 패턴이 작성됩니다. 정규화된 필드에 값을 지정할 때 두 패턴이 모두 참조됩니다.


<pattern id="EventName-DDWRT-FW_Pattern" xmlns=""><![CDATA[kernel\:\s(.*?)\s]]></pattern>
<pattern id="EventName-DDWRT-Auth_Pattern" xmlns=""><![CDATA[sdrophear\[\d{1,5}\]|:\s(.*?\s.*?)\s]]>
</pattern>

<pattern id="UserName_DDWRT-Auth1__Pattern" xmlns=""><![CDATA[\sfor\s\'(.*?)\'s]]></pattern>
<pattern id="UserName_DDWRT-Auth2__Pattern" xmlns=""><![CDATA[\safter\sauth\s\((.*?)\)\:]]></pattern>

<match-group order="1" description="DD-WRT Device Extensions xmlns=""> 
   <matcher field="EventName" order="1" pattern-id="EventName-DDWRT-FW_Pattern" capture-group="1"/> 
   <matcher field="EventName" order="2" pattern-id="EventName-DDWRT-Auth_Pattern" capture-group="1"/> 
   
   <matcher field="UserName" order="1" pattern-id="UserName-DDWRT-Auth1_Pattern" capture-group="1"/> 
   <matcher field="UserName" order="2" pattern-id="UserName-DDWRT-Auth2_Pattern" capture-group="1"/> 
   

CSV 로그 형식 구문 분석

CSV 형식의 로그 파일을 구문 분석하려면 DSM 편집기에서 사용 가능한 일반 목록 표현식 유형을 사용하십시오. 자세한 정보는 구조화된 데이터에 대한 일반 목록 형식의 표현식 (https://www.ibm.com/docs/en/qsip/7.5?topic=editor-expressions-in-generic-list-format-structured-data) 을 참조하십시오.

Event,User,Source IP,Source Port,Destination IP,Destination Port
Failed Login,<Username>,<Source_IP_address>,1024,<Destination_IP_address>,22 
Successful Login,<Username>,<Source_IP_address>,1743,<Destination_IP_address>,110 
Privilege Escalation,<Username>,<Source_IP_address>,1028,<Destination_IP_address>,23