Engineering

Elastic Security abre un repositorio público de reglas de detección

En Elastic, creemos en el poder del open source y comprendemos la importancia de la comunidad. Al priorizar la comunidad, nos aseguramos de crear el mejor producto posible para los usuarios. Con Elastic Security, dos de nuestros objetivos principales son detener las amenazas a escala y equipar a todos los analistas. Hoy abrimos un nuevo repositorio de GitHub, elastic/detection-rules, para trabajar junto con la comunidad de seguridad y detener amenazas a mayor escala.

El lanzamiento del motor de detección en Elastic Security aportó la detección de amenazas automática al Elastic Stack. Desde el lanzamiento inicial del motor de detección, el equipo de Inteligencia y analíticas de Elastic Security ha agregado más de 50 reglas adicionales, lo que aumentó la visibilidad de técnicas de los atacantes en sistemas operativos Linux, macOS y Windows. A medida que continuamos expandiendo la cobertura, verás mayor amplitud de detecciones, que cubren dominios nuevos como servicios en el cloud y comportamiento del usuario.

En los últimos lanzamientos, usamos un repositorio interno para gestionar las reglas del motor de detección. Mejoramos iterativamente nuestros procedimientos de pruebas agregando pruebas automáticas para contribuciones nuevas que validan la sintaxis del lenguaje de búsqueda de Kibana (KQL), el uso del esquema y otros metadatos. Nuestro desarrollo de reglas maduró, por lo que podemos movernos rápido sin romper nada.

Al abrir nuestro repositorio de GitHub elastic/detection-rules, Elastic Security desarrollará reglas abiertas junto con la comunidad, y agradecemos tus detecciones impulsadas por la comunidad. Esta es una oportunidad para que todos compartamos nuestro conocimiento colectivo, aprendamos del otro y tengamos un impacto trabajando juntos.

¿Qué hay en este repositorio nuevo?

En el repositorio de GitHub elastic/detection-rules, puedes encontrar reglas escritas para Elastic Security, con cobertura para muchas técnicas de MITRE ATT&CK®. Nuestra lógica de reglas actual está escrita principalmente en KQL, y al aprovechar Elastic Common Schema (ECS), solo necesitamos escribir las reglas una vez. A través del uso de categorías y campos definidos en ECS, las reglas trabajan automáticamente con los logs de Beats y otras fuentes de datos que se mapean correctamente a ECS.

Dentro de la carpeta rules/, las reglas se almacenan en archivos TOML y se agrupan por plataforma. Intentamos mantenerlo simple con una jerarquía plana para que sea más fácil encontrar y agregar reglas nuevas. Si buscas reglas para Windows únicamente, navega a rules/windows. Si aún se te complica encontrar una regla o quieres buscar en todas las reglas, puedes usar nuestra CLI ejecutando el comando python -m detection_rules rule-search, que mostrará los archivos con metadatos que coincidan.

Cada regla contiene varios campos de metadatos además de la búsqueda en sí. Esto captura información como el título, la descripción, el nivel de ruido, los mapeos de ATT&CK, las etiquetas y el intervalo de programación. Tenemos algunos campos adicionales para ayudar a los analistas que realizan la priorización, describen falsos positivos conocidos o pasos útiles para una investigación. Para obtener más información sobre los metadatos relacionados con las reglas, puedes ver la guía de creación de reglas de Kibana o nuestro resumen de metadatos de reglas en la guía de contribución.

detection-rules-repo-blog-msbuild.png

Vista previa del archivo detrás de la regla “MsBuild Making Network Connections”

¿Cómo llegan estas reglas a mi motor de detección?

Si usas nuestro servicio gestionado de Elastic Cloud o la distribución predeterminada del software del Elastic Stack que incluye el conjunto completo de características gratuitas, obtendrás las reglas más recientes la primera vez que navegues al motor de detección. Cuando actualizas, el motor de detección reconoce que se agregaron o cambiaron reglas y te solicita decidir si deseas actualizarlas. Sigue estos pasos después de actualizar y obtendrás la copia más reciente de las reglas.

detection-rules-repo-blog-msbuild-network-connections.png

La misma regla (“MsBuild Making Network Connections”) cargada en el motor de detección

¿Quién usará este repositorio?

Este repositorio es donde el equipo de Inteligencia y analíticas de Elastic Security desarrollará reglas, creará tickets de problemas, gestionará solicitudes de extracción y definirá las versiones objetivo. Al hacer el repositorio público, invitamos a todos los contribuyentes externos a este flujo de trabajo. Esto les dará visibilidad en nuestro proceso de desarrollo y una ruta clara para el lanzamiento de las reglas con el motor de detección.

Cuando estés listo para contribuir, firma el acuerdo de licencia de contribuyente (CLA) de Elastic. Es estándar para todos los repositorios de GitHub de Elastic y significa que podemos distribuir con libertad tu código a los usuarios de Elastic.

¿Cómo abordamos la detección de amenazas?

En general, tendemos a preferir las detecciones que se enfocan en los comportamientos del atacante. Esto suele significar que nos enfocamos en las técnicas de ATT&CK. Esto puede significar que se necesita más investigación y esfuerzo para descubrir cómo funciona una técnica antes de crear una regla. Pero al adoptar este enfoque, podemos detectar y detener mejor los ataques actuales y futuros, en lugar de solamente los pasados.

Adoptar un enfoque del comportamiento también significa que necesitamos varios tipos de reglas. Algunas pueden detectar eventos atómicos, otras pueden requerir agregar varios eventos o buscar desviaciones por sobre un umbral. Con el lenguaje de búsqueda de eventos (EQL), podremos escribir reglas que busquen secuencias de comportamiento que abarquen varios eventos.

Por supuesto, comprendemos que en ocasiones puede ser difícil que todos los usuarios detecten por comportamiento una técnica. En ese caso, desde ya, siéntete libre de agregar una regla con una naturaleza más similar a una firma y escrita para una herramienta o comportamiento específicos.

Para ver un análisis más extenso sobre qué hace a una decisión madura, lee sobre la filosofía del repositorio de reglas de detección.

¿Por qué necesitamos un repositorio nuevo?

Si ya has compartido reglas públicas, probablemente conozcas otros repositorios de GitHub reconocidos, como Cyber Analytics Repository (CAR) de MITRE, Sigma o incluso EQL Analytics Library basado en el EQL de Elastic. Quizá te preguntes: ¿por qué necesitamos otro repositorio? ¿Por qué no usar los que ya existen?

Como era de esperar, la mejor respuesta a esta pregunta comienza con otra pregunta: ¿por qué existen otros repositorios? Tanto CAR como Sigma son deliberadamente independientes del lenguaje o la plataforma, y a veces de la fuente de datos. Por otra parte, EQL Analytics Library se escribió con un lenguaje específico en mente.

Con nuestro repositorio de reglas de detección nuevo, apuntamos a un propósito ligeramente diferente. Nuestro objetivo es brindar a los usuarios de Elastic Security las mejores detecciones posibles que funcionen en varias fuentes de datos. Usamos ECS como el gran ecualizador de esquemas, lo que posibilita escribir una regla una vez que aplique a varias fuentes de datos.

Como el Elastic Stack soporta varios lenguajes, nuestras reglas deben reflejar eso. Los lenguajes de búsqueda generalmente se desarrollan para resolver diferentes tipos de problemas, y no deberíamos limitar a los desarrolladores de reglas a un solo lenguaje si otro funciona mejor. Actualmente tenemos reglas de KQL y Lucene, además de reglas que usan trabajos de detección de anomalías con Machine Learning en el repositorio. Estamos trabajando duro para incorporar EQL al Elastic Stack y a nuestro repositorio.

También podemos asegurarnos de que se sigan las mejores prácticas para un rendimiento óptimo de Elasticsearch. Por ejemplo, buscar process.path:*\\cmd.exe requiere realizar una comprobación del comodín, que es más costoso que comprobar una simple palabra clave. En lugar de búsquedas con comodines al inicio, recomendamos usar process.name:cmd.exe, que dará como resultado un mejor rendimiento y proporcionará los resultados más exactos. De forma similar, ECS también contiene el campo process.args, que es una versión parseada de process.command_line. Recomendamos usar el campo parseado en su lugar, porque nos da un mejor rendimiento y significa que somos menos propensos a evasiones de espacios en blanco triviales o basadas en comillas. Todos ganamos.

¿Puedo agregar reglas de otro repositorio?

Dentro de tu propio entorno, puedes agregar reglas en tu propio motor de detección siempre y cuando tu rol de Kibana tenga los permisos adecuados. Si deseas agregar reglas al repositorio elastic/detection-rules, la respuesta, como es de esperar, es: Depende.... Siempre y cuando una regla pueda sublicenciarse bajo la licencia de Elastic, es válido. Generalmente, los requisitos son bastante simples: retener los autores originales en la matriz rule.author y actualizar el archivo NOTICE.txt según corresponda para hacer mención a los autores originales. No queremos el crédito del trabajo de otro, ayúdanos a ser minuciosos.

Para obtener más información sobre cómo abordamos las licencias en el repositorio, visita la sección Licensing (Licencias) del archivo README (Léeme).

¿Cómo puedo contribuir?

¿Ansioso por compartir tu lógica de regla? Únete a elastic/detection-rules en GitHub. Allí detallamos las instrucciones para navegar en el repositorio, bifurcar y clonar, y crear una regla. Incluimos una herramienta de línea de comando para la edición masiva de archivos y para facilitar la creación de reglas nuevas. Cuando estés listo para agregar una regla nueva al repositorio, ejecuta python -m detection_rules create-rule y se te pedirán los metadatos necesarios. Recomendamos usar la CLI cuando sea posible, ya que disminuye los errores de copiar y pegar que ocurren cuando reutilizamos contenidos de un archivo TOML de otra regla o plantilla.

Cuando tu regla está en buen estado, puedes ejecutar el comando python -m detection_rules test para realizar pruebas de unidad de forma local, lo que valida la sintaxis, el esquema de uso, etc. Después, crea la solicitud de extracción y alguien del equipo de Inteligencia y analíticas revisará la contribución. Si solicitamos algún cambio, trabajaremos contigo para realizar los cambios recomendados. 

Si tienes una buena idea para una regla, pero quieres colaborar con nosotros al respecto u obtener comentarios, siéntete libre de crear un ticket de Regla nueva. Esperamos ayudarte y hacer lluvia de ideas juntos.

Para obtener más información, echa un vistazo a la guía de contribución.

¿Qué sigue?

Bienvenido a nuestro flujo de trabajo y repositorio de reglas nuevas. Te alentamos a hacer contribuciones y esperamos ver tu nombre en el campo rule.author. El repositorio de reglas de detección continuará evolucionando con el resto de Elastic Security, y estamos ansioso por lo que vendrá.

Si deseas rastrear el desarrollo de EQL en la pila, suscríbete a este ticket de GitHub. O echa un vistazo a la documentación en curso para saber qué está haciendo el equipo de Elasticsearch.

Si tienes comentarios o preguntas sobre escribir reglas o navegar en nuestro repositorio de GitHub de reglas de detección nuevo, crea un ticket en GitHub, recurre al foro de discusión con la etiqueta detection-rules o encuéntranos en el canal #detection-rules de Elastic Slack Community.