La compañía Israelí Pentera publicó un informe de seguridad en el que muestra el desarrollo de una nueva implementación para la utilidad PsExec, dicha implementación permite moverse lateralmente en una red utilizando el puerto 135/TCP en vez del tradicional puerto 445/TCP de Windows, un puerto menos vigilado.
PsExec está diseñado para ayudar a los administradores a ejecutar procesos de forma remota en las máquinas de la red sin necesidad de instalar software adicional.
Las diferentes implementaciones de PsExec como la que utiliza Impacket, son de sobra conocidas por los atacantes y las utilizan de forma frecuente en las etapas posteriores a la explotación de un ataque, para propagarse en la red, ejecutar comandos en múltiples sistemas o desplegar malware.
¿Cómo funciona PsExec?
PsExec normalmente utiliza el protocolo SMB para ejecutarse, y la mayoría de las veces se ejecuta en el puerto 445. Requiere SMB para enumerar los recursos compartidos en los cuales se tenga permisos de escritura, posteriormente puede utilizar uno de los recursos compartidos con permisos de escritura para cargar un ejecutable en él. La herramienta también utiliza SMB para mostrar al usuario la respuesta de los comandos.
PsExec requiere tres parámetros para ejecutarse: nombre del ordenador, credenciales de usuario y un comando. Como hemos comentado anteriormente PsExec no requiere ninguna instalación; todo lo que necesita para funcionar es que esté habilitado el uso compartido de archivos e impresoras de Windows en la máquina remota, así como un directorio/carpeta compartida disponible con permisos de escritura para las credenciales del usuario empleado.
Tanto la versión original como la variante de Impacket funcionan de forma similar. Utilizan una conexión SMB y se basan en el puerto 445, que debe estar abierto para comunicarse a través del protocolo de intercambio de archivos de red SMB.
Las llamadas a procedimientos remotos (RPC) es un protocolo que proporciona una comunicación de alto nivel con el sistema operativo. Se basan en la existencia de un protocolo de transporte, como TCP o SMB, para hacer llegar los mensajes entre las aplicaciones/servicios que se quieren comunicar. RPC implementa muchas funciones que pueden ayudar a un usuario a crear, gestionar y ejecutar servicios en el sistema operativo.
Nueva Implementación de PsExec
Pentera pudo construir una implementación de PsExec basada únicamente en el puerto 135, utilizando las librerías de Impacket. Esta implementación también utiliza una conexión SMB y se basa en el puerto 445. Utiliza métodos DCE/RPC como el SVCCTL, que se utiliza para gestionar los servicios de Windows a través del SCM (Service Control Manager)
Pentera descubrió que el protocolo SMB se utiliza para cargar el ejecutable, reenviar la entrada y la salida. Los comandos se ejecutan utilizando llamadas DCE/RPC, y los procesos se ejecutan independientemente de la salida.
La nueva implementación del PsExec de Pentera hace uso de llamadas RPC para poder crear un servicio que ejecute un comando de su elección, e iniciar el servicio, sin el uso del puerto 445. Esta implementación no muestra una salida de ejecución.
Conclusiones
Cuando tratamos de protegernos de este tipo de movimientos laterales, la mayoría de las veces solemos centrarnos en el puerto 445 como la «fuente de todos los males». Sin embargo, a veces olvidamos que el puerto 135 también puede ejecutar SMB.
Hay que tener en cuenta que SMB no es el único protocolo explotable. DCE/RPC, como se ha comentado anteriormente, es un protocolo mucho más valioso para los atacantes en comparación con SMB, y sin embargo muchas veces se pasa por alto y/o no se vigila adecuadamente.
Fuente: Hispasec.com