Qu'est-ce qu'un Shellcode?
Shellcode est une séquence de code machine ou d'instructions exécutables injectée dans la mémoire d'un ordinateur dans le but de prendre le contrôle d'un programme en cours d'exécution. Dans une telle attaque, l’une des étapes consiste à prendre le contrôle du compteur de programme, qui identifie la prochaine instruction à exécuter. Le flux de programme peut ensuite être redirigé vers le code inséré. Le code machine intrusif est appelé la charge utile de l'attaque et est l'élément couramment désigné par le terme shellcode. Cette méthode a souvent été utilisée pour accorder l'accès à un attaquant en ouvrant un shell de commande du système d'exploitation. Par conséquent, les attaques par injection de code sont généralement appelées shellcode.
La vulnérabilité exploitée implique généralement la manière dont un programme affecte la mémoire, vérifie la validité des données d'entrée et traite les erreurs de mémoire. Les développeurs de logiciels peuvent généralement éviter cette menace en définissant strictement les données d'entrée et en rejetant les valeurs inappropriées. Si cette case n'est pas cochée, les valeurs nécessitant plus d'espace de stockage que la mémoire allouée pour cette valeur peuvent être acceptées. Cela provoque une culasse de sécurité appelée débordement de tampon, où une partie des données est écrite dans des emplacements de mémoire adjacents à l'espace attribué à la valeur. Lorsqu'elle est manipulée avec soin, cette anomalie peut permettre l'introduction de code intrusif.
Shellcode est normalement écrit dans un langage de programmation avec un accès système de bas niveau tel que assembly, C ou C ++. Toutefois, en fonction de la vulnérabilité ciblée, le même résultat peut être obtenu en insérant du code pour un langage de script interprété, tel que PERL, ou du bytecode pour une machine virtuelle, telle que JAVA. Le code peut être implanté avant, pendant ou après le détournement du compteur de programme. Ainsi, le code intrusif peut être contenu dans un fichier sur la machine ciblée ou transmis via une connexion réseau en temps réel.
Les exploits de shellcode locaux sont conçus pour donner à un attaquant le contrôle d'une machine à laquelle il ou elle a un accès physique. Un objectif dans ce cas pourrait être de créer un compte avec des privilèges d’administrateur, par exemple. De même, si un processus en cours a un niveau de privilège élevé, un exploit réussi accorderait temporairement le même niveau d'accès à l'intrus.
Les processus exécutés sur une machine distante peuvent être exploités à l'aide de protocoles réseau standard pour communiquer avec l'ordinateur cible. Le shellcode Connect-back indique à la machine cible d'établir une connexion avec l'ordinateur de l'intrus. Si l'intrus établit la connexion, le code s'appelle un bindshell, car il tente de prendre le contrôle d'une connexion réseau appelée port sur la machine distante. La méthode de connexion en retour est plus largement utilisée, car les pare-feu interdisent rarement les connexions sortantes.