Muster für reguläre Ausdrücke erstellen

Um eine Protokollquellenerweiterung zu erstellen, verwenden Sie reguläre Ausdrücke (Regex), um Textzeichenfolgen aus der nicht unterstützten Protokollquelle abzugleichen.

Informationen zu dieser Task

Das folgende Beispiel zeigt einen Protokolleintrag, auf den in den Schritten verwiesen wird.

May 20 17:24:59 kernel: DROP MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 ID=9582 
PROTO=UDP SPT=67 DPT=68 LEN=331
May 20 17:24:59 kernel: PASS MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 
ID=9583 PROTO=TCP SPT=1057 DPT=80 LEN=331 
May 20 17:24:59 kernel: REJECT 
MAC=<MAC_address>  SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 
TOS=0x00 PREC=0x00 TTL=64 ID=9584 PROTO=TCP SPT=25212 DPT=6881 LEN=331 

Vorgehensweise

  1. Analysieren Sie die nicht unterstützte Protokollquelle visuell, um eindeutige Muster zu ermitteln.

    Diese Muster werden später in reguläre Ausdrücke umgesetzt.

  2. Suchen Sie nach den Textzeichenfolgen, die abgeglichen werden sollen.
    Tipp: Um eine grundlegende Fehlerprüfung bereitzustellen, schließen Sie Zeichen vor und nach den Werten ein, um zu verhindern, dass ähnliche Werte unbeabsichtigt abgeglichen werden. Sie können den tatsächlichen Wert später von den zusätzlichen Zeichen isolieren.
  3. Entwickeln Sie Pseudocode für übereinstimmende Muster und fügen Sie das Leerzeichen ein, um den Anfang und das Ende eines Musters zu kennzeichnen.

    Sie können die Anführungszeichen ignorieren. Im Beispielprotokolleintrag lauten die Ereignisnamen DROP, PASS und REJECT. Die folgende Liste enthält die verwendbaren Ereignisfelder.

    • EventName: "Kernel: WERT"
    • SourceMAC: "MAC=WERT"
    • SourceIp: "SRC=VALUE"
    • DestinationIp: "DST=VALUE"
    • Protokoll: " PROTO=WERT "
    • SourcePort: " SPT=WERT "
    • DestinationPort: "DPT=VALUE"
  4. Ersetzen Sie ein Leerzeichen durch den regulären Ausdruck \s .

    Sie müssen ein Escapezeichen für Nicht-Ziffern-oder Nicht-Alpha-Zeichen verwenden. Beispiel: = wird zu \= und: wird zu \:.

  5. Übersetzen Sie den Pseudocode in einen regulären Ausdruck.
    Tabelle 1. Umsetzen von Pseudocode in reguläre Ausdrücke
    Feld Pseudocode Regulärer Ausdruck

    EventName

    " Kernel: VALUE

    "

    \skernel \:\s. * ?\s

    SourceMAC

    " MAC=WERT "

    \sMAC\=(?:[0-9a-fA-F]{2}\:){5}[0-9a-fA-F]{2}\s

    SourceIP

    " SRC=WERT "

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    DestinationIp

    " DST = WERT "

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    Protokoll

    " PROTO=WERT "

    \sPROTO\=(TCP|UDP|ICMP|GRE)\s

    SourcePort

    " SPT = WERT "

    \sSPT\=\d{1,5}\s

    DestinationPort

    " DPT = WERT "

    \sDPT\=\d{1,5}\s

  6. Erfassungsgruppen angeben.

    Eine Erfassungsgruppe isoliert einen bestimmten Wert im regulären Ausdruck.

    Im Muster SourcePort im vorherigen Beispiel können Sie beispielsweise nicht den gesamten Wert übergeben, da er Leerzeichen und SRC=<code>enthält. Stattdessen geben Sie nur die Portnummer mithilfe einer Erfassungsgruppe an. Der Wert in der Erfassungsgruppe wird an das relevante Feld in IBM QRadarübergeben.

    Fügen Sie runde Klammern um die Werte ein, die Sie erfassen möchten:

    Tabelle 2. Zuordnen regulärer Ausdrücke zu Erfassungsgruppen für Ereignisfelder
    Feld Regulärer Ausdruck Erfassungsgruppe

    EventName

    \skernel \:\s. * ?\s

    \skernel \:\s (. *?) \s

    SourceMAC

    \sMAC\=(?:[0-9a-fA- F] {2} \:) {5} [ 0-9a-fA-F ] {2} \s

    \sMAC\=((?:[0-9a-fA- F] {2} \:) {5} [ 0-9a-fA-F ] {2} )\s

    SourceIP

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sSRC\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    Ziel-IP

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sDST\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    Protokoll

    \sPROTO\=(TCP|UDP|ICMP|GRE)\s

    \sPROTO\=((TCP|UDP|ICMP|GRE))\s

    SourcePort

    \sSPT\=\d{1,5}\s

    \sSPT\=(\d{1,5})\s

    DestinationPort

    \sDPT\=\d{1,5}\s

    \sDPT\=(\d{1,5})\s

  7. Migrieren Sie die Muster und Erfassungsgruppen in das Erweiterungsdokument für Protokollquellen.

    Das folgende Code-Snippet zeigt einen Teil des von Ihnen verwendeten Dokuments.

    
    <device-extension xmlns="event_parsing/device_extension"> 
    <pattern id="EventNameFWSM_Pattern" xmlns=""><![CDATA[%FWSM[a-zA-Z\-]*\d-(\d{1,6})]]></pattern>
    <pattern id="SourceIp_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern> 
    <pattern id="SourceIpPreNAT_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="SourceIpPostNAT_Pattern" xmlns=""><![CDATA[laddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="DestinationIp_Pattern" xmlns=""><![CDATA[faddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="Protocol_Pattern" case-insensitive="true" xmlns=""><![CDATA[(TCP|UDP|ICMP|GRE)]]></pattern>
    <pattern id="Protocol_6_Pattern" case-insensitive="true" xmlns=""><![CDATA[protocol=6]]></pattern> 
    <pattern id="EventNameId_Pattern" xmlns=""><![CDATA[(\d{1,6})]]></pattern>