Aller au contenu

Shellcode

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 28 avril 2005 à 23:45 et modifiée en dernier par MisterMatt (discuter | contributions) (création). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Un shellcode est une chaîne de caractère qui représente un code binaire exécutable capable de lancer un shell ('/bin/sh' sous Unix ou command.com sous DOS et Microsoft Windows par exemple). Un shellcode peut être utilisé par un hacker voulant avoir accès à la ligne de commande.

Fonctionnement d'un shellcode

Généralement, les shellcodes sont injectés dans la mémoire de l'ordinateur grâce à l'exploitation d'un dépassement de tampon. L'exécution du shellcode peut être déclenchée par le remplacement dans la pile (stack en anglais) de l'adresse normale de retour par l'adresse du shellcode injecté. Ainsi, lorsque la routine est terminée, le microprocesseur, qui doit normalement exécuter les instructions de l'adresse de retour, exécute le shellcode. Un shell est alors obtenu.

Méthodes de détection de shellcodes

L'écriture de shellcodes est soumise à des contraintes. En effet, un shellcode est une chaine de caractères qui va être injectée en mémoire car elle sera en dehors de l'espace normalement alloué. Or les chaines de caractères se terminent par l'octet 0x00. Un shellcode ne peut donc pas contenir d'octect 0x00, sinon, il serait coupé en deux. De plus, pour optimiser les chances que le microprocesseur exécute le shellcode au bon endroit, il est utile de remplir la mémoire de 0x90. En fait, 0x90 (ou NOP pour no operation) est un opcode ne faisant aucune opération, donc une série de NOP n'aura pas d'incidence sur le shellcode. Ainsi, la première méthode de détection de shellcodes a été de répérer les séries de NOP en mémoire pour empêcher d'exécuter le shellcode qui suit les NOP. Mais ces méthodes sont coûteuses en temps et ralentissent considérablement la connection à Internet.

D'autres méthodes se basent sur le fait qu'un shellcode contient souvent certaines chaines de caractères spécifiques servant à ouvrir un shell comme /bin/sh. Un programme faisant référence à cette chaine de caractères est donc suspect et il est alors possible d'empêcher son exécution.

Cependant, les hackers peuvent outrepasser ces méthodes basiques de détection en cryptant cette chaine de caractères, ou même en utilisant du code polymorphe.

voir aussi

Liens externes