Tras ver cuál es arquitectura de general de ATTPwn en la primera parte de este artículo, vamos a ver cuáles son los flujos de ejecución de esta emulación de ataques, para terminar con una demostración en vídeo del funcionamiento de esta herramienta, que como hemos dicho, será liberada en su última versión.
Figura 11: ATTPwn: Emulación de adversarios. Una herramienta ofensiva para ATT&CK camino de BlackHat USA 2020 (2 de 2) #IdeasLocas |
Flujos en ATTPwn
Una parte para entender el funcionamiento de la emulación de la amenaza es ver los flujos de comunicación entre la instancia del “console” y el C2 o "Command & Control". En la generación de un warrior (viene derivado del template del console y el honor en honor a nuestro querido ibombshell) se indica la dirección IP a la que éste se debe conectar. Esto se verá más adelante.
Cuando el warrior quiere registrarse como ‘máquina comprometida’ envía una petición por el método POST de HTTP al nodo raíz indicando el ID Warrior que tiene asignado y la información recopilada de la máquina. Cuando esta información es recibida por el nodo raíz, se almacenan los datos en la base de datos y se pone a disposición del usuario para que pueda asignar el plan definido en una amenaza y llevar a cabo su ejecución.
Cuando el warrior se ha registrado solicita un nuevo plan de amenaza a través de la función getPlan(). Si el usuario ha asignado algún plan al warrior se responde de forma afirmativa y se entrega un plan de la amenaza. Este plan está generado en formato JSON.
Una vez que se dispone del plan de la amenaza en el warrior, éste llevará a cabo la solicitud de cada función o tarea a ejecutar. Esto se realiza a través de la función getTask().
Una vez que se dispone del plan de la amenaza en el warrior, éste llevará a cabo la solicitud de cada función o tarea a ejecutar. Esto se realiza a través de la función getTask().
Se ejecutará un getTask() por cada implementación de técnica que el warrior necesite ejecutar para cumplir con el plan de la amenaza. Por cada ejecución anterior, se devolverá a través de la función putResult() dos cosas:
- Si la ejecución de la función que implementa la técnica de ATT&CK ha sido ejecutada correctamente o no. Aquí entra en juego los diferentes controles y defensas que la organización pueda tener implantados.- En segunda instancia, se devuelve la salida de la ejecución de la función que implementa la técnica. Esto es para que un analista técnico pueda comprobar el resultado de dicha ejecución.
Cuando el plan de amenaza, es decir, todas las funciones que implementan las técnicas propuestas son ejecutadas se envía una petición por POST denominada bye(). De esta forma el nodo raíz puede registrar que el warrior ha finalizado.
El nodo raíz también dará por “muerto” al warrior si durante un largo período de tiempo no indica actividad. El warrior indicará actividad si antes de tener asociado un plan de amenaza, el warrior se encuentra solicitando un plan.
Console_Template
La consola será generada desde la aplicación web indicando para ello la dirección IP desde donde se descargará el fichero consola. Existe un fichero denominado consola_template el cual alberga las instrucciones que harán la gestión de la conexión, del plan de amenazas y del cierre de la conexión comentado en el apartado anterior. Cuando se ejecute la instrucción proporcionada en una máquina Windows se ejecutará el código de Powershell necesario para llevar a cabo la instanciación del warrior.
La consola dispone de dos partes con un gran “if” central:
Console_Template
La consola será generada desde la aplicación web indicando para ello la dirección IP desde donde se descargará el fichero consola. Existe un fichero denominado consola_template el cual alberga las instrucciones que harán la gestión de la conexión, del plan de amenazas y del cierre de la conexión comentado en el apartado anterior. Cuando se ejecute la instrucción proporcionada en una máquina Windows se ejecutará el código de Powershell necesario para llevar a cabo la instanciación del warrior.
La consola dispone de dos partes con un gran “if” central:
- La primera parte o el camino básico de inicio es el comienzo de una amenaza. Se realizará una petición de conexión. Antes se crea un ID único para esta instancia de forma que pueda ser identificado en el nodo raíz. Además, se recopila información del sistema operativo donde se está ejecutando.
Después el código de la consola solicitará una petición para conocer si hay algún plan para ejecutar. En caso de que exista plan éste será solicitado. La consola entra en un bucle para ir pidiendo cada función del plan de la amenaza. Cuando esto termina la consola ejecutará un “bye” o desconexión.
Figura 15: Libro de Ethical Hacking 2ª Edición PDF |
- La segunda parte viene determinada por un caso que puede ocurrir en muchas emulaciones de amenazas. Se ha denominado “desdoblamiento” al proceso en el que mediante una escalada de privilegio o tras un movimiento lateral a otra máquina se genera un nuevo proceso con privilegio o con posibilidad de ejecución en otro entorno. En este caso, la consola será invocada con una herencia de ID, es decir, no tendrá que generar el ID Warrior que identifica al warrior ante el nodo raíz.
En otras palabras, si hay un plan con tres tareas y la segunda tarea es una escalada de privilegios, y ésta tiene éxito, entonces la tercera tarea será ejecutada en otro proceso a nivel de sistema operativo, pero desde el punto de vista lógico de ATTPwn es el mismo warrior, es decir, hereda el mismo ID Warrior.
La parte del desdoblamiento es muy importante ya que da pie a que el usuario pueda seguir la evolución de una amenaza de manera “lógica”, pero esta amenaza igual ha saltado de un proceso a otro, ha hecho un movimiento lateral por dos máquinas, ha escalado privilegios y ejecuta en un nivel de integridad superior, etcétera. Para el usuario de ATTPwn la amenaza es la misma y puede “trackear” todo lo sucedido.
¿Cómo se crea una instancia de Console Template?
El C2 de ATTPwn dispone de varios apartados. Uno de ellos se denomina “Warriors”. Aquí podemos generar ese código personalizado en función del despliegue de la aplicación. Solo debemos indicarle la dirección IP donde se encuentra el panel, es decir, el C2.
Figura 16: Creación de un warrior |
El resultado o código que dispondremos para las máquinas remotas es el que tienes en la imagen siguiente.
Figura 17: Código en PowerShell para ejecutar. |
No quiero hacer mucho más largo este primer artículo, ya que hablaremos y os mostraremos muchas cosas que podemos hacer con la nueva herramienta de Ideas Locas. Os dejo un pequeño roadmap de lo que iremos viendo en las próximas semanas:
- Modelo de exportación e importación de conocimiento a la herramienta.
- Generación de funciones basándonos en nuestro skeleton.
- Nueva interfaz gráfica.
- Repaso a las diferentes funcionalidades que trae el C2.
- Diferentes casos de uso basados en amenazas del MITRE.
- La potencia de nuestro DataStore en la realimentación de técnicas que serán ejecutadas en un corto período de tiempo.
Como veis, la potencia de la herramienta es bastante grande y esto es un proceso continuo, en el que muchas de las cosas anteriores las tenemos terminadas o muy avanzadas. Os dejamos un video para entender la herramienta y las posibilidades de ésta. En el siguiente caso de uso, se emula una amenaza que hace lo siguiente:
- Descubrimiento de máquinas en una red: Esta información se almacena en el C2 para que las próximas técnicas puedan hacer uso de dicha información. El elemento de ATTPwn que almacena esta información se denomina “Datastore” o almacén de datos.- Escalada de privilegios: Se llevará a cabo una escalada de privilegios y, si sale bien, hay un desdoblamiento de proceso. Tendremos una console ejecutándose con privilegio. La primera console deja de ejecutar.- Volcado de credenciales: Con el desdoblamiento logrado, es decir, con la escalada de privilegios logrado la amenaza ejecuta un volcado de credenciales y obtendrá un listado de usuarios y hashes.- Lateral Movement: Por último, y con toda la información recopilada anteriormente, se llevará a cabo un movimiento lateral. Para este movimiento lateral se hace uso de datos obtenidos con las técnicas anteriores de descubrimiento y de volcado de credenciales.
Figura 18: PoC de ATTPwn
En todo este proceso, habría que ver si los controles implementados permiten o no que las técnicas se lleguen a ejecutar. Aquí está la gracia. Disfrutad del vídeo.
Saludos,
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 19: Contactar con Pablo González |
No hay comentarios:
Publicar un comentario