Integración complementaria de reglas YARA

Para realizar la integración del agente de Wazuh con Yara en los host terminales monitorizados se utilizarán las reglas de Wazuh manager de la prueba de concepto junto con un repositorio de Github de yara para realizar la integración complementaria. 

 Para la instalación de un agente de Wazuh integrado con Yara se propone un script que automatiza el proceso de instalación e integración de estas 2 herramientas en un terminal Linux. 

 

 #!/bin/bash

# 1. Revisión de la actualización de repositorios

# 2. El proceso se mostrara paso a paso para identificacion de posibles fallas

set -x

sudo apt install curl

sudo apt install git

# 2. Instalacion de claves GPG Wazuh

sudo curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg

sleep 3

# 3. Añadiendo el repositorio de Wazuh

echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list

read -p 'Introduzca el nombre del agente (minúsculas en formato nombre.apellido): ' nombre

# 4. Descarga e inicialización del agente wazuh.deb

curl -so wazuh-agent_4.7.3-1_amd64.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.7.3-1_amd64.deb && sudo WAZUH_MANAGER="172.28.1.69" WAZUH_AGENT_GROUP="UGTD" WAZUH_AGENT_NAME="$nombre" dpkg -i ./wazuh-agent_4.7.3-1_amd64.deb

sleep 3

sudo systemctl daemon-reload

sudo systemctl enable wazuh-agent

sudo systemctl start wazuh-agent

sleep 3

# El proceso se mostrara paso a paso para identificacion de posibles fallas

set -x

# 5. Descarga YARA y sus dependencias 

sudo apt install -y make gcc autoconf libtool libssl-dev pkg-config jq

sudo curl -LO https://github.com/VirusTotal/yara/archive/v4.2.3.tar.gz

sudo tar -xvzf v4.2.3.tar.gz -C /usr/local/bin/ && rm -f v4.2.3.tar.gz

cd /usr/local/bin/yara-4.2.3/

sudo ./bootstrap.sh && sudo ./configure && sudo make && sudo make install && sudo make check

sleep 5

sudo echo "/usr/local/lib" >> /etc/ld.so.conf

sleep 3

ldconfig

# 6. Preparación de reglas Yara

sudo apt-get update

sudo mkdir -p /var/ossec/yara/rules

sudo chmod 771 /var/ossec/yara/rules

# 7. Clonar el repositorio de Git en /var/ossec/yara

git clone https://github.com/Yara-Rules/rules.git /var/ossec/yara/rules

sleep 1

# Archivo de reglas YARA de Vallhala

sudo curl 'https://valhalla.nextron-systems.com/api/v1/get' \

-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \

-H 'Accept-Language: en-US,en;q=0.5' \

--compressed \

-H 'Referer: https://valhalla.nextron-systems.com/' \

-H 'Content-Type: application/x-www-form-urlencoded' \

-H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' \

--data 'demo=demo&apikey=1111111111111111111111111111111111111111111111111111111111111111&format=text' \

-o /var/ossec/yara/rules/yara_rules.yar

# 8. Ejecución del script para generar indices de reglas yara

cd /var/ossec/yara/rules/

/var/ossec/yara/rules/index_gen.sh

# 9. Eliminar el archivo de reglas YARA especificado

rm -rf /var/ossec/yara/rules/malware/MALW_AZORULT.yar

# Eliminar la línea exacta include "./malware/MALW_AZORULT.yar" del archivo index.yar que provoca conflicto con algunas versiones

sed -i '/include "\.\/malware\/MALW_AZORULT\.yar"/d' /var/ossec/yara/rules/index.yar

# 10. Configuracion interna del agente.

wazuh_agent="/var/ossec/etc/local_internal_options.conf"

lines_to_add=("logcollector.max_lines=3000" "wazuh_modules.max_eps=150" "logcollector.remote_commands=1" "wazuh_command.remote_commands=1")

# Agregar las líneas al final del archivo usando sed -i

for line in "${lines_to_add[@]}"; do

 echo "$line" >> "$wazuh_agent"

done

sleep 2

# 11. Deshabilitar repositorio de wazuh para evitar actualizaciones no programadas

sed -i "s/^deb/#deb/" /etc/apt/sources.list.d/wazuh.list

apt-get update

# 12. Verificar copia de script de integración yara

sudo cp yara.sh /var/ossec/active-response/bin/

sudo ls -lh /var/ossec/active-response/bin/ 

 El script de generación de indices para Yara complementa las reglas descritas en el repositorio de Github con las reglas Yara utilizadas para la prueba de concepto y se incluye en la descarga del repositorio en el paso 7 del script de instalación. 

 /*

Generated by Yara-Rules

On 19-04-2024

*/

include "./antidebug_antivm/antidebug_antivm.yar"

include "./capabilities/capabilities.yar"

include "./crypto/crypto_signatures.yar"

include "./cve_rules/CVE-2010-0805.yar"

include "./cve_rules/CVE-2010-0887.yar"

.

.

.

include "./yara_rules.yar" 

 Pasada la primera etapa se configura el archivo ossec.conf del agente en /var/ossec/etc/ossec.conf dentro del modulo de syscheck. 

 <syscheck>

...

<directories realtime=\"yes\">Directorio_Monitorizado</directories>

...

</syscheck> 

 Reinicio del agente 

 sudo systemctl restart wazuh-agent 

 Comprobación del estado del agente 

 sudo systemctl status wazuh-agent 

 Se sugiere la modificación del script de yara para que se dirija al nuevo archivo de reglas que resulta ser index.yar. 

 #!/bin/bash

# Wazuh - Yara active response

# Copyright (C) 2015-2022, Wazuh Inc.

# This program is free software; you can redistribute it

# and/or modify it under the terms of the GNU General Public

# License (version 2) as published by the FSF - Free Software

# Foundation.

#------------------------- Gather parameters -------------------------#

# Extra arguments

read INPUT_JSON

#YARA_PATH=$(echo $INPUT_JSON | jq -r .parameters.extra_args[1])

#YARA_RULES=$(echo $INPUT_JSON | jq -r .parameters.extra_args[3])

YARA_PATH="/usr/local/bin/yara-4.2.3"

YARA_RULES="/var/ossec/yara/rules/index.yar"

FILENAME=$(echo $INPUT_JSON | jq -r .parameters.alert.syscheck.path)

# Set LOG_FILE path

LOG_FILE="logs/active-responses.log"

size=0

actual_size=$(stat -c %s ${FILENAME})

while [ ${size} -ne ${actual_size} ]; do

 sleep 1

 size=${actual_size}

 actual_size=$(stat -c %s ${FILENAME})

done

#----------------------- Analyze parameters -----------------------#

if [[ ! $YARA_PATH ]] || [[ ! $YARA_RULES ]]

then

 echo "wazuh-yara: ERROR - Yara active response error. Yara path and rules parameters are mandatory." >> ${LOG_FILE}

 exit 1

fi

#------------------------- Main workflow --------------------------#

# Execute Yara scan on the specified filename

yara_output="$("${YARA_PATH}"/yara -w -r "$YARA_RULES" "$FILENAME")"

if [[ $yara_output != "" ]]

then

 # Iterate every detected rule and append it to the LOG_FILE

 while read -r line; do

 echo "wazuh-yara: INFO - Scan result: $line" >> ${LOG_FILE}

 done <<< "$yara_output"

fi

exit 0;

 

 En el script se modificaron los parámetros de YARA_PATH y YARA_RULES de acuerdo a la version de yara en path, y al nuevo archivo de reglas en YARA_RULES.