Creazione di modelli di espressione regolare

Per creare un'estensione di origine log, utilizzare le espressioni regolari (regex) per associare le stringhe di testo dall'origine log non supportata.

Informazioni su questa attività

Il seguente esempio mostra una voce di log a cui si fa riferimento nei passi.

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 

Procedura

  1. Analizzare visivamente l'origine log non supportata per individuare modelli univoci.

    Questi modelli vengono successivamente tradotti in espressioni regolari.

  2. Trovare le stringhe di testo da associare.
    Suggerimento: per fornire il controllo degli errori di base, includere i caratteri prima e dopo i valori per evitare che valori simili vengano associati involontariamente. In seguito è possibile isolare il valore effettivo dai caratteri supplementari.
  3. Sviluppare pseudo - codice per i pattern di corrispondenza e includere il carattere spazio per indicare l'inizio e la fine di un pattern.

    È possibile ignorare le virgolette. Nella voce di log di esempio, i nomi evento sono DROP, PASS e REJECT. Il seguente elenco mostra i campi evento utilizzabili.

    • EventName: " kernel: VALORE "
    • SourceMAC: " MAC=VALORE "
    • SourceIp: " SRC=VALORE "
    • DestinationIp: " DST=VALORE "
    • Protocollo: " PROTOCOLLO = VALORE "
    • SourcePort: " SPT=VALORE "
    • DestinationPort: " DPT=VALORE "
  4. Sostituire uno spazio con l'espressione regolare \s .

    È necessario utilizzare un carattere escape per i caratteri non alfanumerici o non alfabetici. Ad esempio, = diventa \= e: diventa \:.

  5. Convertire lo pseudo codice in una espressione regolare
    Tabella 1. Conversione dello pseudo - codice in espressioni regolari
    Campo Pseudocodice Espressione regolare

    EventName

    " kernel: VALORE

    "

    \skernel \:\s. * ?\s

    SourceMAC

    " MAC=VALORE "

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

    SourceIP

    " SRC=VALORE "

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

    DestinationIp

    " DST = VALORE "

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

    Protocollo

    " PROTOCOLLO = VALORE "

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

    SourcePort

    " SPT = VALORE "

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

    DestinationPort

    " DPT = VALORE "

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

  6. Specificare i gruppi di cattura.

    Un gruppo di cattura isola un determinato valore nell'espressione regolare.

    Ad esempio, nel pattern SourcePort dell'esempio precedente, non è possibile passare l'intero valore poiché include spazi e SRC=<code>. Invece, si specifica solo il numero di porta utilizzando un gruppo di cattura. Il valore nel gruppo di cattura è quello che viene passato al relativo campo in IBM QRadar.

    Inserire una parentesi intorno ai valori che si desidera catturare:

    Tabella 2. Associazione di espressioni regolari per catturare i gruppi per i campi evento
    Campo Espressione regolare Gruppo di cattura

    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

    IP di destinazione

    \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

    Protocollo

    \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. Migrare i modelli e catturare i gruppi nel documento delle estensioni di origine log

    Il seguente frammento di codice mostra parte del documento che si utilizza.

    
    <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>