10 mayo, 2014

Herramienta de pentesting para escalar Privilegios en Windows: PowerUP



Buenas a tod@s antes de nada quería agradecerle a @n0ipr0cs la gran oportunidad que me ha brindado de poder escribir en este gran blog como es Estación-Informatica y permitirme entrar en este gran "mundillo" de la (in)Seguridad Informática.

Bien una vez dicho esto, hoy vengo a presentaros una herramienta de pentesting llamada PowerUp bajo licencia GNU, herramienta de PowerShell para ayudar con la elevación local de privilegios en los sistemas Windows. Dicha herramienta nos permite encontrar métodos y servicios vulnerables y poder abusar de estos,  así como "secuestro" de DLL, configuraciones de registro vulnerables y sobre todo y más importante las posibilades de escalabilidad de privilegios dentro del sistema, la herramienta ha sido desarrollada por @harmj0y , el código de la herramienta esta aquí.

Bien vamos a explicar los distintos métodos de los cuales se compone esta herramienta:
Para probar la herramienta necesitamos el código, el cual se encuentra aquí:


Lo primero que necesitaremos hacer es copiar todo el código en nuestro PowerShell, de la siguiente manera:  

  1. Para los que no sepan como lanzar PowerShell o Instalarlo etc, aqui hay un manual de cómo utilizarlo, solo necesitareis leer de la pg 12 a la 13 para poder seguir esto, aunque os recomiendo que saquéis tiempo para leerlo entero ;-)  
  2. Bien una vez llegados a este punto en el que tengáis el PowerShell lanzado , solo tendremos que copiar todo el código en la consola de PowerShell  tal que así:  
  3. Una vez introducido todo el código de la herramienta podemos empezar a ver los distintos métodos en los que se compone: 


Service Enumeration:

  • Get-ServiceUnquoted: está función encuentra todos los servicios no cotizados, que también tienen un espacio (es decir, el modulo trusted_service_path.rb MSF). Si tienen algun servicio que hace referencia a algo como C:\Herramientas\Herramientas Personalizadas\estacioninformatica.exe, y tiene acceso de escritura al directorio base C:\Herramientas\, dejando caer un ejecutable a C:\Herramientas\herramientas.exe lo podrás ejecutar en ese programa, en vez del servicio original. Esto es debido a la ambigüedad de algunas funciones de la API de windows a las que hace referencia.
  • Get-ServiceEXEPerms: esta función busca todos los servicios en los que el usuario actual tiene permisos de escritura. Si se sustituye uno de estos ejecutables nos permitira secuestrar un servicio actual
  • Get-ServicePerms: esta función enumera todos los servicios disponibles para abrir el servicio
     para su modificación. Podremos cambiar la ruta binaria como por ejemplo
     "net user password backdoor/add" y posteriormente reiniciar el servicio.
     

    Service Abuse:

  • Invoke-ServiceUserAdd: esta función detiene un servicio, lo modifica, lo inicia, lo detiene y a continuación restaura la ruta original exe, es decir, permite abusar de todo lo que se encuentra en "Get-ServicePerms". Podremos detener un servicio, modificarlo para crear un usuario y añadirlo al grupo de administradores locales y reiniciamos el servicio, y se restaura la ruta binaria del servicio original
  • Write-UserAddServiceBinary: esta función toma un precompilado C# ejecutable, servicio y parches binarios con el nombre del servicio, nombre de usuario, contraseña, nombre del grupo para agregar, a continuación,  el binario a la ubicación especificada, es decir, nos permite secuestrar servicios de "Get-ServiceUnquoted", necesitaremos un servicio de C# precompilado y los parches binarios con el nombre del servicio, le metemos el usuario/contraseña y grupo y cuando se ejecute, el binario creara el usuario con los parámetros establecidos.
  • Write-ServiceEXE: esta función invoca "WtireServicePSBinary" reemplaza el binario para el servicio "VulnSVC" por uno que añade un usuario local con contraseña y el grupo administrador, es decir, se puede utilizar para abusar de binarios vulnerables que se encuentren en "GET-ServiceEXEPerms". Respaldaremos el exe para un servicio establecido, después utilizaremos "Write-UserAddServiceBinary" para reemplazar el ejecutable con uno que crea y agrega un administrador local.
  • Restore-ServiceEXE: esta función restaura la copia de seguridad original del archivo por la ruta del servicio manipulado, la cual devolverá true si se realizo correctamente o false en caso contrario. Con Restore-ServiceEXE podremos restaurr el ejecutable original

DLL Hijacking:

  • Invoke-FindDLLHijack: esta función comprueba todos los módulos cargados para cada proceso, y devuelve lugares donde no existe un modulo cargado en la ruta de la base ejecutable, es decir, busca servicios con posibles oportunidades de secuestro dll, si una carpeta de la norma %PATH% tiene permisos de escritura por el usuario actual pe: \Python27, podremos colocar un archivo DLL malicioso en determinados lugares para escalar privilegios.

  • Invoke-FindPathDLLHijack:  esta función comprueba si el PATH actual contiene cualquier directorio con permisos del usuario actual. Si existe, se puede escribir, entonces comprueba la versión de Windows y envía un servicio hijackable para la versión de windows correspondiente.

Registry Checks:

  • Get-RegAlwaysInstallElevated: esta función comprueba si la clave del registro  " AlwaysInstallElevated" está habilitada, es decir,  verificara el registro de windows para la clave AlwaysInstallElevated, si se encuentra habilitada, los instaladores MSI siempre se ejecutaran con privilegios elevados. hay un modulo de Metasploit llamado:  " always_install_elevated.rb" que explota este mismo comportamiento, "Write-UserAddMSI" que escribirá un archivo instalador MSI que cuando se ejecuta, pide una cuenta de usuario para añadir al grupo de administradores locales.
  • Get-RegAutoLogon: esta función comprueba las credenciales de sesión automática en el registro "DefaultUserName/DefaultPassword", es decir, comprobara si se ajusta la clave del registro "AutoAdminLogon", y procederá a sacar las credenciales en texto plano.

Misc. Checks:

  • Get-UnattendedInstallFiles: esta función comprueba ubicaciones de instalaciones desatendidas para obtener un archivo con credenciales de despliegue, es decir, comprobara la existencia de varios archivos desatendidos sobrantes, que suelen tener las credenciales administrativas en texto plano.

Helpers:

  • Invoke-AllChecks: esta función ejecuta todas las funciones que comprueban todas las opciones de escalar privilegios del sistema, es decir, chequeara todo y nos mostrara un informe con las opciones de escalar disponibles.
  • Write-UserAddMSI: esta función escribe un instalador MSI precompilado que solicita usuario/grupo. Esta función se puede utilizar para abusar Get-RegAlwaysInstallElevated.
  • Invoke-ServiceStart: esta función inicia un servicio especificado, permitiendo marcarlo como deshabilitado.
  • Invoke-ServiceStop: esta función para un servicio especificado, el cual nos devolverá verdadero si la función tuvo éxito o falso en caso contrario.
  • Invoke-ServiceEnable: invoca un servicio y lo habilita.
  • Invoke-ServiceDisable: esta función deshabilita/desactiva  un servicio especificado 
  •  Get-ServiceDetails: obtiene información detallada acerca de un servicio


Como podéis observar nos brinda grandes oportunidades y si le damos juego con la herramienta Pyinstaller podremos hacer grandes cosas, bien esta primera entrada es una introducción para poder centrarnos posteriormente detalladamente en cada funcionalidad de dicha herramienta con casos prácticos. Espero que os guste la herramienta y  trasteéis con ella. 
 

Aquí os dejo un libro y un artículo interesantes:

Bien antes de acabar volver a agradecer a @n0ipr0cs esta oportunidad muchas gracias ;-)

Un saludo desde el CPD (^_-)

1 comentarios: