2010-11-05 14 views
6

J'ai lu deux articles sur la mise en tas: Wikiepdia et this blog post. Je comprends comment le code shell est introduit dans la mémoire du programme. Mais comment le programme est fait pour sauter/appeler à la mémoire d'adresse située sur le tas?Comment fonctionne l'attaque par tas?

Quel type de crash appelle un tas?

Une telle attaque doit-elle être effectuée avec une sorte d'attaque de débordement de tampon?

Existe-t-il une règle d'or comme celle qui a un débordement de tampon, c'est-à-dire utilise la version n des fonctions (strncpy au lieu de strcpy)?

+0

Voir http://www.darkreading.com/vulnerabilities---threats/heap-spraying-attackers-latest-weapon-of-choice/d/d-id/1132487 et https: //www.corelan. be/index.php/2011/12/31/exploiter-écriture-tutoriel-partie-11-tas-pulvérisation-démystifié/ – Pacerier

Répondre

2

Si je comprends bien,

Ils prennent souvent l'avantage de la fait que ces blocs de tas seront à peu près au même endroit chaque fois que le jet tas est exécuté. Exécution flux peut être redirigé vers le tas sprays via dépassement de tampon ou tas défauts de débordement.

Ils parlent d'une situation comme celle-ci:

char buffer[10]; 
FuncPtr p; 

Et quand vous lisez dans buffer il n'y a pas de trop-plein, et vous pouvez écrire directement dans l'emplacement de mémoire pour p. Plus tard, lorsque votre code essayera d'appeler p, il passera à l'endroit où l'attaquant veut qu'il saute, vraisemblablement où il a injecté du code exécutable dans votre application.

Correction simple: N'utilisez pas de tampons statiques (préférez les classes de collecte std::) et vérifiez toujours les débordements.

+0

Il semble que j'ai raté cette phrase sur le wikipedia :) Merci! –