Beispiele für Parsing-Probleme
Wenn Sie eine Protokollquellenerweiterung erstellen, können beim Parsing Probleme auftreten. Verwenden Sie diese XML-Beispiele zum Beheben bestimmter Parsing-Probleme.
Protokoll konvertieren
Das folgende Beispiel zeigt eine typische Protokollkonvertierung, die an einer beliebigen Stelle in den Nutzdaten nach TCP, UDP, ICMP oder GRE sucht. Das Suchmuster wird von einer beliebigen Wortgrenze umgeben, z. B. Tabulator, Leerzeichen, Zeilenende. Außerdem wird die Groß-/Kleinschreibung ignoriert:
<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" /> Einzelne Ersetzung vornehmen
Das folgende Beispiel zeigt eine Substitution, die die Quellen-IP-Adresse analysiert, dann das Ergebnis überschreibt und die IP-Adresse auf 192.0.2.1setzt, wobei die IP-Adresse in den Nutzdaten ignoriert wird.
In diesem Beispiel wird davon ausgegangen, dass die Quellen-IP-Adresse mit einem Komma gefolgt von SrcAddress=203.0.113.1 übereinstimmt:
<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"/>
Durch Doppelpunkte getrennte MAC-Adresse generieren
QRadar erkennt MAC-Adressen in einem durch Doppelpunkte getrennten Format. Da möglicherweise nicht alle Einheiten dieses Formular verwenden, zeigt das folgende Beispiel, wie diese Situation korrigiert werden kann:
<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" /> Im vorherigen Beispiel wird SourceMAC=12-34-1a-2b-3c-4d in die MAC-Adresse 12:34:1a:2b:3c:4dkonvertiert.
Wenn die Gedankenstriche aus dem Muster entfernt werden, konvertiert das Muster eine MAC-Adresse und hat keine Trennzeichen. Wenn Leerzeichen eingefügt werden, konvertiert das Muster eine durch Leerzeichen getrennte MAC-Adresse.
IP-Adresse und Port kombinieren
Normalerweise werden IP-Adresse und Port in einem Feld kombiniert, das durch einen Doppelpunkt getrennt ist.
Im folgenden Beispiel werden mehrere Erfassungsgruppen mit einem Muster verwendet:
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" /> Ereigniskategorie ändern
Eine Geräteereigniskategorie kann fest codiert sein oder die Wertigkeit kann angepasst werden.
Im folgenden Beispiel wird die Wertigkeit für einen einzelnen Ereignistyp angepasst:
<event-match-single
event-name="TheEvent" device-event-category="Actual Category" severity="6"
send-identity="UseDSMResults" />
Identitätsänderungsereignisse unterdrücken
Ein DSM sendet möglicherweise unnötigerweise Identitätsänderungsereignisse.
Die folgenden Beispiele zeigen, wie das Senden von Identitätsänderungsereignissen von einem einzelnen Ereignistyp und einer Gruppe von Ereignissen unterdrückt wird.
// 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"/> Ereignisdatumsangaben und Zeitmarken formatieren
Eine Protokollquellenerweiterung kann verschiedene Datums-und Zeitmarkenformate für Ereignisse erkennen.
Da Einheitenhersteller nicht dem Standardformat für Datums-und Zeitmarken entsprechen, wird der optionale Parameter 'ext-data' in die Protokollquellenerweiterung eingeschlossen, damit die DeviceTime neu formatiert werden kann. Das folgende Beispiel zeigt, wie ein Ereignis neu formatiert werden kann, um die Formatierung der Datums-und Zeitmarke zu korrigieren:
<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> Mehrere Protokollformate in einer einzelnen Protokollquelle
Gelegentlich sind mehrere Protokollformate in einer einzigen Protokollquelle enthalten.
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
Es gibt beispielsweise zwei Protokollformate: eines für Firewallereignisse und eines für Authentifizierungsereignisse. Sie müssen mehrere Muster für das Parsing der Ereignisse schreiben. Sie können die zu analysierende Reihenfolge angeben. Normalerweise werden die häufigsten Ereignisse zuerst geparst, gefolgt von den weniger häufigen Ereignissen. Sie können so viele Muster wie erforderlich haben, um alle Ereignisse zu analysieren. Die Reihenfolgevariable bestimmt, in welcher Reihenfolge die Muster abgeglichen werden.
Das folgende Beispiel zeigt mehrere Formate für die Felder EventName und UserName
Es werden separate Muster geschrieben, um jeden eindeutigen Protokolltyp zu analysieren. Beide Muster werden referenziert, wenn Sie den normalisierten Feldern den Wert zuordnen.
<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"/>
Parsing eines CSV-Protokollformats
Um eine Protokolldatei im CSV-Format zu parsen, verwenden Sie den Ausdruckstyp "Generische Liste", der im DSM-Editor verfügbar ist. Weitere Informationen finden Sie unter Ausdrücke im Format einer generischen Liste für strukturierte Daten (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