El CVE-2016-7255 presentaba y detallaba la vulnerabilidad. El código
no es nuevo, ya que en C lo tenemos hace X meses, pero la prueba de concepto en Powershell
está modificada. Este CVE se utilizó para llevar a cabo un ataque dirigido. Google y
Microsoft confirmaron que el grupo APT28 utilizó una vulnerabilidad en Flash,
con CVE-2016-7855, junto con esta vulnerabilidad para llevar a cabo la penetración
y escalada de privilegios. La vulnerabilidad es explotada a través de la
llamada a win32k.sys y NtSetWindowLongPtr(). El detalle de la vulnerabilidad lo puedes
encontrar en este magnífico artículo.
Si revisamos los boletines de Microsoft nos encontramos con información detallada
de la vulnerabilidad y el impacto y criticidad que esta presenta. La
vulnerabilidad es crítica ya que afecta a los sistemas Microsoft desde Windows
Vista hasta Windows 10 y 2016 Server, es decir, en todos los sistemas
operativos modernos de Microsoft. ¿Qué debemos tener en cuenta para ver si
estamos protegidos? Fácil, podemos revisar las actualizaciones, sobretodo de
seguridad, instaladas en el equipo. Para ello podemos abrir el Panel de Control
ir a Programas -> Ver actualizaciones instaladas.
Si nos fijamos en la imagen, encontramos un paquete de actualizaciones de
seguridad, el cual está protegiendo el equipo de laboratorio de esta
vulnerabilidad. Para este ejemplo, quitamos dicha actualización, cosa no
recomendada. Hacemos que el equipo sea vulnerable. Hay que ver que dicha
actualización se instaló en marzo, por lo que durante meses este equipo virtual
de pruebas ha sido vulnerable.
El equipo es un Windows 10 con casi todas las actualizaciones instaladas,
digo casi todas, ya que acabo de quitar una. Lo primero que vamos a hacer es
probar el exploit escrito en Powershell que explota la vulnerabilidad del
sistema.
Estando en Windows 10 probamos el script de Powershell que implementa el
exploit contra Win32k.sys. Si hacemos la lectura con los mensajes que ocurrían
en el exploit escrito en C vemos que la cosa va bien. Obtenemos un ‘Duplicating SYSTEM token!’. A
continuación, probamos rápidamente qué usuario somos en el sistema y hemos
pasado de un usuario sin privilegios al usuario SYSTEM. La escalada de
privilegio se ha llevado a cabo.
El siguiente paso es probar esto en remoto, es decir, simular lo que hizo
el APT28. Una vez se obtiene acceso remoto a través, por ejemplo, de
Metasploit, vemos como ejecutar el exploit local a través de la sesión de
Metasploit.
En primer lugar, hay que tener en cuenta que el script de Powershell solo
se ejecuta en arquitecturas x64, ya que el exploit solo es eficaz para este
tipo de arquitecturas. Con Metasploit, si no tenemos una sesión x64 podemos
crearla a través del módulo exploit/windows/local/payload_inject.
Ahora sí, estamos seguros de poder lanzar el exploit de Powershell. Para
ello, cargamos en un Meterpreter el módulo de Powershell, el cual nos permite
interactuar de forma sencilla con la línea de comandos. Ahora cargaremos
directamente a memoria el código del script de Powershell, este podría ser
obtenido desde el propio Github de FuzzySecurity o desde un servidor web bajo
nuestro control. Como se puede en la imagen se descarga a memoria y se ejecuta
automáticamente, gracias a la instrucción IEX o Invoke-Expression.
En este instante, tenemos una Powershell De nuevo una forma a tener en cuenta en auditorías, tanto internas como
externas, ya que pueden ayudar a un atacante a obtener privilegio sobre los
cientos de equipos Microsoft que pueden estar desplegados en una organización.
Mantén a salvo tu entorno.
dónde ya no
somos un usuario sin privilegios, si no que somos System.