Elastic para analistas de seguridad. Parte 1: Búsqueda de cadenas.

[post-views]
marzo 02, 2020 · 10 min de lectura
Elastic para analistas de seguridad. Parte 1: Búsqueda de cadenas.

Propósito:

Con Elastic aumentando su presencia en el espacio de la ciberseguridad a través de la velocidad y escalabilidad de su solución, esperamos más nuevos usuarios de Elastic. Estos usuarios se acercarán a Elastic armados con una intuición construida a partir de la experiencia con otras plataformas y SIEMs. A menudo esta intuición será desafiada directamente después de algunas búsquedas en Elastic. El propósito de esta serie es poner a los analistas de seguridad al tanto de la singularidad de Elastic. Esta publicación proporciona a los lectores una guía para construir búsquedas adecuadas contra datos de cadenas en Elastic.No comprender cómo los Texto Palabras clave y no analizados afectan la búsqueda de datos basados en cadenas llevará a resultados engañosos. Al leer esta publicación estarás mejor equipado para realizar búsquedas contra cadenas que coincidan con tus intenciones analíticas.

Esquema:

  1. Antes de Comenzar
  2. ¿Qué Tipo de Datos estás Usando?
  3. Resumen de Diferencias
  4. Diferencia 1: Tokenización y Términos
  5. Diferencia 2: Sensibilidad a Mayúsculas
  6. Diferencia 3: Coincidencia de Símbolos

Antes de Comenzar:

Lucene

Este blog utiliza Lucene. KQL aún no soporta expresiones regulares y las necesitamos.

Términos: Tipos de Datos, Mapas y Analizadores:

Cuando se discute cómo se almacena la información en los índices de Elastic, uno debe familiarizarse con los términos Mapas, Tipos de Datos y Analizadores.

  • Tipo de Datos – El “tipo”, “el tipo de datos” o “tipo de datos” que se almacena/indexa un valor. Ejemplos de tipos de datos son: Cadena, Booleano, Entero, y IP. Las cadenas se almacenan/indexan como un tipo de datos “Texto” o “y no analizados”.
  • Mapa – Esta es la configuración que asigna (mapea) cada campo a un tipo de datos. Accesible a través del API de obtención de mapas. Cuando “obtienes el mapa” se te devuelve el campo y el tipo de datos al que está asignado.
  • Analizador – antes de que los datos de cadenas se almacenen/indexen, el valor se preprocesa para optimizar el almacenamiento y la búsqueda. Los analizadores ayudan a hacer rápidas las búsquedas contra cadenas.

Cómo se Almacenan las Cadenas:

Hay dos tipos principales de datos para cadenas: y no analizados and Texto.

  1. y no analizados las cadenas del tipo y no analizados se almacenan como su valor bruto. No se aplica ningún analizador.
  2. Texto – las cadenas del tipo Texto son analizadas. El analizador predeterminado y más común es el analizador estándar (texto). En esta publicación cuando nos referimos al tipo de datos “Texto” nos referimos al tipo de datos Texto con el analizador estándar. Hay otros analizadores, y es posible personalizar analizadores.

¿Qué Tipo de Datos estás Usando?

Es muy probable que tu instancia de Elastic esté usando ambos tipos de datos para cadenas. Sin embargo, el Esquema Común de Elastic (ECS) Texto and y no analizados y Winlogbeat principalmente usan el tipo de datos primarily use the y no analizados .

Incluso si estás usando ECS, los administradores pueden personalizar las asignaciones. Para saber con certeza cómo se asigna un campo, debes consultar tu instancia de Elastic. Para hacer esto, puedes usar la API de obtención de mapas de campo o la API de obtención de mapas. Es una buena práctica mantenerse al día con las últimas asignaciones para los campos que buscas regularmente o con los que has construido contenido. Las asignaciones pueden cambiar mientras que los nombres de campo pueden permanecer iguales. Reiterando, el campo y no analizados de hoy podría ser un campo Texto mañana.

Las diferencias notables entre y no analizados and Texto se detallan en la sección a continuación. Además, cada diferencia que afectará los resultados de búsqueda será explorada en su propia sección.

Resumen de Diferencias

No esperamos que mires esta sección y de inmediato tenga sentido por qué los tipos coinciden cuando lo hacen. Cada una de las diferencias se amplía en su propia sección. Cada uno de los ejemplos en las tablas también se coloca en una tabla dentro de la sección que explica el comportamiento.

Diferencias

La siguiente tabla proporciona una breve descripción de las principales diferencias en los tipos de datos.

Diferencia Estándar (texto) y no analizados
Tokenizado Dividido en términos (tokenizado), el valor original se pierde pero es más rápido No tokenizado, el valor original se mantiene
Sensibilidad a Mayúsculas Insensible a mayúsculas, las consultas sensibles a mayúsculas no son posibles Sensible a mayúsculas, las consultas insensibles a mayúsculas son posibles vía regex
Símbolos Generalmente, los caracteres no alfanuméricos no se almacenan. Pero, retiene caracteres no alfanuméricos en ciertos contextos Retiene caracteres no alfanuméricos / Retiene símbolos

Diferencias en el Comportamiento

La siguiente tabla proporciona ejemplos del mundo real de cómo los tipos afectan el comportamiento de búsqueda.

Ejemplo de Valor Consulta Coincidencia de Texto Coincidencia de Palabras Clave
Powershell.exe –código TvqQAAMA process.args:código Yes No
Powershell.exe –código TvqQAAMA process.args:/.*[Ee][Nn][Cc][Oo][Dd][Ee][Dd].*/ Yes Yes
Powershell.exe –código TvqQAAMA process.args:*Powershell.exe*Tvq* No Yes
tVqQAAMA process.args:*tVqQAAMA* Yes Yes
tVqQAAMA process.args:*tvqqaama* Yes No
cmd.exe process.name:cmd.exe Yes Yes
CmD.ExE process.name:cmd.exe Yes No
CmD.ExE process.name:/[Cc][Mm][Dd].[Ee][Xx][Ee]/ Yes Yes
\*$* process.args:*\\*$* No Yes
\C$WindowsSystem32 process.args:*C$\* Yes Yes

_

Diferencia 1: Analizador, Tokenización y Términos

Diferencia

Diferencia Texto (analizador estándar) y no analizados
Tokenizado Dividido en términos (tokenizado) No Analizado, No Tokenizado. Valor original mantenido.

¿Por qué…?

The Texto El tipo de datos / analizador estándar utiliza la tokenización que divide una cadena en fragmentos (tokens). Estos tokens se basan en límites de palabra (es decir, un espacio), puntuación y más.

Como ejemplo, si tokenizamos la siguiente cadena con el analizador estándar:«buscar cosas con Elastic es sencillo»Los términos resultantes serían:«buscar» | «cosas» | «con» | «elastic» | «es» | «sencillo»Nota que todo fue tokenizado en espacios (límites de palabra), ahora está en minúsculas, y la «s» fue removida de cosas.

La tokenización permite coincidencia en términos individuales sin contener o usar comodines. Por ejemplo, si realizamos una búsqueda para «Elastic» the Texto una cadena de tipo de datos que contiene “buscar cosas con Elastic es sencillo” coincidiría. Esto es diferente de otros SIEMs que dependen mucho de los comodines o la lógica de ‘contiene’.

Sin embargo, la tokenización se rompe en los comodines entre términos. Por ejemplo, «*buscar*Elastic*» no coincidiría con la cadena analizada estándar «buscar con Elastic es sencillo».Nota: Puedes abordar esto con proximidad, pero el orden no se mantiene. Por ejemplo, “buscar Elastic»~1 coincidiría con «buscar con Elastic» y «Elastic con buscar».

 A menudo en seguridad necesitamos coincidencias exactas y la habilidad de usar comodines entre términos. Esta es una razón por la que el tipo de datos y no analizados se ha convertido en el tipo de datos predeterminado en ECS. Lo que pierdes en velocidad lo ganas en la capacidad de realizar búsquedas más precisas.

Ejemplos

Ejemplo de Valor Consulta Coincidencia de Texto Coincidencia de Palabras Clave
Powershell.exe –código process.args:”Powershell.exe –código” Yes Yes
Powershell.exe –código TvqQAAMA process.args:/.*[Ee][Nn][Cc][Oo][Dd][Ee][Dd].*/ Yes Yes
Powershell.exe –código TvqQAAMA process.args:código Yes No
Powershell.exe –código TvqQAAMA process.args:*Powershell.exe*código* No Yes

_

Diferencia 2: Sensibilidad a Mayúsculas

Diferencia

Diferencia Texto (analizador estándar) y no analizados
Sensibilidad a Mayúsculas Está almacenado completamente en minúsculas y por lo tanto es insensible a mayúsculas. Las consultas sensibles a mayúsculas no son posibles. Sensible a mayúsculas. Consultas insensibles a mayúsculas posibles usando expresiones regulares.

¿Por qué…?

Los problemas de sensibilidad a mayúsculas son una de las principales causas de confusión en el comportamiento de Elastic como analista de seguridad. Esto es especialmente cierto para el tipo de datos y no analizados (hola comunidad ECS). Un solo carácter fuera de mayúscula en un registro puede evitar que una consulta mal construida coincida contra los campos y no analizados . Cuando un atacante controla partes de datos que llegan a Palabras clave (piensa en eventos de windows 4688 y 4104) deberías estar usando expresiones regulares para asegurar la insensibilidad a mayúsculas!Además, Elastic no te advertirá si un documento fue apenas omitido debido a un solo carácter fuera de mayúscula. Por lo tanto, los resultados faltantes o más resultados de los esperados son una de las principales causas de confusión como analista de seguridad.

Aquí hay un ejemplo básico de coincidencia contra «PoWeRsHeLl». Nota cómo un solo carácter fuera de mayúscula es suficiente para evitar que la consulta coincida.

Ejemplo de Valor Consulta Coincidencia de Texto Coincidencia de Palabras Clave
PoWeRsHeLl process.args:PoWeRsHell Yes No
PoWeRsHeLl process.args:PoWeRsHeLl yes yes
PoWeRsHeLl process.args:/[Pp][Oo][Ww][Ee][Rr][Ss][Hh][Ee][Ll][Ll]/ yes Sí (coincide con todas las mayúsculas)

Para un ejemplo real en Kibana. En la imagen a continuación, se consulta en el campo de tipo “process.args” la cadena “windows”. Para un analista desprevenido esto puede parecer suficiente… se devolvieron 42 resultados. Bueno, si esperaban obtener cualquier documento que contenga “windows” estarían equivocados. Como la búsqueda es sensible a mayúsculas, “Windows” no coincidiría. y no analizados type field “process.args” is queried for the string “windows”. To an unsuspecting analyst this may seem good enough… 42 results were returned. Well if they were hoping to obtain any document containing “windows” they would be wrong. As the search is case sensitive, therefore “Windows” would not match.

Resultados limitados de búsqueda sensible a mayúsculas

En la consulta a continuación, usar una expresión regular para buscar “windows” corresponde adecuadamente con 567 resultados que anteriormente estaban “faltando”!

Resultados máximos

Esperamos que ahora esté claro que si estás buscando usando el tipo y no analizados y no estás usando una expresión regular, entonces perderás variaciones de “powershell” más allá de una coincidencia exacta. Ten cuidado de no usar KQL (que no soporta regex) para coincidir contra datos que el atacante controla.Nota: Hay casos de uso cuando desearás coincidencias sensibles a mayúsculas en campos de palabras clave, como con base64.Puedes hacer que cualquier consulta sea insensible a mayúsculas usando conjuntos de caracteres regex. Aquí hay ejemplos:

código /[Ee][Nn][Cc][Oo][Dd][Ee][Dd]/
cmd.exe /[Cc][Mm][Dd].[Ee][Xx][Ee]/
C:windowssystem32* /[Cc]:\[Ww][Ii][Nn][Dd][Oo][Ww][Ss]\[Ss][Yy][Ss][Tt][Ee][Mm]32\.*/

Ejemplos

Ejemplo de Valor Consulta Coincidencia de Texto Coincidencia de Palabras Clave
tVqQAAMA process.args::*TVqQAAMA* Yes Yes
tVqQAAMA process.args: *tvqqaama* Yes No
cmd.exe process.name:cmd.exe Yes Yes
CmD.ExE process.name:cmd.exe Yes No
CmD.ExE process.name:/[Cc][Mm][Dd].[Ee][Xx][Ee]/ Yes Yes

_

Diferencia 3: Coincidencia de Símbolos

Diferencia

Diferencia Texto (analizador estándar) y no analizados
Símbolos Generalmente, los caracteres no alfanuméricos no se almacenan. Pero, retiene caracteres no alfanuméricos en ciertos contextos Retiene caracteres no alfanuméricos / Retiene símbolos

¿Por qué?

Todos los símbolos son mantenidos por el tipo y no analizados ya que todo el campo se mantiene exactamente como se introduce el dato (ver nota). Sin embargo, para el analizador estándar, una regla general a seguir es que los símbolos no se mantendrán. Esto se debe a que el analizador fue hecho para la coincidencia de palabras completas y los símbolos no son palabras. Reiterando, los símbolos (en su mayor parte) no se almacenan en el analizador estándar. Por lo tanto, Si pretendes coincidir en símbolos es mejor usar el tipo de datos y no analizados , si solo tienes un campo de texto y necesitas coincidir en un grupo de símbolos estás sin suerte. Sin embargo, hay contextos donde los símbolos se mantendrán en el analizador estándar. Por ejemplo, los puntos se mantendrán en términos como “cmd.exe”. Los autores han encontrado que la forma más fácil de entender cuándo se mantendrán los símbolos en el analizador estándar es simplemente ejecutar datos de prueba en la API de análisis.

Ejemplos

 

Ejemplo de Valor Consulta Coincidencia de Texto Coincidencia de Palabras Clave
\*$* process.args:*\\*$* No Yes
\C$WindowsSystem32 process.args:*C$\* Yes Yes
cmd.exe process.name:cmd.exe Yes Yes

_

Conclusión

Elastic es una herramienta poderosa. Sin embargo, también puede ser engañosa. Esperamos haberte armado con un poco más de conocimiento y el poder de buscar con confianza contra datos basados en cadenas.

Si sientes que necesitas ayuda escribiendo contenido para Elastic, el Threat Detection Marketplace de SOC Prime está lleno de contenido de detección que funciona con nuestra configuración sugerida de Elastic.

Publicaciones Futuras

Mantente atento para más publicaciones de blog explorando los fundamentos y no tan fundamentos de usar Elastic como analista de seguridad.

Recursos Adicionales para Búsquedas:

Esta serie se centra en los puntos de dolor comunes para los analistas más que profundizar en el tema de la sintaxis. Elastic proporciona documentación detallada sobre su sintaxis Lucene. Además, hay varias hojas de trucos de calidad de la comunidad: notablemente de McAndre and Florian Roth y Thomas Patzke.

Meta:

Publicado – Marzo 2020

Última Actualización – 12 de marzo

Autores – Adam Swan (@acalarch) con la ayuda de Nate Guagenti (@neu5ron)

Versión de Elastic Usada: 7.5.2

Registros Usados en los Ejemplos: https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES

¿Fue útil este artículo?

Dale me gusta y compártelo con tus compañeros.
Únase a la plataforma Detection as Code de SOC Prime para mejorar la visibilidad de las amenazas más relevantes para su negocio. Para ayudarle a comenzar y obtener un valor inmediato, reserve una reunión ahora con los expertos de SOC Prime.

Publicaciones relacionadas