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
- Analizzare visivamente l'origine log non supportata per individuare modelli univoci.
Questi modelli vengono successivamente tradotti in espressioni regolari.
- 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.
- 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 "
- 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 \:.
- 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
|
- 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
|
- 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>