Ruroco - invocación remota de comandos por UDP para “RUn RemOte Command”
(github.com/beac0n)- Una herramienta que ejecuta comandos enviando paquetes UDP al servidor
- Los comandos se configuran del lado del servidor, por lo que el cliente no define qué comando ejecutar, sino que solo selecciona uno de los ya existentes
- Consta de 3 binarios
- client: se ejecuta en la computadora y envía el paquete UDP
- server: recibe el paquete UDP y verifica si es válido
- commander: ejecuta el comando codificado en los datos del paquete UDP si es válido
- Seguridad
- Como se envía por UDP, el servidor no responde en absoluto: no es posible hacer escaneo de puertos
- Los datos enviados del cliente al servidor se cifran usando RSA
- El cliente solo define qué comando ejecutar y los comandos se almacenan en el servidor -> el cliente puede seleccionar un comando, pero no definirlo
- Ejecutar el software del servidor con la menor cantidad posible de privilegios del sistema operativo
- Todos los paquetes recibidos por el servidor se agregan a una lista de bloqueo para proteger contra replay
- (WIP) Protección contra DoS
Ejemplo de uso: single packet authorization (SPA)
Para reforzar la seguridad del servidor, en lugar de bloquear SSH por completo, se puede adoptar un método que abre el puerto SSH brevemente y luego lo vuelve a cerrar
address = "0.0.0.0:8080" # Dirección donde el servidor Ruroco queda escuchando (si no se usa systemd/ruroco.socket)
config_dir = "/etc/ruroco/" # Ruta donde se guardan los archivos de configuración
[commands]
# Abrir SSH (solo para la dirección IP desde la que llegó la solicitud)
open_ssh = "ufw allow from $RUROCO_IP proto tcp to any port 22"
# Cerrar SSH (solo para la dirección IP desde la que llegó la solicitud)
close_ssh = "ufw delete allow from $RUROCO_IP proto tcp to any port 22"
- Configure Ruroco así en el servidor y luego ejecute el siguiente comando en el lado del cliente
ruroco-client send --address host.domain:8080 --private-pem-path /path/to/ruroco_private.pem --command open_ssh --deadline 5 - El servidor usa RSA para verificar si el cliente tiene permiso para ejecutar ese comando y luego ejecuta el comando definido bajo "open_ssh"
- El argumento
--deadlinesignifica que el servidor debe iniciar el comando dentro de los 5 segundos posteriores a su ejecución - El acceso al puerto SSH se permite solo para la IP desde la que se envió el paquete UDP
- Por supuesto, también se deben aplicar todas las demás medidas de hardening de seguridad, igual que cuando el puerto SSH está expuesto a internet
- Se pueden definir tantos comandos como se quiera agregando más comandos al archivo de configuración
Aún no hay comentarios.