Fundamentos de PsExec
¿Qué sucede cuando se utiliza PsExec?
PsExec es una herramienta desarrollada originalmente por Sysinternals (ahora parte de Microsoft), que permite ejecutar comandos en sistemas remotos sin necesidad de una sesión interactiva o acceso físico al sistema. Es ampliamente utilizada por administradores de sistemas, pero también por atacantes debido a su capacidad para ejecutar comandos de forma remota con privilegios elevados.
A diferencia de herramientas como Impacket, PsExec realiza una serie de operaciones específicas que involucran la creación de servicios temporales en el sistema remoto y el uso de binarios. A continuación, te explico en detalle cómo funciona PsExec y cómo los atacantes lo utilizan:
1. Autenticación y Conexión
El primer paso para utilizar PsExec es la autenticación. PsExec utiliza las credenciales proporcionadas (usuario y contraseña) para autenticarse en la máquina remota a través del protocolo SMB.
Al autenticarse, PsExec establece una conexión de red a través del puerto 445 (SMB) y utiliza esta conexión para comunicarse con el sistema remoto. El atacante o administrador puede proporcionar credenciales explícitas o usar las credenciales del sistema local si tiene permisos suficientes.
2. Creación de un Servicio Temporal
Una vez autenticado, el paso más importante en el funcionamiento de PsExec es que crea un servicio temporal en el sistema remoto. Este servicio es responsable de ejecutar el comando deseado.
Este es un comportamiento clave que distingue a PsExec de otras herramientas como Impacket:
PsExec copia un archivo binario (el ejecutable PsExecsvc) al sistema remoto. Este archivo se coloca típicamente en la carpeta
Windows\System32
oWindows\Temp
.Luego, PsExec inicia este binario como un servicio temporal, que se ejecuta con los permisos del sistema local (si el atacante tiene privilegios elevados).
Este servicio es lo que permite la ejecución remota de comandos en la máquina objetivo.
3. Ejecución del Comando Remoto
Una vez que el servicio está activo en el sistema remoto, el comando que el atacante desea ejecutar se pasa como argumento al servicio PsExecsvc.
Este servicio interpreta el comando y lo ejecuta en el contexto del sistema, ya que está corriendo con permisos elevados. El resultado de este comando (la salida estándar) se envía de vuelta al sistema atacante a través de la conexión SMB establecida previamente.
El comando que se ejecuta puede ser cualquier cosa, desde un simple ipconfig
o whoami
, hasta scripts más complejos, instalación de software, o incluso la creación de usuarios administrativos.
4. Desinstalación del Servicio Temporal
Después de ejecutar el comando, PsExec elimina el servicio temporal que había creado, junto con el archivo binario PsExecsvc
. En un entorno típico, este proceso deja muy pocas huellas, pero hay registros temporales que se pueden encontrar si el sistema está bien monitoreado.
Si bien PsExec intenta eliminar todos los rastros, en algunas situaciones, especialmente si el sistema se reinicia antes de que el servicio sea eliminado, puede quedar algún rastro del servicio en los registros del sistema.
5. Persistencia del Servicio
Aunque PsExec no está diseñado para crear servicios persistentes, en un ataque malicioso, un atacante podría modificar PsExec para crear un servicio que no se elimine automáticamente, proporcionando acceso permanente al sistema. Esto no es el comportamiento predeterminado de PsExec, pero puede ser un vector de ataque personalizado.
6. Interacción de PsExec con SMB
PsExec utiliza el protocolo SMB como canal de transporte para copiar el binario y ejecutar el servicio remoto. Esta es la razón por la que PsExec depende del puerto 445, y cualquier firewall que bloquee SMB puede evitar su funcionamiento. Al usar SMB, PsExec establece una sesión autenticada con el sistema remoto y transfiere archivos a través de la misma.
7. Relación con las Reverse Shells
Por defecto, PsExec no proporciona una reverse shell directamente. Sin embargo, un atacante puede usar PsExec para ejecutar un comando que abra una shell inversa. Por ejemplo, puede ejecutar un script de PowerShell o un comando de Netcat (nc
) que abra una conexión inversa hacia el sistema del atacante. En este caso, PsExec sirve solo como el canal para ejecutar ese comando inicial que establece la reverse shell.
8. Impacto en la Seguridad
El uso de PsExec tiene un impacto considerable en la seguridad porque:
Deja Huellas: A diferencia de Impacket, PsExec sí deja algunos rastros, como la creación del servicio temporal, y potencialmente, la transferencia del binario
PsExecsvc
.SMB y Registros: Las conexiones SMB y la creación del servicio pueden ser detectadas por sistemas de monitoreo de red y EDRs (Endpoint Detection and Response) que buscan actividades inusuales.
Acceso a Credenciales: Si PsExec se utiliza con privilegios de administrador, y se ejecutan comandos sensibles o se manipulan cuentas, hay un alto riesgo de que los atacantes obtengan control total sobre el sistema remoto.
Llamadas de Python o Interacciones de PsExec
PsExec no está basado en Python como Impacket. Es un binario independiente que se ejecuta en sistemas Windows. Sin embargo, es posible automatizar el uso de PsExec desde scripts de Python u otros lenguajes, utilizando llamadas al sistema para invocar PsExec y controlar su comportamiento.
Resumen del Funcionamiento de PsExec:
Autenticación: Se autentica usando SMB en el puerto 445 con credenciales válidas.
Creación de Servicio: Crea un servicio temporal (
PsExecsvc
) en la máquina remota.Ejecución del Comando: El servicio ejecuta el comando proporcionado con permisos elevados.
Eliminación del Servicio: PsExec elimina el servicio y el binario una vez que se ejecuta el comando.
Rastros: Aunque intenta eliminar huellas, PsExec puede dejar rastros en los registros del sistema y logs de SMB.
Comparación con Impacket:
Creación de Servicios: A diferencia de Impacket, PsExec crea un servicio temporal en el sistema remoto, lo que puede ser un vector detectable.
Binarios: PsExec transfiere un binario al sistema remoto, lo que es otro factor de riesgo de detección.
Shells Inversas: Aunque PsExec no está diseñado para proporcionar una reverse shell por defecto, puede utilizarse para ejecutar comandos que la establezcan.
PsExec es una herramienta poderosa y versátil, pero su funcionamiento conlleva más riesgos de detección en comparación con técnicas como Impacket, que no crean servicios o transfieren binarios. Sin embargo, sigue siendo una herramienta esencial en la administración de redes y en ataques dirigidos cuando se utilizan con las precauciones adecuadas.
Last updated