Exploits del Kernel - Windows
Es un gran desafío garantizar que todos los escritorios y servidores de los usuarios estén actualizados, y es probable que el cumplimiento del 100 % de todos los equipos con parches de seguridad no sea un objetivo alcanzable. Suponiendo que un equipo haya sido el objetivo de la instalación de actualizaciones, por ejemplo, mediante SCCM (Microsoft System Center Configuration Manager) o WSUS (Windows Server Update Services), aún existen muchas razones por las que podrían no instalarse. A lo largo de los años, ha habido muchos exploits del kernel que afectan al sistema operativo Windows desde Windows 2000/XP hasta Windows 10/Server 2016/2019. A continuación, se puede encontrar una tabla detallada de exploits conocidos de ejecución remota de código/escalada de privilegios locales para sistemas operativos Windows, desglosados por nivel de paquete de servicio, desde Windows XP en adelante hasta Server 2016.
Sistema operativo base
XP
2003
Vista
2008
7
2008R2
8
8.1
2012
2012R2
10
2016
Service Pack
SP0
SP1
SP2
SP3
SP0
SP1
SP2
SP0
SP1
SP2
SP0
SP2
SP0
SP1
SP0
SP1
MS03-026
•
•
•
•
•
•
•
MS05-039
•
•
•
•
•
MS08-025
•
•
•
•
•
•
•
•
•
MS08-067
•
•
•
•
•
•
•
•
•
•
MS08-068
•
•
•
•
•
•
•
•
•
•
MS09-012
•
•
•
•
•
•
•
•
•
•
MS09-050
•
•
•
•
•
MS10-015
•
•
•
•
•
•
•
•
MS10-059
•
•
•
•
•
•
•
MS10-092
•
•
•
•
•
•
•
MS11-011
•
•
•
•
•
•
•
•
•
•
•
MS11-046
•
•
•
•
•
•
•
•
•
•
•
•
•
MS11-062
•
•
•
•
MS11-080
•
•
•
•
MS13-005
•
•
•
•
•
•
•
•
•
•
•
MS13-053
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS13-081
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS14-002
•
•
•
•
MS14-040
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS14-058
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS14-062
•
•
•
MS14-068
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS14-070
•
•
•
MS15-001
•
•
•
•
•
•
•
•
MS15-010
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS15-051
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS15-061
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS15-076
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS15-078
•
•
•
•
•
•
•
•
•
•
•
•
•
MS15-097
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS16-016
•
•
•
•
•
•
•
•
•
MS16-032
•
•
•
•
•
•
•
•
•
•
•
•
MS16-135
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MS17-010
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
CVE-2017-0213: COM Aggregate Marshaler
•
•
•
•
•
•
•
•
•
•
Hot Potato
•
•
•
•
•
•
•
•
•
Smashed Potato
•
•
•
•
•
•
•
•
•
Como podemos ver en esta tabla, hay muchos exploits que funcionan desde Windows XP hasta Server 2012R2. A medida que llegamos a Windows 10 y Server 2016, hay menos exploits conocidos. Esto se debe en parte a los cambios en el sistema operativo a lo largo del tiempo, incluidas las mejoras de seguridad y la descontinuación de versiones anteriores de protocolos como SMB. Una cosa importante que se debe tener en cuenta en esta tabla es que cuando se descubren nuevas vulnerabilidades o se lanzan exploits (como MS17-010), estos suelen filtrarse y afectar a versiones anteriores del sistema operativo. Por eso es vital estar al tanto de la aplicación de parches o actualizaciones, el retiro o la segregación de los sistemas Windows que han llegado al final de su vida útil. Analizaremos esto con más profundidad más adelante en este módulo.
Es importante tener en cuenta que, si bien algunos de los ejemplos anteriores are
son vulnerabilidades de ejecución remota de código, podemos utilizarlos con la misma facilidad para escalar privilegios. Un ejemplo es si obtenemos acceso a un sistema y notamos que un puerto como el 445 (servicio SMB) no es accesible desde el exterior, es posible que podamos escalar privilegios si es vulnerable a algo como EternalBlue (MS17-010). En este caso, podríamos reenviar el puerto en cuestión para que sea accesible desde nuestro host de ataque o ejecutar el exploit en cuestión localmente para escalar privilegios.
Vulnerabilidades notables
A lo largo de los años, han surgido muchas vulnerabilidades de Windows de alto impacto que pueden aprovecharse para escalar privilegios. Algunas son vectores de escalada de privilegios puramente locales y otras son fallas de ejecución de código remoto (RCE) que pueden usarse para escalar privilegios mediante el reenvío de un puerto local. Un ejemplo de esto último sería aterrizar en un equipo que no permite el acceso al puerto 445 desde el exterior, realizar un reenvío de puerto para acceder a este puerto desde nuestro equipo de ataque y aprovechar una falla de ejecución de código remoto contra el servicio SMB para escalar privilegios. A continuación, se presentan algunas vulnerabilidades de Windows de impacto extremadamente alto a lo largo de los años que pueden aprovecharse para escalar privilegios.
El verano de 2021 reveló un tesoro de nuevas fallas de ejecución remota de código y escalada de privilegios locales relacionadas con Windows y Active Directory para el deleite de los pentesters (y atacantes del mundo real), y estoy seguro de que también de las quejas de nuestros colegas en el lado de la defensa.
Hive Nightmare (a.k.a SeriousSam)
Comprobación de permisos en el archivo SAM
Podemos comprobar esta vulnerabilidad comprobando con icacls
los permisos del archivo SAM. En nuestro caso, tenemos una versión vulnerable, ya que el BUILTIN\Users
grupo puede leer el archivo.
Para que la vulnerabilidad se aproveche con éxito, también es necesaria la presencia de una o más copias de seguridad. La mayoría de los sistemas Windows 10 tendrán habilitada de forma predeterminada la creación de copias de seguridad periódicas, incluida la copia de seguridad necesaria para aprovechar esta falla.
Realizar ataque y analizar hashes de contraseñas
Estas copias pueden luego transferirse nuevamente al host de ataque, donde utilizaremos impacket-secretsdump
para extraer los hashes. Podemos ver el proceso completo de envío en la sección:
Print Nightmare
Comprobando el servicio de spooler
Podemos comprobar rápidamente si el servicio Spooler se está ejecutando con el siguiente comando. Si no se está ejecutando, recibiremos un error de "ruta no existe".
Agregar un administrador local con la PoC de PowerShell PrintNightmare
Ahora podemos importar el script de PowerShell y usarlo para agregar un nuevo usuario administrador local.
Confirmación de nuevo usuario administrador
Si todo salió como estaba previsto, tendremos un nuevo usuario administrador local bajo nuestro control. Agregar un usuario es "ruidoso". No queremos hacerlo en una interacción en la que el sigilo es una consideración. Además, queremos consultar con nuestro cliente para asegurarnos de que la creación de la cuenta esté dentro del alcance de la evaluación.
Esta es una pequeña muestra de algunas de las vulnerabilidades de mayor impacto. Si bien es fundamental que comprendamos y podamos enumerar y explotar estas vulnerabilidades, también es importante poder detectar y aprovechar fallas menos conocidas.
Enumeración de parches faltantes
El primer paso es mirar las actualizaciones instaladas e intentar encontrar actualizaciones que puedan haberse pasado por alto, abriendo así un camino de ataque para nosotros.
Examinar las actualizaciones instaladas
Podemos examinar las actualizaciones instaladas de varias maneras. A continuación, se muestran tres comandos independientes que podemos utilizar.
Ver actualizaciones instaladas con WMI
Ejemplo de CVE-2020-0668
Comprobar los privilegios de usuario actuales
Verifiquemos los privilegios de nuestro usuario actual.
Después de construir la solución
También podemos buscar cualquier software de terceros que se pueda aprovechar, como el Servicio de mantenimiento de Mozilla. Este servicio se ejecuta en el contexto de SYSTEM y lo pueden iniciar usuarios sin privilegios. El binario (no protegido por el sistema) para este servicio se encuentra a continuación.
C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
Compror permisos en binarios
icacls
confirma que solo tenemos permisos de lectura y ejecución en este binario según la línea BUILTIN\Users:(I)(RX)
en la salida del comando.
Generar binario malicioso
Generemos un binario malicioso maintenanceservice.exe
que pueda usarse para obtener una conexión de reverse shell de Meterpreter desde nuestro objetivo.
Alojamiento del binario malicioso
Descarga del binario malicioso
Para este paso, necesitamos hacer dos copias del archivo .exe malicioso. Podemos simplemente extraerlo dos veces o hacerlo una vez y hacer una segunda copia.
Necesitamos hacer esto porque ejecutar el exploit corrompe la versión maliciosa de maintenanceservice.exe
que se mueve a (nuestra copia en c:\Users\htb-student\Desktop
a la que apuntamos) c:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
, del cual tendremos que dar cuenta más adelante. Si intentamos utilizar la versión copiada, recibiremos un error de sistema 216 porque el archivo .exe ya no es un binario válido.
Ejecutando el exploit
A continuación, ejecutemos el exploit. Acepta dos argumentos: los archivos de origen y destino.
Comprobación de permisos de un nuevo archivo
El exploit se ejecuta y, icacls
al volver a ejecutarse, muestra la siguiente entrada para nuestro usuario: WINLPE-WS02\htb-student:(F)
. Esto significa que nuestro usuario htb-student tiene control total sobre el binario Maintenanceservice.exe
y podemos sobrescribirlo con una versión no dañada de nuestro binario malicioso.
Reemplazo de archivo con binario malicioso
Podemos sobrescribir el maintenanceservice.exe
binario c:\Program Files (x86)\Mozilla Maintenance Service
con una copia funcional del binario malicioso creado anteriormente antes de proceder a iniciar el servicio. En este ejemplo, descargamos dos copias del binario malicioso en y C:\Users\htb-student\Desktop
. Movamos la copia funcional que no fue dañada por el exploit al directorio Archivos de programa, asegurándonos de cambiar el nombre del archivo correctamente y eliminar el o el servicio no se iniciará. El comando solo funcionará desde una ventana cmd.exe, no desde una consola de PowerShell:
Abrir listener Multi Handler con metasploit
Ejecutar Metasploit con Resource Script
Inicie Metasploit usando el archivo de script de recursos para precargar nuestra configuración.
Iniciando el servicio
Inicie el servicio y deberíamos obtener una sesión como NT AUTHORITY\SYSTEM
.
Recibir una sesión de Meterpreter
Recibiremos un error al intentar iniciar el servicio, pero aún recibiremos una devolución de llamada una vez que se ejecute el binario de Meterpreter.
Caso práctico
Pruebe alguno de los ejemplos de esta sección para escalar privilegios a
NT AUTHORITY\SYSTEM
en el host de destino. Envíe el contenido de la flag en el escritorio del administrador.
Hive Nightmare
Vamos a explotar la vulnerabilidad Hive Nightmare contra el objetivo.
Comprobación de permisos en el archivo SAM
No tenemos Powershell como admin, por lo que usaremos el usuario por defecto.
Ataque para extraer hashes
Vemos que se extraen los hashes de los usuarios correctamente incluso sin tener privilegios en el sistema, y los archivos se guardan en C:\windows\temp\. Como no tenemos acceso al directorio (por no tener permisos de admin) tendremos que conformarnos con los hashes que hemos extraído.
Pass the Hash para conectarnos como administrator
Al intentar el Pass the Hash nos da el error típico de seguridad:
Para evadirlo vamos a conectarnos de nuevo con el usuario htb-student
. Al intentar ejecutar la regla para evadir el Pass the Hash tampoco nos deja por no tener privilegios:
En este punto solamente podríamos probar a crackear hashes para ver si podemos obtener la contraseña en plano de algún usuario más privilegiado, o usar otra técnica. Después de probar a crackear los hashes no obtenemos resultados, por lo que vamos a probar con PrintNightmare.
Print Nightmare
Comprobar servicio de Spooler
Omitir política de ejecución en el host
Añadir nuevo administrador local
Confirmación de usuario local
Bingo! Somos admin en el equipo. Abrimos una Powershell como administrador:
Acceso a la flag
Última actualización
¿Te fue útil?