viernes, febrero 12, 2021

Hacking Windows: Técnicas de persistencia en sistemas Windows (Parte I)

Hace unos meses mi hermano y yo dimos una charla en BSides y C0r0n4CON acerca de cómo llevar a cabo y cómo detectar técnicas de persistencia en sistemas el entornos de Hacking de Windows. Por el feedback que tuvimos parece que gustó bastante. Así que nuestra intención es sacar varios artículos explicando detalladamente estas técnicas.

Figura 1: Hacking Windows: Técnicas de persistencia en sistemas Windows (Parte I)

Al final de estos artículos también publicaremos una herramienta que os permitirá detectar estas técnicas y muchas más.

Técnicas de persistencia

¿Qué es una técnica de persistencia? Son aquellas técnicas que utilizan los adversarios, una vez que han conseguido penetrar en el sistema, para mantener el acceso sin importar si el sistema vulnerado es reiniciado, se modifican sus credenciales o se realizan otras acciones que podrían interrumpir la conexión entre el atacante y la víctima. 

Figura 2: Hacking Windows: "Ataques a sistemas y redes Microsoft"
de Pablo González, Carlos García y Valentín Martín.

Es importante puntualizar que estas técnicas se llevan a cabo en la fase de post-explotación de un ataque, es decir, una vez que se tiene acceso al sistema vulnerado. Durante estos posts nos centraremos en explicar las técnicas que se enumeran a continuación. De momento no os preocupéis si no sabéis qué significan cada una de estas técnicas (puede asustar un poco al principio, pero poco a poco iremos arrojando luz).
  • Persistencia usando el registro de Windows
  • Persistencia usando las scheduled tasks o tareas programadas de Windows.
  • Persistencia usando WMI o Windows Management Instrumentation.
Matriz ATT&CK de MITRE

Antes de empezar a explicar estas técnicas es importante entender qué es MITRE ATT&CK, ya que lo hemos utilizado como referencia para realizar nuestras presentaciones y estos artículos. Es una plataforma que organiza y categoriza los distintos tipos de ataques, amenazas y procedimientos realizados por atacantes. Toda esta información se va almacenando en forma de matriz o tabla. Esta matriz se organiza en tácticas, que vienen a ser las categorías, y dentro de estas se encuentran las técnicas, que son los tipos de ataque. 

Por cada técnica se pueden encontrar ejemplos, referencias, sugerencias para la mitigación y detección de la amenaza, etc. También es importante mencionar que estas técnicas, a su vez, se dividen en otras técnicas. En la Figura 3 puede verse la matriz ATT&CK de MITRE, donde las tácticas aparecen recuadradas en rojo y las técnicas aparecen recuadradas en verde.


Las técnicas que se van a tratar en estos artículos se encuentran recogidas dentro de la Táctica de Persistencia y se encuentran mapeadas a las técnicas T1547.001 (registro de Windows), T1053 (scheduled tasks) y T1546.003 (Windows Management Instrumentation) de la matriz ATT&CK de MITRE. Os animamos a que investiguéis acerca de otras técnicas usando esta matriz (como os podéis imaginar es utilizada por muchos profesionales que se dedican a la ciberseguridad).


Si quieres saber más de la emulación de ataques con la Matriz ATT&ACK de Mitre, te recomendamos que eches un ojo a ATTPwn, la herramienta de emulación de ataques que han hecho nuestros compañeros. Tienes muchos artículos de ella en este blog:
Qué es el registro de Windows

Una vez que se ha entendido qué es una técnica de persistencia, qué es la matriz ATT&CK y dónde se ubican las técnicas que vamos a tratar en sucesivos artículos, se puede empezar con la primera de ellas: técnicas de persistencia usando el registro de Windows. Pero antes, ¿qué es el registro de Windows? Es una base de datos jerárquica que almacena información de configuración. A priori, esta definición nos dice poco, por lo que os daremos nosotros una definición un poco más cercana: es una base de datos que contiene información de configuración organizada en una estructura arbórea muy similar al sistema de ficheros de Windows, que todos conocemos. 

Por tanto, debemos quedarnos con que es un sistema de ficheros, pero en lugar de almacenar imágenes, documentos y ejecutables almacena información de configuración. Si queremos acceder al registro de Windows tenemos que buscar por el término “Editor de Registro” en la barra de búsqueda de Windows, tal y cómo puede verse en la Figura 5.

Figura 5: Búsqueda del Editor de Registro

Una vez que estamos dentro, podemos empezar a navegar por el registro de Windows de forma muy similar a como si lo hiciésemos en el sistema de ficheros. Véase la Figura 6. Lo que puede parecer una carpeta o directorio se denomina clave de registro (recuadrada en rosa en la Figura 6) y lo que parece un archivo es un valor de registro, que almacena un parámetro de configuración de Windows (recuadrado en negro en la Figura 6). Los valores del registro pueden parecer un poco complejos, pero no lo son, se pueden entender cómo variables que tienen un nombre, un tipo y un valor (este último puede estar en formato binario, hexadecimal o legible).

Figura 6: Conceptos clave del registro de Windows

Las carpetas raíz (recuadradas en verde en la Figura 6), aquellas que se encuentran en la jerarquía más alta, se les denomina Hives o colmenas. Estas colmenas dividen la configuración de Windows en varias categorías (así lo tenemos todo ordenado). En este post explicaremos tres de ellas por su importancia en la fase de post-explotación:

• HKEY_USERS: contiene todos los perfiles de usuario del equipo. Es decir, si tenemos los usuarios Marcos y Alberto dentro de una máquina Windows, tendremos un perfil de usuario (con una serie de configuraciones) para Marcos y otro para Alberto.

• HKEY_CURRENT_USER: contiene la información de configuración del usuario que ha iniciado sesión actualmente. Es decir, si Marcos inicia sesión en el equipo entonces se carga el perfil de Marcos en HKEY_CURRENT_USER. Esta colmena la encontraréis abreviada en la mayoría de los casos como HKCU.

• HKEY_LOCAL_MACHINE: contiene información de configuración específica del equipo (para cualquier usuario). Esta colmena de registro es especialmente crítica, ya que todo lo que se ejecute desde aquí se ejecutará con privilegios de System, es decir, con máximos privilegios. Esta colmena la encontraréis abreviada en la mayoría de los casos como HKLM.

Ataque de persistencia

Como os podréis estar imaginando, para realizar el ataque de persistencia se utilizarán algunas de estas colmenas. Si conseguimos hacer persistencia usando la colmena HKLM podremos conseguir permisos de System, mientras que si hacemos persistencia en la colmena HKCU conseguiremos los permisos que tenga el usuario. También es importante destacar que para escribir en la colmena HKLM es necesario tener privilegios máximos en el sistema. Por tanto, antes sería necesario realizar un bypass UAC y puede que también una escalada de privilegios. Si no conocéis qué son estos conceptos os animo a que echéis un ojo a los artículos de mi compañero Pablo González, y al libro de Pentesting con Powershell donde le saca mucho partido.

Figura 7: Pentesting con Powershell 2ª Edición
de Pablo González en 0xWord

Primero explicaremos cómo llevar a cabo un ataque de persistencia sencillo usando el registro de Windows y después, que ya tenemos una idea de esto, explicaremos o enumeraremos las claves críticas del registro de Windows y que se han de proteger. Existe una clave de registro, esta de aquí “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”, cuyos valores contienen información acerca de qué programas han de iniciarse cuando el usuario inicia sesión en Windows. 

De esta forma, se podría crear un valor en esta clave (recordar que un valor se parece a una variable) de tipo string con la ruta del archivo que se quiere ejecutar. Como una imagen vale más que mil palabras os dejamos una pequeña demo de cómo llevar a cabo esta técnica de persistencia para que cuando el usuario inicie sesión se ejecute el programa Notepad++.exe. En esta demo hemos usado PowerShell, pero vosotros podríais usar el Editor de Registro, por ejemplo.

Figura 8: Demo de Ataques de Registro

Es importante destacar que si se hubiese hecho persistencia en la colmena HKLM en lugar de la colmena HKCU ahora mismo se tendrían permisos máximos en el sistema. Como ya se mencionó anteriormente, cualquier programa ejecutado desde la colmena HKLM será ejecutado con máximos privilegios.

Claves de registro críticas

A continuación, os enumeramos algunas de las claves de registro más críticas y que han de protegerse.
  • Run Keys por defecto de Windows: en estas claves de registro se almacenan valores que normalmente contienen rutas de ficheros que serán ejecutados cuando se inicie Windows, el usuario inicie sesión, etc. Las claves que terminan en “Once” se ejecutan una sola vez y posteriormente son eliminadas.
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • Configuración de startup folders: como su propio nombre indica, son claves de registro que permiten configurar directorios que almacenan ficheros o programas que se ejecutarán al iniciar Windows o cuando el usuario inicie sesión.
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
  • Claves de registro para ejecutar servicios de forma automática.
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
  • Rutas de configuración de políticas para especificar programas de inicio.
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  • Otras ramas menos comunes que también pueden ser utilizadas para realizar persistencia.
    • HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
    • HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
En el siguiente artículo veremos cómo podemos detectar esta técnica de persistencia. Esperamos que este primero os haya gustado.

Saludos, 

Autores:

Alberto Rivera Martínez (@ariveram2111), Ingeniero Informático y desarrollador e investigador en el equipo de Aura-Prototypes de la unidad CDCO de Telefónica. Para cualquier duda, consulta o comentario puedes utilizar su buzón público.


Marcos Rivera Martínez (@marcos_98_rm), Ingeniero Informático e investigador de Inteligencia Artificial y Ciberseguridad en el equipo de Ideas Locas de la unidad CDCO de Telefónica.

No hay comentarios:

Publicar un comentario