解析问题的示例
创建日志源扩展时,可能会遇到一些解析问题。使用这些 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 地址
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" />
抑制身份变更事件
DSM 可能会不必要地发送身份变更事件。
以下示例说明如何抑制从单个事件类型和一组事件发送的身份更改事件。
// 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"/>
格式化事件日期和时间标记
日志源扩展可以在事件上检测多种不同的日期和时间戳格式。
由于设备制造商不符合标准的日期和时间标记格式,因此日志源扩展中包含 ext-data 可选参数,以允许重新格式化 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=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 种日志格式:一种用于防火墙事件,一种用于身份验证事件。您必须编写多种模式才能解析事件。您可以指定要解析的顺序。通常,先解析更频繁的事件,然后分析较不频繁的事件。您可以根据需要采用尽可能多的模式来解析所有事件。顺序变量决定了模式的匹配顺序。
以下示例显示了以下字段的多种格式:事件名称和用户名
编写不同的模式来解析每个唯一的日志类型。为规范化字段分配值时,将引用这两种模式。
<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 编辑器中提供的通用列表表达式类型。有关更多信息,请参阅 结构化数据的通用列表格式的表达式。
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