Security Operations

Un kit de herramientas ML de código abierto para generar automáticamente reglas YARA

El aprendizaje automático tiene muchas aplicaciones en ciberseguridad. Sin embargo,  los modelos generados por el aprendizaje automático no son adecuados en todas las situaciones, especialmente en los dispositivos de borde de menos potencia. A veces se necesita algo más ligero para investigar un posible malware. Y en algunos casos, lo único disponible es YARA, la herramienta de clasificación multiplataforma mantenida por VirusTotal.

YARA clasifica el contenido aplicando las reglas YARA, reglas legibles por el ser humano que identifican los artefactos de texto asociados a un tipo específico de código o contenido malicioso.  Sin embargo, escribir reglas a mano para YARA puede llevar mucho tiempo, y la eficacia de las reglas depende en gran medida de la habilidad y el criterio de quien las escribe. Aportar el poder del aprendizaje automático al proceso de creación de reglas YARA podría acelerar y simplificar significativamente su generación.

Esa es precisamente la idea que subyace en la herramienta experimental YaraML de Sophos, desarrollada por el científico jefe de SophosAI Joshua Saxe. YaraML puede utilizarse sin ninguna experiencia previa en aprendizaje automático, pero también permite a los usuarios más avanzados y familiarizados con los proyectos de aprendizaje automático establecer parámetros personalizados.

YaraML analiza un conjunto de datos de artefactos de cadena etiquetados benignos y maliciosos para crear reglas YARA, extrayendo patrones que pueden utilizarse para identificar artefactos de cadena maliciosos utilizando YARA. Saxe utilizó YaraML para crear reglas YARA de ejemplo para detectar el malware de PowerShell, el malware asociado a la campaña de ciberespionaje de SolarWinds y el malware de macOS, que también se han publicado en la página de GitHub de Sophos.

Aunque Sophos no utiliza YARA como parte de sus productos, las reglas de YARA pueden ser útiles para quienes responden a incidentes y para los investigadores de malware, especialmente en situaciones en las que no se dispone de otro tipo de herramientas o son poco prácticas de desplegar. Por ello, la herramienta y las reglas se han compartido como código abierto bajo la licencia Apache 2.0 con la esperanza de que puedan ayudar al equipo azul y a la comunidad de investigación de amenazas.

Cómo entrenar tu propio modelo

YaraML es una herramienta de aprendizaje automático basada en Python que permite generar tu propia regla YARA a partir de un conjunto de datos etiquetados como maliciosos o benignos. A partir de ese conjunto de datos, como resultado final, YaraML genera una regla YARA completa y legible para los humanos (aunque no totalmente comprensible) que puede desplegarse tal cual o utilizarse junto con reglas escritas por humanos.

Para entrenar tu propio modelo necesitas tener instalado Python 3.6 o posterior en tu ordenador. El código de YaraML puede obtenerse en la página GitHub de Sophos. Tu script de instalación recuperará todas las bibliotecas necesarias.  Una vez instalado, YaraML puede invocarse desde la línea de comandos con el siguiente formato:

yaraml [nombre del modelo creado] [nombre de la regla de Yara creada]

Por ejemplo

yaraml powershell_malware/ powershell_benign/ powershell_model powershell_detector

El script dispone de dos formas de clasificación binaria utilizando la biblioteca scikit-learn de Python: regresión logística o bosque aleatorio.  Por defecto, el script utilizará el bosque aleatorio pero puede cambiarse en la línea de comandos. También se puede establecer el número máximo de archivos de muestra, así como los hiperparámetros de aprendizaje automático personalizados para aquellos que quieran ajustar aún más el modelo generado.

En cuanto al número de archivos que se deben utilizar cuando se ejecuta YaraML, se aplica la misma regla que cuando se construye cualquier modelo: normalmente, cuantos más datos de entrenamiento, mejor. YaraML puede escalar fácilmente a cientos de miles de ejemplos. Dependiendo del tipo de datos representativos de que se disponga, 10.000 muestras maliciosas y 10.000 benignas es un buen conjunto con el que trabajar para poder entrenar el modelo y verificar las reglas generadas. Pero en la práctica, es posible que no se disponga de tantas muestras para trabajar.

Por ejemplo, veamos cómo se creó la regla genérica de detección del malware de PowerShell incluida en el repositorio de GitHub. En primer lugar, se utilizó una colección de unas 2.000 muestras de malware de PowerShell en la carpeta powershell_malware, y otras 8.000 secuencias de comandos de PowerShell inofensivas en una carpeta llamada powershell_benign. A continuación, se lanzó YaraML con la siguiente entrada de línea de comandos

yaraml powershell_malware/ powershell_benign/ powershell_model powershell_detector --model_type="logisticregression"

Esto iniciará YaraML y creará un modelo de aprendizaje automático llamado powershell_model y una regla YARA llamada powershell_detector. El parámetro -model_type establecido aquí fija el tipo de análisis en regresión logística.  El argumento model_type se maneja en el script de YaraML en el código que se muestra a continuación definiendo la tarea de aprendizaje automático:

a screenshot of part of YaraML's main code

Si quieres desviarte de los esquemas de clasificación incorporados en YaraML, puedes ajustar aún más el proceso de aprendizaje automático especificando directamente los hiperparámetros que definen cómo se construye el modelo con el parámetro de línea de comandos model_instantiation. Por ejemplo:

--model_instantiation="LogisticRegression(penalty='l1',solver='liblinear')"

Además, es posible establecer un número máximo de archivos a utilizar en la construcción del modelo para acelerar la creación del conjunto de reglas, lo que probablemente dará lugar a una menor precisión pero acelerará el despliegue de las reglas, introduciendo un parámetro max_benign_files y max_malicious_files:

--max_benign_files=100 --max_malicious_files=100

Cuando se ejecuta, YaraML extrae las subcadenas de características de las muestras y realiza una selección de características para reducir el número de características y evitar el “sobreajuste” del modelo. A continuación, entrena un modelo basado en el tipo de modelo y las características seleccionadas. Por último, YaraML “compila” el modelo, convirtiendo las características seleccionadas y sus pesos como indicadores en una regla textual de Yara, que tiene el aspecto del ejemplo siguiente:

A screenshot of part of a YaraML-generated YARA rule

En el extracto de la regla anterior, YaraML utilizó un clasificador de regresión logística y descubrió automáticamente un conjunto importante de tokens (definidos como $sXX) necesarios para una clasificación precisa de los comandos PowerShell. Esos tokens se suman para crear la puntuación final.

Al final de la regla, hay una sección etiquetada como “condición” que aplica un umbral para la puntuación ponderada para determinar si la regla de detección se activa. Este umbral lo establece automáticamente la herramienta, pero puede editarse manualmente para ajustar la forma en que se aplica la regla, ya sea para aumentar la detección general o para reducir los falsos positivos.  Para las reglas YARA definidas por regresión logística, la declaración de condición es una ecuación que comprueba la suma de los tokens con un valor específico:

Screen shot of the end of a logistic regression based YARA rule generated by YaraML

Al cambiar el valor después del “>” se modifica el umbral. El cambio de este número puede hacer que la regla sea más agresiva en la detección de muestras maliciosas (dando lugar a más falsos positivos), o reducir el número de falsos positivos (dando lugar a más archivos maliciosos no detectados). Si lo estableces demasiado bajo, habrá demasiados falsos positivos; si lo estableces demasiado alto, se te escaparán más archivos maliciosos. Por ejemplo, aquí se muestra cómo afectan los diferentes umbrales a la regla de PowerShell:

A plot of the ratio of detections versus false positive rates based on different threshold levels set in a YARA rule for detecting malicious PowerShell scripts.

Para las reglas creadas con un clasificador de bosque aleatorio, el conjunto de condiciones es una colección de declaraciones booleanas que representan qué árboles definidos tienen que coincidir para que un artefacto coincida con la regla:

The condition section of a YARA rule generated from a random forest model.

Advertencia

Aquellos que utilicen las reglas de YaraML deben ser advertidos, al igual que con todos los elementos de los sistemas de aprendizaje automático, de que no existe un conjunto de reglas 100% preciso. Además, YaraML es una herramienta experimental, y la hemos publicado para compartirla con la comunidad en ese contexto. No es probable que haya mucho mantenimiento del código, si es que lo hay, pero se ofrece bajo la licencia Apache 2.0, así que eres libre de adaptar el código y utilizarlo como creas conveniente bajo esos términos.

Dejar un comentario

Your email address will not be published. Required fields are marked *