UAC Task Manager

Iniciado por kub0x, 16 Junio 2014, 15:48 PM

0 Miembros y 1 Visitante están viendo este tema.

kub0x

Muy buenas,

llevo mucho tiempo sumergiendome en el mundo de la escalación de privilegios. He publicado hace tiempo por el foro varias formas caseras de escalación de privilegios sin embargo hoy vengo a preguntar una cuestión en concreto.

Muchos habreis llegado a la conclusion de que para esquivar (bypass) UAC es necesario tocar el registro (HKLM), crear tareas que ejecuten nuestro software bajo SYSTEM o admin o bien tirar de ingeniería social (para que el user ejecute el software en modo admin.. propiedad asInvoker en los manifest).

Todos sabemos que el Administrador de tareas permite mostrar todos los procesos del sistema, por lo que necesita de los máximos privilegios del usuario en cuestión.

La pregunta es la siguiente: ¿Qué ocurre cuando pulsamos dicho botón?

Este proceso no alerta al usuario de que la aplicación necesita de privilegios. ¿Cómo lo hace?

Un saludo!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Karcrack

Esto es debido a la configuración por defecto de UAC en Windows 7 y que ya estás logueado en una sesión de administrador, en Windows Vista si que te saltaría la ventana.

Por defecto el taskmgr es capaz de auto-elevarse. La verdad es que no sé qué procesos tienen esa capacidad, he visto que otros programas como mmc.exe también pueden.

Lectura interesante:
http://www.rohitab.com/discuss/topic/38607-disable-uac-elevation-dialog-by-patching-rtlqueryelevationflags-in-windows-explorer/

x64core

Cita de: kub0x en 16 Junio 2014, 15:48 PM
Muy buenas,

llevo mucho tiempo sumergiendome en el mundo de la escalación de privilegios. He publicado hace tiempo por el foro varias formas caseras de escalación de privilegios sin embargo hoy vengo a preguntar una cuestión en concreto.

Muchos habreis llegado a la conclusion de que para esquivar (bypass) UAC es necesario tocar el registro (HKLM), crear tareas que ejecuten nuestro software bajo SYSTEM o admin o bien tirar de ingeniería social (para que el user ejecute el software en modo admin.. propiedad asInvoker en los manifest).

Todos sabemos que el Administrador de tareas permite mostrar todos los procesos del sistema, por lo que necesita de los máximos privilegios del usuario en cuestión.

La pregunta es la siguiente: ¿Qué ocurre cuando pulsamos dicho botón?

Este proceso no alerta al usuario de que la aplicación necesita de privilegios. ¿Cómo lo hace?

Un saludo!

Utiliza un objeto COM.
Fijate en este código:
http://sinowal.com/UAC.cpp
Una vez que ya sepas cómo funciona puedes reducir los requerimientos necesarios.

Karcrack

Aquí esta la lista de procesos que se pueden auto-elevar en Win7:
http://withinwindows.com/2009/02/05/list-of-windows-7-beta-build-7000-auto-elevated-binaries/
Si puedes inyectar código en alguno de esos procesos ya puedes hacer la llamada COM para copiar la DLL a la ruta protegida y haciendo DLL hijacking ejecutar tu código con privilegios elevados.

Aquí está todo el proceso detallado:
http://www.pretentiousname.com/misc/W7E_Source/win7_uac_poc_details.html

Ese cambio se hizo tras las quejas de lo molesto que era UAC en Windows Vista. Si cambias la configuración a protección máxima incluso los accesos de los procesos del listado harán saltar el prompt...

kub0x

#4
Muchas gracias a los dos por contestar y por aportar este material tan valioso, os lo agradezco.

Hace tiempo que llevo experimentando en VMs el como ganar privilegios de forma casera, es decir, utilizando las propias herramientas del OS. Encontré varias cosillas que me permitían lidiar con toda la seguridad el sistema, eran indirectas, dependían del usuario, pero al final lograba mi cometido (SYSTEM).

Esto sinceramente es la bomba, sin problemas el código se entiende de maravilla. Lo más apropiado seria DLL Hijacking alterando el árbol de búsqueda de dependencias o bien reemplazando la DLL, como comentas Karcrack, así nos aseguramos de que siempre se ejecuta nuestro código aunque existen varias contramedidas fáciles de implementar contra este tipo de situaciones.

Supongo que inyectarias código en un proceso que se auto eleve para sobreescribir la DLL de OTRO proceso  no iniciado en este instante (ya que las DLL del servicio actual estarían en uso). Y acto seguido iniciarias el servicio en el cual sustituiste la dependencia. ¿Qué tal lo ves?

Se me ocurre otra: ¿Podría reiniciar el proceso  y dormir sus subprocesos/hilos en el arranque? ¿De esa forma podrías sobreescribir la DLL?

Sólo falta decir que con schtask te elevas a SYSTEM teniendo privilegios de Admin, por lo que alguno se iria al kernel land  :-X

Gracias amigos por vuestra ayuda,

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate