Ruroco - « RUn RemOte Command » : exécution de commandes à distance via UDP
(github.com/beac0n)- Un outil qui exécute des commandes en envoyant des paquets UDP au serveur
- Les commandes sont configurées côté serveur, donc le client ne définit pas la commande à exécuter et se contente de sélectionner l’une des commandes existantes
- Composé de 3 binaires
- client : s’exécute sur un ordinateur et envoie les paquets UDP
- server : reçoit les paquets UDP et vérifie leur validité
- commander : exécute la commande encodée dans les données du paquet UDP si elle est valide
- Sécurité
- Comme l’envoi se fait en UDP, le serveur ne répond absolument pas : scan de ports impossible
- Les données envoyées du client vers le serveur sont chiffrées avec RSA
- Le client définit uniquement la commande à exécuter et la commande est stockée sur le serveur -> le client peut sélectionner une commande, mais ne peut pas la définir
- Exécuter le logiciel serveur avec le moins de privilèges système possible
- Tous les paquets reçus par le serveur sont ajoutés à une liste de blocage afin de se protéger contre les replay
- Protection DoS (WIP)
Exemple d’utilisation : single packet authorization (SPA)
Pour sécuriser le serveur, au lieu de bloquer complètement SSH, il est possible d’adopter une méthode qui ouvre brièvement le port SSH puis le referme
address = "0.0.0.0:8080" # Adresse sur laquelle le serveur Ruroco écoute (si systemd/ruroco.socket n’est pas utilisé)
config_dir = "/etc/ruroco/" # Chemin où sont stockés les fichiers de configuration
[commands]
# Ouvrir SSH (uniquement pour l’adresse IP d’où vient la requête)
open_ssh = "ufw allow from $RUROCO_IP proto tcp to any port 22"
# Fermer SSH (uniquement pour l’adresse IP d’où vient la requête)
close_ssh = "ufw delete allow from $RUROCO_IP proto tcp to any port 22"
- Configurez Ruroco ainsi sur le serveur, puis exécutez la commande suivante côté client
ruroco-client send --address host.domain:8080 --private-pem-path /path/to/ruroco_private.pem --command open_ssh --deadline 5 - Le serveur vérifie avec RSA que le client est autorisé à exécuter cette commande, puis lance la commande définie sous
open_ssh - L’argument
--deadlinesignifie que le serveur doit démarrer la commande dans les 5 secondes suivant son exécution - L’accès au port SSH n’est autorisé que pour l’IP depuis laquelle le paquet UDP a été envoyé
- Bien entendu, comme lorsque le port SSH est exposé à Internet, il faut aussi appliquer toutes les autres mesures de renforcement de la sécurité
- Vous pouvez définir autant de commandes que vous le souhaitez en en ajoutant davantage dans le fichier de configuration
Aucun commentaire pour le moment.