Puedes leer la primera parte de esta serie aquí
Visibilidad
En la primera parte, dejamos nuestras fuentes de datos mapeadas con ATT&CK y ya teníamos una buena idea de que ataques podrían estar ocurriendo sin que tuviéramos datos sobre los mismos.
Ahora vamos a ir un paso más y vamos a puntuar nuestra visibilidad basándonos en nuestras fuentes de datos y el conocimiento detallado de nuestros sistemas.
Volvemos a iniciar el container de DeTTECT:
docker start -i dettect
Utilizamos el archivo con las fuentes de datos que generamos en nuestro trabajo anterior - puedes usar mi archivo de ejemplo de aquí - para generar el archivo de administración de técnicas con el siguiente comando:
python3 dettect.py ds -fd input/data-sources-wef.yaml --yaml
Esto nos devuelve un archivo YAML que podemos cargar en el editor de DeTTECT y configurar de acuerdo a nuestra red.
Arrancamos el editor:
python3 dettect.py e
Y cargamos el archivo haciendo click en el menú de la izquierda Techniques > Select YAML.
Esto nos abre una lista de todas las técnicas que están cubiertas con nuestras fuentes de datos. El archivo ya viene con una puntuación de visibilidad generada automáticamente según el número de fuentes disponibles - que añadimos nosotros en la primera parte - para cada técnica.
Por ejemplo, par la sub-técnica T1003.006, DCSync, tenemos una visibilidad de 1:
Si basándonos en nuestro conocimiento de nuestra red tenemos la confianza de que debería tener una puntuación de 2, podemos añadir una nueva entrada en el Logbook haciendo click en Score Logbook.
Añadimos un comentario para referencia futura; añadiendo una nueva entrada podemos mantener un seguimiento de nuestra mejora y evolución en nuestras capacidades de detección.
Podemos hacer esto para todas las técnicas para asegurar que la puntuación de visibilidad refleja la realidad de nuestra organización, y además lo podemos visualizar en el navegador de ATT&CK. No olvides guardar el archivo YAML antes de cerrar el editor, o perderás todos los cambios.
Desde el container de DeTTECT, ejecutamos el siguiente comando para generar el mapa de visibilidad según nuestro nuevo archivo.
python3 dettect.py v -ft input/techniques-administration-windows-data-sources_updated.yaml -l
Y ahora podemos cargar el archivo en la aplicación navigator.
Aquí podemos ver las diferentes capas de azul, dependiendo de la puntuación de visibilidad que hayamos asignado.
Ahora que tenemos mapeado qué podemos ver según nuestras fuentes de datos, nos puede ser útil por ejemplo para eliminar huecos en nuestra visibilidad; vamos a la técnica en la que no tenemos visibilidad ahora mismo, y podemos ver que fuente de datos necesitaríamos para cubrirla y vemos la manera más eficiente de añadirla, bien con un cambio de configuración en una de nuestras herramientas o añadiendo una nueva.
Detecciones
Pero todavía no sabemos si nuestras alertas - nuestro sistema de detección - se corresponde con nuestra visibilidad. Para ello podemos volver al editor de DeTTECT y cargamos de nuevo el archivo de administración de técnicas. Ahora vamos a tratar la sección Detections Score que por defecto están todas a -1. Esto se debe a que el hecho de tener nuestros logs en un SIEM no es lo mismo que tener alertas o detecciones configuradas para técnicas específicas.
De nuevo basándonos en nuestro conocimiento de la red, y con ayuda de esta guía, añadimos la puntuación. Podemos también añadir dónde está configurada cada alerta para tener más contexto.
Veamos un ejemplo; Voy a la técnica T1003 - OS Credential Dumping, hago click en Applicable to all para expandir la sección de puntuación de detección, y la cambio a 2. Añado también el lugar - aquí podemos ser más específicos y añadir por ejemplo el nombre de la regla de Splunk, por ejemplo.
Otro ejemplo con la ténica DCSync y añadiendo Suricata rule en location.
Idealmente, haremos esto para todas las alertas que tengamos configuradas actualmente. Es un proceso que puede ser tedioso, pero al acabar tienes un mapa con todas tus alertas en un solo panel, y relacionadas con las técnicas que detectan, ¿Merece la pena no?. Después de la carga inicial, solo tenemos que mantener actualizado el archivo conforme añadimos nuevas alertas a nuestro entorno.
En mi caso, necesitamos dos días de trabajo intenso para cargar todas nuestras alertas.
Para nuestro ejemplo, voy a añadir una puntuación a la detección de unas cuantas técnicas que tienen visibilidad en nuestro archivo de administración.
Generamos la capa para mostrar estas nuevas detecciones en ATT&CK.
python dettect.py d -ft output/techniques-administration-windows-data-sources-windows_with_detection_scores.yaml -l
Y ahora podemos ver con cierta confianza cuales son nuestras lagunas en caso de ataque, que técnicas no nos darían alertas en nuestro entorno tanto si tenemos logs para ellas como si no.
A continuación vemos como usar el navegador de ATT&CK sacar partido a todos estos datos que hemos reunido hasta ahora.
Visibilidad vs Detecciones
Con la ayuda de un poco de magia en el navegador de ATTA&CK, vamos a cruzar nuestros mapas de visibilidad y detecciones para poder enfocar nuestra atención en las lagunas que estamos descubriendo.
Abrimos las dos capas en el navegador, vamos a la de visibilidad y hacemos click con botón derecho en cualquiera de las técnicas, y entonces marcamos select annotated.
A continuación hacemos click en el icono de scoring y damos por ejemplo una puntuación de 1.
Aquí tenemos todas nuestras técnicas con visibilidad marcadas para comparar con las detecciones.
Repetimos el mismo proceso en la capa de detecciones. Con ambas capas marcadas con una puntuación de 1, podemos construir una nueva capa basada en estas dos.
Abrimos una nueva pestaña en el navegador y seleccionamos la opción Create Layer from other layers, en score expression ponemos b and not a, doneb es nuestra capa de visibilidad y a la de detección. Hacemos click en Submit
Esto nos presenta una nueva capa donde tenemos marcadas las técnicas para las que tenemos visibilidad pero no detecciones.
De un simple vistazo podemos ver que lagunas podemos cubrir sin necesidad de desplegar más herramientas o incrementar el número de logs que recolectamos. Gracias a nuestro trabajo hasta ahora, podemos ver que fuentes de datos tenemos disponibles para elaborar nuevas alertas y detectar más técnicas.
Por ejemplo las sub-técnicas de Execution como Powershell or Windows Command Shell, son un buen ejemplo de qué priorizar, especialmente sabiendo que tenemos logs y visibilidad cubriéndolas, pero no detecciones actualmente.
Resumen
Hasta ahora hemos identificado nuestras fuentes de datos, hemos mapeado nuestra visibilidad - y la falta de la misma - a técnicas en ATT&CK, lo que nos permite priorizar que fuentes de datos necesitamos incorporar para cubrir nuestras lagunas. También hemos mapeado nuestras alertas y comparado las mismas con nuestra visibilidad - lo que nos permite encontrar puntos de mejora fáciles donde añadir nuevas alertas.
En la próxima entrada, veremos como incorporar el concepto de Threat Informed Defense buscando las lagunas en nuestra cobertura para las técnicas que están siendo utilizadas para los adversarios de nuestra organización. Así podemos enfocar nuestro esfuerzo en mejorar nuestras defensas donde el riesgo de ataque a nuestra organización es mayor, basándonos en inteligencia y datos reales.