Upload
ramon-moreno-malave
View
13
Download
0
Embed Size (px)
Citation preview
Escalación de privilegios en Windows XP
Recientemente estuve tratando de escalar privilegios en una máquina local con
Windows XP y, como es de esperarse, encontré una variedad de exploits en Internet.
Voy a explicarles los más sencillos y efectivos dividiendo la tarea en dos partes: escalar
privilegios desde una cuenta de usuario restringida hasta Administrator; y escalar
privilegios desde Administrator hasta SYSTEM, lo que nos dará el control total del
sistema.
Primera parte: "from pepe to Administrator"
Primero veamos como lograr privilegios de Administrator partiendo de una cuenta de
usuario con privilegios restringidos. Para lograr esta escalada hay dos técnicas básicas,
la primera consiste en sobreescribir el ejecutable C:\WINDOWS\SYSTEM32\sethc.exe
(lo que requiere permisos de escritura en el directorio C:\WINDOWS\SYSTEM32) y la
segunda consiste en explotar una vulnerabilidad en el procedimiento de ejecución de
aplicaciones de Windows (la cual requiere permisos de escritura en el directorio C:\).
Veamos cómo funciona la primer técnica: Por defecto, Windows XP instala el software
de ayuda y accesibilidad que se activa pulsando la tecla SHIFT 5 veces seguidas. Al
hacer esto, aparece un cuadro de diálogo que permite configurar la aplicación sethc.exe
ubicada en C:\WINDOWS\SYSTEM32.
El ataque consiste en sustituir sethc.exe por cmd.exe (esto se puede hacer con un disco
de arranque ntfsdos o con un live cd de alguna distribución de Linux si no se puede
escribir en el directorio C:\WINDOWS\SYSTEM), de esta forma cuando pulsemos la
tecla SHIFT 5 veces seguidas se ejecutará un intérprete de comandos. Hasta este punto
no es algo muy grave, pero la vulnerabilidad aparece cuando pulsamos SHIFT 5 veces
antes de iniciar sesión ya que el interprete de comandos que se ejecuta lo hace bajo
privilegios Administrator.
A continuación, cualquier comando que ejecutemos será como usuario Administrator.
Lo ideal es crear una nueva cuenta Administaror, lo cual se hace de dos formas:
• Ejecutando los comandos:
net user nuevoadmin 1234password /add
net localgroup administrators nuevoadmin /add
De esta forma creamos el usuario "nuevoadmin" con privilegios de
administrador y contraseña "1234password"
• Ejecutando "Computer Management"
compmgmt.msc
Esta aplicación permite agregar usuarios mediante una interfaz gráfica.
Ahora veamos la segunda técnica: Esta técnica consiste en explotar una vulnerabilidad
en el procedimiento de ejecución de aplicaciones de Windows. Cuando lanzamos una
aplicación, si la ruta al ejecutable no contiene espacios, como por ejemplo: C:\WINDOWS\system32\cmd.exe
Windows localiza el archivo cmd.exe e inicia su ejecución. Si en cambio la ruta al
ejecutable contiene espacios debemos utilizar comillas dobles, como por ejemplo: "C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe"
para que Windows localice correctamente el archivo ejecutable. En la (vieja) notación
8.3 es posible evitar el uso de comillas mediante:
C:\Progra~1\McAfee\VirusS~1\Mcshield.exe
Pero qué sucede si olvidamos las comillas y ejecutamos: C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe
Puede parecer igual a lo anterior pero en realidad sucede lo siguiente:
• Windows intenta localizar y ejecutar el archivo C:\Program.exe
• Si ese archivo no existe, Windows intenta localizar y ejecutar el archivo
C:\Program Files\McAfee\VirusScan.exe
• Si ese archivo no existe, Windows finalmente intenta localizar y ejecutar el
archivo originalmente deseado C:\Program Files\McAfee\VirusScan
Enterprise\Mcshield.exe
Esto nos abre una puerta para lograr el acceso al sistema con mayores privilegios. Por
qué? La mayoría de los servicios en Windows se ejecutan como SYSTEM y algunos se
encuentran bajo el directorio "C:\Program Files". Entonces veamos la siguiente
situación: supongamos que Mcshield.exe es un servicio que se inicia automáticamente
con Windows y se ejecuta en el contexto de LocalSystem. La ruta al ejecutable es la
mencionada anteriormente, pero sin comillas. Cuando Windows inicia, trata de ejecutar
el servicio Mcshield automáticamente como LocalSystem, pero debido a que no hay
comillas en la ruta al archivo Mcshield.exe tratará de iniciar (siempre como
LocalSystem) primero lo siguiente:
• C:\Program.exe
• C:\Program Files\McAfee\VirusScan.exe
Por lo tanto es posible crear nuestro propio "servicio" Program.exe o VirusScan.exe y
situarlo en la ubicación donde Windows accidentalmente tratará de ejecutarlo. El
servicio puede ser algo básico como agregar un nuevo usuario administrador, como
expliqué anteriormente.
Tal vez se pregunten: ¿puede ser que algún servicio tenga la ruta al ejecutable sin
comillas? La respuesta es sí, yo lo probé y quedé sorprendido por la cantidad de veces
que se ejecutó el "servicio" Program.exe al iniciar Windows. Solamente hay que
encontrar uno que se ejecute con privilegios >= Administrator, o plantar el archivo
Program.exe y esperar que un administrador inicie sesión en el equipo. En Windows XP
es posible listar los servicios que se ejecutan automáticamente al iniciar el sistema desde
Start > Settings > Control Panel > Administrative Tools > Services.
Una posible limitación es encontrarse sin permiso de escritura en el directorio "C:\" o
"C:\Program Files\McAfee\" pero siempre podemos plantar el "servicio" utilizando un
disco de arranque ntfsdos o un live cd. La última barrera sería no poder bootear el
sistema desde unidades de disco o usb, en este caso podemos intentar resetear la BIOS
quitando la pila.
Si tenemos acceso físico, el sistema está comprometido.
Segunda parte: "from Administrator to SYSTEM"
Bajo circunstancias normales, un usuario no puede ejecutar código como SYSTEM,
sólo el sistema operativo tiene esta habilidad, pero utilizando el intérprete de comandos
se puede abusar del comando ‘at’ para que Windows ejecute nuestro escritorio con
privilegios SYSTEM. El comando ‘at’ despacha comandos y programas para ejecutarse
en una fecha y tiempo específico. Este comando se puede utilizar sólo cuando el
servicio “Task Scheduler” se está ejecutando y el usuario que lo ejecuta es miembro del
grupo “local Administrators”.
Supongamos que una política de Windows nos impide modificar la configuración del
proxy en Internet Explorer, a pesar de tener privilegios de administrador local. En la
siguiente captura se observa la ventana de configuración de red de Internet Explorer (se
accede desde “Tools > Internet Options… > Connections > LAN Settings…”).
Para comenzar, abrimos cms.exe y ejecutamos el comando ‘at’. Se observa que el
comando está habilitado (de lo contrario retorna “Access is denied.”) lo que nos permite
agregar una nueva tarea programada, como se observa en la siguiente captura:
Cuando el reloj alcanza las 8:27 se ejecuta la tarea “cmd.exe”, la diferencia es que esta
tarea se ejecuta con privilegios SYSTEM ya que es iniciada por el servicio “Task
Scheduler” que corre bajo la cuenta Local System. En la siguiente captura se observa el
intérprete de comandos iniciado automáticamente, la barra de título indica ‘svchost.exe’
(Service Host) en lugar de ‘cmd.exe’. A partir de esta consola podemos ejecutar
cualquier aplicación con privilegios SYSTEM:
Si abrimos Internet Explorer desde esta consola tenemos acceso a todas las opciones
bloqueadas anteriormente. Esto nos permite, por ejemplo, modificar la configuración
del servidor Proxy (estas opciones estaban grisadas en la primer captura):
Si deseamos un entorno de escritorio ejecutado bajo privilegios SYSTEM, primero
debemos terminar el proceso “explorer.exe” para cerrar el entorno de escritorio actual:
Una vez que terminamos el proceso “explorer.exe” desaparece el escritorio y todas las
ventanas abiertas, excepto la consola con privilegios SYSTEM. A continuación
ejecutamos “explorer.exe” desde esta consola, lo que inicia un nuevo entorno de
escritorio. Aunque el nombre de usuario corresponde con el nombre del sistema, lo que
indica que el entorno de escritorio está ejecutando bajo privilegios SYSTEM. A partir
que aquí, todas las aplicaciones que ejecutemos desde el escritorio se ejecutaran bajo
privilegios SYSTEM. Es posible resetear la contraseña del administrador local, matar
procesos pertenecientes a SYSTEM y acceder a todos los componentes bloqueados del
sistema.
Para evitar este ataque, se debe deshabilitar el servicio “Task Scheduler” siempre que no
sea necesario. Pero si es necesario, se debe deshabilitar el comando ‘at’ y utilizar el
comando ‘schtasks’ (la documentación de este comando se encuentra en
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-
us/schtasks.mspx).
Conclusión
Explotando estas vulnerabilidades, logramos acceso con privilegios SYSTEM a partir
de una cuenta limitada "pepe". Espero que les haya gustado.
NOTA: La información presentada en este artículo fue para fines didácticos y no debía
utilizarse para abusar de sistemas Windows ;)