Exemplos de problemas de análise sintática

Ao criar uma extensão de origem de log, é possível encontrar alguns problemas de análise. Use estes exemplos de XML para resolver problemas de análise específicos.

Convertendo um protocolo

O exemplo a seguir mostra uma conversão típica de protocolo que procura TCP, UDP, ICMP ou GRE em qualquer lugar na carga útil. O padrão de procura é circundado por qualquer limite de palavra, por exemplo, tabulação, espaço, término de linha. Além disso, as maiúsculas e minúsculas do caractere são ignoradas:

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

Fazendo uma única substituição

O exemplo a seguir mostra uma substituição que analisa o endereço IP de origem e, em seguida, substitui o resultado e configura o endereço IP para 192.0.2.1, ignorando o endereço IP na carga útil.

Este exemplo assume que o endereço IP de origem corresponde a algo semelhante a SrcAddress=203.0.113.1 seguido por uma vírgula:

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

Gerando um endereço MAC separado por dois pontos (:)

O QRadar detecta endereços MAC em um formato separado por dois pontos (dois pontos). Como todos os dispositivos podem não usar esse formato, o exemplo a seguir mostra como corrigir essa situação:

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

No exemplo anterior, SourceMAC=12-34-1a-2b-3c-4d é convertido em um endereço MAC de 12:34:1a:2b:3c:4d.

Se os traços forem removidos do padrão, o padrão converterá um endereço MAC e não terá separadores. Se espaços forem inseridos, o padrão converterá um endereço MAC separado por espaço.

Combinando endereço IP e porta

Geralmente, um endereço IP e uma porta são combinados em um campo, que é separado por dois pontos (:).

O exemplo a seguir usa vários grupos de captura com um padrão:

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

Modificando uma Categoria de evento

Uma categoria de evento de dispositivo pode ser codificada permanentemente, ou a severidade pode ser ajustada.

O exemplo a seguir ajusta a severidade para um único tipo de evento:

<event-match-single event-name="TheEvent" device-event-category="Actual Category" severity="6" send-identity="UseDSMResults" />

Suprimindo eventos de mudança de identidade

Um DSM pode enviar, desnecessariamente, eventos de mudança de identidade.

Os exemplos a seguir mostram como suprimir eventos de mudança de identidade de serem enviados de um único tipo de evento e de um grupo de eventos.

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

Formatando registros de data e hora dos eventos

Uma extensão de origem de log pode detectar vários formatos de registro de data e hora diferentes nos eventos.

Como os fabricantes de dispositivo não se adequam a um formato de registro de data e hora padrão, o parâmetro opcional ext-data é incluído na extensão de origem de log para permitir que DeviceTime seja reformatado. O exemplo a seguir mostra como um evento pode ser reformatado para corrigir a formatação do registro de data e hora:

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

Vários formatos de log em uma única origem de log

Ocasionalmente, vários formatos de log são incluídos em uma única origem de log.

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

Por exemplo, há 2 formatos de log: um para eventos de firewall e outro para eventos de autenticação. Deve-se gravar vários padrões para analisar os eventos. É possível especificar a ordem a ser analisada. Geralmente, os eventos mais frequentes são analisados primeiro, seguidos dos eventos menos frequentes. É possível ter tantos padrões quantos necessários para analisar todos os eventos. A variável order determina a ordem em que os padrões são correspondidos.

O exemplo a seguir mostra vários formatos para os campos EventName e UserName a seguir

Padrões separados são gravados para analisar cada tipo de log exclusivo. Ambos os padrões são referenciados ao designar o valor aos campos normalizados.


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

Analisando um formato de log CSV

Para analisar um arquivo de log que esteja no formato CSV, use o tipo de expressão da Lista genérica que está disponível no DSM Editor. Para obter mais informações, consulte Expressões no formato Lista Genérica para dados estruturados (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