Wazuh proporciona un conjunto de reglas listas para usar que se utilizan para la detección y respuesta de amenazas. Este conjunto de reglas se actualiza continuamente gracias al trabajo de nuestros colaboradores y desarrolladores. Además, los usuarios pueden crear fácilmente reglas adicionales para ingerir y procesar nuevas fuentes de registro.

Para este ejemplo en particular, utilizaremos local_decoder.xmllocal_rules.xmlarchivos para implementar las adiciones del conjunto de reglas. Estos archivos no se sobrescriben cuando se actualiza el conjunto de reglas, lo que significa que son ideales para personalizaciones y nuevos decodificadores y reglas. Además, cuando los usuarios tienen que implementar un gran conjunto de reglas o decodificadores, pueden crear nuevos decodificadores y archivos de reglas (esto ayuda a mantenerlos bien organizados).

Evento de ejemplo

Al diseñar los nuevos decodificadores y reglas, debe considerar ejemplos de eventos y echar un vistazo a la referencia de formato del fabricante. En esta guía, estamos trabajando con el siguiente evento Fortigate :

date=2019-10-10 time=17:01:31 devname="FG111E-INFT2" devid="FG201E4Q17901611" logid="0000000020" type="traffic" subtype="forward" level="notice" vd="root" eventtime=1573570891 srcip=192.168.56.105 srcname="wazuh.test.local" srcport=63874 srcintf="port1" srcintfrole="lan" dstip=54.97.146.111 dstport=443 dstintf="wan1" dstintfrole="wan" poluuid="3e421d8c-0210-51ea-2e5e-6dd151c37590" sessionid=261713795 proto=6 action="accept" user="WAZUH" authserver="FSSO_TEST_LOCAL" policyid=131 policytype="policy" service="HTTPS" dstcountry="United Kingdom" srccountry="Reserved" trandisp="snat" transip=195.46.111.2 transport=63874 appid=45553 app="Microsoft.Outlook.Office.365" appcat="Email" apprisk="medium" applist="INF-APP-MONITOR" appact="detected" duration=815 sentbyte=13941 rcvdbyte=13429 sentpkt=58 rcvdpkt=63 sentdelta=360 rcvddelta=2189 devtype="Windows PC" devcategory="Windows Device" osname="Windows" osversion="8.1" mastersrcmac="fc:45:96:44:79:c9" srcmac="fc:45:96:44:79:c9" srcserver=1 dstdevtype="Router/NAT Device" dstdevcategory="None" masterdstmac="28:8b:1c:db:7c:48" dstmac="28:8b:1c:db:7c:48" dstserver=0
  • En el nivel de sintaxis, este registro sigue una key=valueestructura de pares. Los pares están separados por espacios en blanco, y los valores del tipo de cadena están rodeados por comillas dobles.
  • En cuanto al contenido, el registro revela el tráfico de red entre nodos e incluye información como direcciones IP, puertos, protocolo y algunos detalles de carga útil.

Diseño decodificador

Los encabezados de registro de servicios y dispositivos generalmente incluyen texto estático que cumple un patrón. Nos permite crear un decodificador raíz que coincida con todos los registros que compartan ese patrón en particular. Las expresiones de sintaxis Regex (OS_Regex) son la herramienta que utilizaremos dentro de los decodificadores para localizar fácilmente los encabezados que no cambian y sus valores.

Es una buena práctica identificar primero el tipo de registro en la fase prematura y luego usar el decodificador de niños para extraer los datos relevantes.

Decodificador prematch

En el caso de los registros de Fortigate, puede ver los campos datetimedevnamesiempre están presentes al comienzo de cada mensaje, por lo que pueden usarse en el decodificador raíz de forma anticipada.

date=2019-10-10 time=17:01:31 devname="FG111E-INFT2"

El siguiente decodificador intentará encontrar una coincidencia en cada registro para la expresión definida y decidirá si los decodificadores secundarios deben considerarse para activarse o no.

<decoder name="fortigate-custom">
  <prematch>^date=\d\d\d\d-\d\d-\d\d time=\d\d:\d\d:\d\d devname="\S+"</prematch>
</decoder>
  • El campo datesiempre contendrá el patrón Año – mes – día . Año , mes y día son siempre dígitos. El \doperador para 0-9 caracteres se ajusta al datecampo.
  • El campo timetiene el formato Hora : minuto : segundo . La hora , los minutos y los segundos siempre son dígitos. El \doperador para 0-9 caracteres se ajusta al timecampo.
  • Se devnameespera que el campo esté entre comillas dobles y no contenga espacios en blanco. El operador de todo menos espacios\S es una buena manera de hacer referencia al devnamevalor.

Extracción de campo de decodificador

El descodificador a continuación extrae los valores de los encabezados datetimedevname. La opción regex encuentra los campos de interés y los extrae a través del ()operador. La opción de orden define qué contienen los grupos de paréntesis y el orden en que se recibieron.

<decoder name="fortigate-custom1">
  <parent>fortigate-custom</parent>
  <regex>^date=(\d\d\d\d-\d\d-\d\d) time=(\d\d:\d\d:\d\d) devname="(\S+)"</regex>
  <order>date, time, devname</order>
</decoder>

La siguiente decodificador extrae los devidlogintypesubtypevalores de los campos, con la misma lógica que la de arriba.

<decoder name="fortigate-custom1">
  <parent>fortigate-custom</parent>
  <regex>devid="(\S+)" logid="(\S+)" type="(\S+) subtype="(\S+)"</regex>
  <order>devid, logid, type, subtype</order>
</decoder>

Los devidlogidtypesubtypelos campos se extraen mediante \Soperador. Coincide con cualquier cosa menos espacios en blanco. Para buscar campos que contengan espacios en blanco, se \.debe utilizar el operador.

Extrayendo más campos

Cuando se trata de registros estructurados dinámicamente que proporcionan información en varios órdenes o, a veces, omite ciertos valores, el uso de decodificadores lógicos modulares como los que se muestran a continuación podría cambiar el juego. Consulte la publicación de blog ” Decodificadores hermanos: extracción flexible de información ” para obtener más información al respecto.

<decoder name="fortigate-custom1">
  <parent>fortigate-custom</parent>
  <regex>srcip="(\S+)"|srcip=(\S+) </regex>
  <order>srcip</order>
</decoder>
 
<decoder name="fortigate-custom1">
  <parent>fortigate-custom</parent>
  <regex>dstip=(\S+) </regex>
  <order>dstip</order>
</decoder>
 
<decoder name="fortigate-custom1">
  <parent>fortigate-custom</parent>
  <regex>action="(\S+)" </regex>
  <order>action</order>
</decoder>

Al usar el |operador, el primer decodificador anterior cubre dos posibles patrones de sintaxis para el campo srcip: uno con la dirección entre comillas dobles y el otro sin ellos.

Diseño de reglas

Las reglas realizan verificaciones sobre los campos extraídos para identificar el tipo de mensaje recibido. La regla final que coincida determinará si se genera una alerta o no, su nivel y los grupos de categorías. La siguiente regla de agrupación generará una alerta para cada evento que active los decodificadores Fortigate:

<rule id="222000" level="3">
  <decoded_as>fortigate-custom</decoded_as>
  <description>Fortigate messages grouped.</description>
</rule>

Al señalar la regla de agrupación anterior con la <if_sid>opción, se puede crear cualquier número de reglas secundarias. Estas reglas pueden verificar los valores que dan una pista sobre un ataque o un comportamiento que desea recibir una alerta. La siguiente regla de ejemplo verifica un inicio de sesión fallido en los campos actionstatus.

<rule id="222016" level="4">
  <if_sid>222000</if_sid>
  <action>login</action>
  <status>failed</status>
  <description>Fortigate: Login failed.</description>
</rule>

Probar los decodificadores y las reglas

Una vez que se han diseñado los decodificadores y las reglas, es necesario asegurarse de que funcionen correctamente. Debe verificarse utilizando la herramienta ossec-logtest y también ingiriendo los registros a través del flujo normal para ver si generan una alerta.

ossec-logtest

La siguiente es la salida después de ingresar el ejemplo de inicio de sesión ossec-logtest.

**Phase 2: Completed decoding.
       decoder: 'fortigate-custom'
       date: '2019-10-10'
       time: '17:01:31'
       devname: 'FG111E-INFT2'
       devid: 'FG201E4Q17901611'
       logid: '0000000020'
       type: 'traffic"'
       subtype: 'forward'
       srcip: '192.168.56.105'
       dstip: '54.97.146.111'
       action: 'accept'</pre>
**Phase 3: Completed filtering (rules).
       Rule id: '222000'
       Level: '3'
       Description: 'Fortigate messages grouped.'
**Alert to be generated.

Ingestión del evento de muestra

Para esta prueba, estamos creando un nuevo registro ficticio: /var/log/test_file.log.

touch /var/log/test_file.log

Entonces deberíamos configurar Wazuh para monitorear este archivo de registro. El siguiente bloque de configuración debe pegarse en el ossec.confarchivo del administrador de Wazuh . Recuerde reiniciar el administrador después de agregar esta configuración:

<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/test_file.log</location>
</localfile>

Es hora de lanzar el evento de muestra /var/log/test_file.log. Si nuestros decodificadores y reglas funcionan correctamente, la alerta sobre el evento debería aparecer en el alerts.logarchivo.

echo "date=2019-10-10 time=17:01:31 devname="FG111E-INFT2" devid="FG201E4Q17901611" logid="0000000020" type="traffic" subtype="forward" level="notice" vd="root" eventtime=1573570891 srcip=192.168.56.105 srcname="wazuh.test.local" srcport=63874 srcintf="port1" srcintfrole="lan" dstip=54.97.146.111 dstport=443 dstintf="wan1" dstintfrole="wan" poluuid="3e421d8c-0210-51ea-2e5e-6dd151c37590" sessionid=261713795 proto=6 action="accept" user="WAZUH" authserver="FSSO_TEST_LOCAL" policyid=131 policytype="policy" service="HTTPS" dstcountry="United Kingdom" srccountry="Reserved" trandisp="snat" transip=195.46.111.2 transport=63874 appid=45553 app="Microsoft.Outlook.Office.365" appcat="Email" apprisk="medium" applist="INF-APP-MONITOR" appact="detected" duration=815 sentbyte=13941 rcvdbyte=13429 sentpkt=58 rcvdpkt=63 sentdelta=360 rcvddelta=2189 devtype="Windows PC" devcategory="Windows Device" osname="Windows" osversion="8.1" mastersrcmac="fc:45:96:44:79:c9" srcmac="fc:45:96:44:79:c9" srcserver=1 dstdevtype="Router/NAT Device" dstdevcategory="None" masterdstmac="28:8b:1c:db:7c:48" dstmac="28:8b:1c:db:7c:48" dstserver=0" >> /var/log/test_file.log

La alerta anterior aparece en el alerts.logarchivo:

** Alert 1587490736.163684: - local,syslog,sshd,
2020 Apr 21 17:38:56 serv-test-manager-centos-1->/var/log/test_file.log
Rule: 222000 (level 3) -> 'Fortigate messages grouped.'
Src IP: 192.168.56.105
Dst IP: 54.97.146.111
date=2019-10-10 time=17:01:31 devname="FG111E-INFT2" devid="FG201E4Q17901611" logid="0000000020" type="traffic" subtype="forward" level="notice" vd="root" eventtime=1573570891 srcip=192.168.56.105 srcname="wazuh.test.local" srcport=63874 srcintf="port1" srcintfrole="lan" dstip=54.97.146.111 dstport=443 dstintf="wan1" dstintfrole="wan" poluuid="3e421d8c-0210-51ea-2e5e-6dd151c37590" sessionid=261713795 proto=6 action="accept" user="WAZUH" authserver="FSSO_TEST_LOCAL" policyid=131 policytype="policy" service="HTTPS" dstcountry="United Kingdom" srccountry="Reserved" trandisp="snat" transip=195.46.111.2 transport=63874 appid=45553 app="Microsoft.Outlook.Office.365" appcat="Email" apprisk="medium" applist="INF-APP-MONITOR" appact="detected" duration=815 sentbyte=13941 rcvdbyte=13429 sentpkt=58 rcvdpkt=63 sentdelta=360 rcvddelta=2189 devtype="Windows PC" devcategory="Windows Device" osname="Windows" osversion="8.1" mastersrcmac="fc:45:96:44:79:c9" srcmac="fc:45:96:44:79:c9" srcserver=1 dstdevtype="Router/NAT Device" dstdevcategory="None" masterdstmac="28:8b:1c:db:7c:48" dstmac="28:8b:1c:db:7c:48" dstserver=0"
date: 2019-10-10
time: 17:01:31
devname: FG111E-INFT2
devid: FG201E4Q17901611
logid: 0000000020
type: traffic"
subtype: forward

 

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

compartir en ....
Avatar

Acerca de Brian Alexander Diaz

Brian Alexander Diaz Investigador en temas de seguridad y Devops Mi nombre es Brian Alexander Diaz. El objetivo de este blog es promover la cultura y mentalidad en seguridad por todo el Internet y que la gente aprenda a facilitar su vida y crear  sistemas mas seguros .

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *