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