web-dev-qa-db-fra.com

Comment fonctionne un traîneau NOP?

Je ne trouve pas une bonne source qui réponde à cette question. Je sais qu’un nop sled est une technique utilisée pour contourner la randomisation des piles dans une attaque par dépassement de tampon, mais je ne comprends pas du tout à quoi ça marche.

Qu'est-ce qu'un exemple simple qui illustre cette méthode?

Que signifient des termes tels que nop 128?

53
amorimluc

Certaines attaques consistent à forcer le programme à accéder à une adresse spécifique et à continuer à partir de là. Le code injecté doit être chargé auparavant d’une manière ou d’une autre à cet emplacement exact.

La randomisation des piles et d’autres différences d’exécution peuvent rendre l’adresse où le programme sautera impossible à prédire. L’attaquant place donc un traîneau NOP dans une grande plage de mémoire. Si le programme saute n'importe où dans le traîneau, il exécutera tous les NOP restants sans rien faire, puis exécutera le code de charge utile, juste à côté du traîneau.

La raison pour laquelle l'attaquant utilise le sled NOP est de rendre l'adresse cible plus grande: le code peut sauter n'importe où dans le sled, au lieu d'être exactement au début du code injecté.

Un traîneau NOP de 128 octets n'est qu'un groupe d'intructions NOP d'une largeur de 128 octets.

NOTE N ° 1: NOP (No-OPeration) est une instruction disponible dans la plupart des architectures (toutes?) Qui ne fait rien, à part occuper de la mémoire et du temps d'exécution.

NOTE n ° 2: dans les architectures avec des instructions de longueur variable, une instruction NOP ne comporte généralement qu'un octet de longueur; elle peut donc être utilisée comme un remplissage pratique des instructions. Malheureusement, cela facilite également la tâche en traîneau NOP.

68
rodrigo

Pour ajouter à l'explication de rodrigo - Même avec un traîneau NOP, l'emplacement approximatif de la mémoire tampon dans la mémoire doit être prédit à l'avance. Une technique permettant de se rapprocher de l'emplacement de la mémoire consiste à utiliser l'emplacement de la pile à proximité en tant que cadre de référence. En soustrayant un décalage de cet emplacement, l'adresse relative de toute variable peut être obtenue. 

NOTE: sur l’architecture x86, l’instruction NOP équivaut à l’octet hexadécimal 0x90; par conséquent, un tampon d’exploitation terminé pourrait ressembler à ceci: 

| NOP traîneau | Shellcode | Adresse de retour répétée | 

Voyant que le registre EIP pointe vers une adresse quelconque trouvée dans le slogan NOP, il incrémentera lors de l'exécution de chaque instruction NOP, une par une, jusqu'à ce qu'il atteigne finalement le shellcode 

0
Boschko