구문 분석 문제의 예
로그 소스 확장을 만들면 몇 가지 구문 분석 문제가 발생할 수 있습니다. 이러한 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 주소를 무시하고 IP 주소를 192.0.2.1로 설정하는 대체를 보여줍니다.
이 예에서는 소스 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 주소 생성
JSA는 콜론 분리된 형태로 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-4d
은 의 MAC 주소 12:34:1a:2b:3c:4d
로 변환됩니다.
대시가 패턴에서 제거되면 패턴이 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을 다시 작성할 수 있도록 ext-data 옵션 매개 변수가 로그 소스 확장에 포함됩니다. 다음 예에서는 날짜 및 타임 스탬프 형식을 수정하기 위해 이벤트를 재구성할 수 있는 방법을 보여줍니다.
<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=67.149.62.133 DST=239.255.255.250 PROTO=UDP SPT=1900 DPT=1900 May 20 17:16:26 dropbear[22331]: password auth succeeded for 'root' from 192.168.50.80:3364 May 20 17:16:28 dropbear[22331]: exit after auth (root): Exited normally </br> May 20 17:16:14 dropbear[22331]: bad password attempt for 'root' from 192.168.50.80:3364
예를 들어, 2개의 로그 형식(하나는 방화벽 이벤트용, 하나는 인증 이벤트용)입니다. 이벤트를 구문 분석하기 위해 여러 패턴을 작성해야 합니다. 구문 분석 순서를 지정할 수 있습니다. 일반적으로, 이벤트 빈도가 높을수록 먼저 구문 분석이 이루어 지고, 그 다음으로 빈도가 낮아지게 됩니다. 모든 이벤트를 구문 분석하는 데 필요한 패턴을 최대한 많이 가질 수 있습니다. 순서 변수는 패턴이 일치하는 순서를 결정합니다.
다음 예제에서는 다음 필드에 대한 여러 형식을 보여 줍니다. 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 편집기에서 사용할 수 있는 Generic List 표현식 유형을 사용합니다. 자세한 내용은 구조화된 데이터에 대한 일반 목록 형식의 표현식을 참조하십시오.
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