Depassement de capacite de la pile.pdf

(1001 KB) Pobierz
Dépassement de capacité de la pile
Etude des exploitations avancées de stack overflow,
écriture de shellcodes polymorphiques et
alphanumériques
Gross David
Alias Deimos <deimos@futurezone.biz>
22 avril 2007
1
Table des matières
1. Introduction
................................................................................................................. 4
2. Rappels des concepts de base
...................................................................................
2.1.
Organisation de la mémoire sous GNU/Linux
............................................
2.2.
Le langage assembleur
....................................................................................
2.3.
Utilisation de logiciels de débogage
.............................................................
3. Exploitation basique de stack overflow
.................................................................
3.1.
Présentation d’un cas de stack overflow
......................................................
3.2.
Prise de contrôle du flux d’exécution
...........................................................
3.3.
Programmation de shellcode basique et exploitation
.................................
3.4.
Exemples de shellcode
....................................................................................
4. Techniques avancées de programmation de shellcode
......................................
4.1.
Shellcode polymorphique
...............................................................................
4.2.
Shellcode alphanumérique
..............................................................................
4.2.1. Instructions disponibles
............................................................................
4.2.2. L’algorithme d’encodage
.........................................................................
4.2.3. Substitution d’instructions
.......................................................................
4.2.4. Structure globale du shellcode
................................................................
4.2.5. Mise en application
...................................................................................
4.2.6. Exploitation
................................................................................................
4.3.
Camouflage de NOPs
......................................................................................
6
6
11
12
16
16
18
20
33
40
42
47
47
52
55
57
62
68
71
2
5. Technique avancée d’exploitation de stack overflow
.........................................
5.1.
« ret into linux-gate.so.1 »
.............................................................................
5.1.1. Présentation de la méthode
......................................................................
5.1.2. Exploitation
................................................................................................
5.1.3. Protection possible
.....................................................................................
5.2.
« ret into .text »
.................................................................................................
5.3.
Exploitation en local
........................................................................................
73
73
73
77
79
80
86
6. Conclusion
.................................................................................................................... 88
7. Remerciements
............................................................................................................ 89
8. Références
.................................................................................................................... 90
9. Annexes
......................................................................................................................... 92
3
1. Introduction
Avant de se lancer dans le vif du sujet, je tiens à me présenter afin que le lecteur sache
qui se « cache » derrière ce document et en profiter pour préciser certains points concernant
ce texte.
Je m’excuse d’avance pour toutes les fautes et manques de précisions que vous
pourrez trouver dans ce document. N’hésitez donc pas à me contacter afin que je corrige ou
complète celui-ci (j’essayerai de toute façon de le tenir à jour quant à l’évolution de la
sécurité informatique) ou pour me faire part de vos critiques constructives et commentaires. Je
suis actuellement étudiant en première année de DUT informatique ; l’écriture mais surtout la
préparation de ce texte m’ont pris un temps considérable et j’espère avoir des retours positifs
de ce travail.
A la base, j’avais pour objectif d’écrire un article uniquement sur les
shellcodes
polymorphiques et de l’approfondir en décrivant la programmation de
shellcode
entièrement
alphanumérique (i.e. tous les opcodes compris dans les valeurs [a-zA-Z0-9]) afin de
démontrer les faiblesses potentielles des NIDS. C’était un sujet que je trouvais très intéressant
et ma motivation à produire un texte sur les
shellcodes
alphanumériques était poussée par le
fait que je n’ai pas vu jusqu’à présent de document français sur ce sujet.
C’est en effectuant des tests d’exploitation de
stack overflow
avec ces
shellcodes
que
je me suis rendu compte des nombreuses protections présentes en local (en plus des
protections présentes lors d’une attaque à distance), comme par exemple la randomisation de
l’adresse de base de la pile sous GNU/Linux depuis le
kernel
2.6.
J’ai ainsi élargi le sujet de cet article, et en même temps décidé de le destiner à un plus
large public, d’où la rédaction des parties 2 et 3, destinées aux débutants ou aux individus ne
s’étant jamais penchés sur les failles de dépassement de tampon (buffer
overflow).
4
En effet j’y décrirai l’organisation de la mémoire sous GNU/Linux, les généralités du
langage machine, la manipulation de certains outils GNU/Linux, etc. Il s’agit donc de simples
rappels afin de se rafraichir la mémoire sur certains points, et non pas une documentation
exhaustive permettant un apprentissage complet de ces notions.
De plus certaines connaissances nécessaires à la lecture de ce document ne seront pas
rappelées, pour de nombreuses raisons évidentes, comme la programmation en C (voire Perl,
bien que les scripts Perl présents dans cet article ne s’y trouvent qu’en guise de « Proof of
Concept »).
5
Zgłoś jeśli naruszono regulamin