El kernel al ser el núcleo de cualquier sistema operativo, y la capa entre el hardware y software. Una explotación de este, deriva en que todo es ejecutado por el usuario SYSTEM (el usuario con mayor privilegios de todos en sistemas Windows).

El proceso para encontrar vulnerabilidades de kernel y explotarlas es aproximadamente el siguiente:

  1. Enumeramos la versión y parches de Windows —> systeminfo
  2. Buscamos exploits asociados a esa versión o parches
  3. Compilamos y ejecutamos —> No hace falta compilar si nos descargamos ya un exploit compilado

Hay que tener cuidado con los exploits de kernel, ya que suelen ser inestables, de un solo uso o que cause un crasheo del sistema. Por eso esta debe ser una de las últimas opciones para escalar privilegios.

Hay distintas herramientas que nos pueden ayudar a identificar este tipo de vulnerabilidades:

Una vez enumerado que tipos de parches faltan o que vulnerabilidad afectan, podemos hacer uso de SecWiki, es un recurso que contiene una gran cantidad de exploits de kernel ya compilados.

Dicho esto, vamos con un caso práctico usando “Windows Exploit Suggester Next Generation”:

Lo primero de todo es obtener el systeminfo, esto incluye pasarlo a nuestra máquina Kali. Esta parte es sencilla, ya que lo podemos hacer en un solo paso. En nuestro Linux (en mi caso, kali) nos ejecutamos un servidor samba:

Servidor Samba en ejecución

El argumento pwned es el nombre del recurso compartido, y el segundo argumento $(pwd) es la forma en la que le indicamos la ruta donde se ejecutará el servidor, en este caso, la ruta actual (también podríamos indicarlo con solo un punto).

Teniendo el servidor montado, nos dirigimos al Windows y simplemente redirigimos la salida del comando a nuestro servidor y recurso compartido:

Redirigiendo systeminfo al recurso compartido

Podemos confirmar que ha habido conexión si nos dirigimos al kali:

Confirmación de conexión en Kali

De esta forma, ya tenemos la salida del systeminfo:

Salida del comando systeminfo parte 1

Salida del comando systeminfo parte 2

Teniendo esto, vamos a hacer uso del “WESNG”, lo primero es actualizar la base de datos de este. Es muy sencillo, simplemente lanzamos el siguiente comando:

Actualización de la base de datos de WESNG

Con esto, habrá actualizado el listado de CVEs.

El comando más básico de todos simplemente sería especificarle el archivo systeminfo:

Comando básico de WESNG

Su salida es demasiado grande como para mostrarlo

Salida extensa de WESNG

Pero no pasa nada, vamos a usar algunos argumentos para solo ver lo que nos interesa. La estructura que sigue WESNG para mostrar cada CVE al cual puede ser vulnerable la máquina Windows, es la siguiente:

Estructura de salida de WESNG

El campo que nos interesa es el Impact. Podemos ver los posibles valores de Impact usando grep y sort:

Valores posibles del campo Impact

De esta forma, si nos fijamos, hay un valor de este campo que puede que sea por el que nos interese filtrar. Estoy hablando de “Elevation of Privilege”, ya que es lo que queremos conseguir.

Sabiendo esto, podemos especificar a “WESNG” que solo nos muestre los CVE cuyo impacto sea una elevación de privilegios:

Filtrado por elevación de privilegios

De esta forma, acabamos de pasar de 31883 líneas a:

Número de líneas reducidas

Que siguen siendo muchas, pero ahora es trabajo nuestro encontrar el exploit a usar. Existe otro filtrado que quizás nos interese, ya que “WESNG” muestra algunos CVE sin “Exploits” (que OJO, no quiere decir que no haya, sino que al menos, no tiene ninguno asociado):

CVE sin exploits asociados

Si no nos interesa ver los CVEs los cuales no tengan ningún exploit asociado, podemos filtrar la búsqueda añadiendo el argumento --exploits-only:

Filtrado con exploits-only

Si vemos ahora el número de líneas, hemos bajado mucho más:

Número de líneas tras filtrado

Hasta aquí posibles filtrados que nos puede interesar a la hora de buscar CVEs en “WESNG”. Aun así, la herramienta tiene un panel de ayuda bastante completo y con muchas más opciones.

Llegados a este punto, ya dependerá de nosotros el exploit a escoger, con la experiencia habrá CVEs que nos suenen y vayamos al grano a probar esos según el sistema operativo. Esto ya se consigue con el tiempo y el esfuerzo.

En mi caso, voy a usar el “CVE-2019-1458”, que ojo, el Windows 7 es vulnerable, y podemos encontrar exploits, sin embargo, “WESNG” indica que no tiene ninguno asociado, por lo que si hubiésemos usado el argumento --exploits-only, lo hubiese descartado, a pesar de ser vulnerable:

CVE-2019-1458 sin exploits asociados en WESNG

Habiendo localizado el CVE, vamos a dirigirnos a SecWiki para ver si tiene el exploit compilado:

Repositorio SecWiki

Contenido del repositorio SecWiki

En este caso, SecWiki, no tiene ningún exploit en el repositorio. Sin embargo, en el README.md nos indica otro repositorio el cual si contiene un exploit para este CVE:

Repositorio alternativo con exploit

Es típico que en los repositorios de exploits de escalación de privilegios se nos haga un PoC (Proof of Concept) del exploit:

Proof of Concept del exploit

En este caso, vemos dos cosas:

  1. El exploit solo se puede ejecutar una vez por cada inicio del sistema (esto nos puede indicar la inestabilidad resultante del exploit en el sistema).
  2. El exploit sigue la estructura de:
    1. cve-2019-1458.exe <comando a ejecutar>

Sabiendo esto y teniendo descargado el binario del exploit en el Windows 7:

Binario del exploit descargado

Vamos a escalar privilegios.

Establecemos un servidor samba en nuestro kali, además de ponernos en escucha:

Servidor samba y listener en Kali

Nota: el directorio donde nos encontramos ejecutando el servidor samba, contiene el binario “nc.exe” (netcat para Windows)

Ahora, volvemos al Windows 7, y ejecutaremos el siguiente comando usando el exploit:

Ejecución del exploit en Windows

De esta forma, volviendo al kali:

Shell como SYSTEM obtenida

Conseguimos shell como “nt authority\system”.

En el repositorio se nos indicaba que solo era un exploit de un solo uso por cada inicio, podemos confirmarlo:

Confirmación de un solo uso

Es tal la inestabilidad de en este caso, este exploit (y en general, de los exploits que se aprovechan del kernel), que cuando apagamos la máquina nos sale lo siguiente:

Error al apagar el sistema

Esto no pasa claramente con todos los exploits, pero sí que podemos observar la delicadeza de lidiar con el kernel.

Retomando las herramientas mencionadas al principio:

Podemos usar la que más nos guste, Watson por ejemplo en este caso no nos da nada:

Watson sin resultados

El módulo de metasploit también nos ayuda en esta tarea:

Módulo de Metasploit para enumeración de parches

En este caso no nos da ningún output significativo. Si detectase alguna posible vulnerabilidad nos lo indicaría de la siguiente forma:

Detección de vulnerabilidades con Metasploit

Referencia: https://pentestlab.blog/2017/04/24/windows-kernel-exploits/

Por último, pero no menos importante, otra herramienta a tener en cuenta es el propio internet.

Cuando ejecutamos systeminfo obtenemos la suficiente información como para buscar en Google alguna vulnerabilidad que afecte al Sistema Operativo y a la Versión:

Búsqueda de vulnerabilidades en Google

De esta forma, aunque nos podamos ayudar de distintas herramientas, al final el trabajo manual y la propia investigación será lo que resulte en una escalada de privilegios exitosa.