¿Cómo funciona el ataque de lixiviación en aerosol?
Pregunta
He leído dos artículos sobre el montón de pulverización: Wikiepdia y this entrada de blog . Entiendo cómo se introduce el código shell en la memoria del programa. Pero, ¿cómo se hace el programa para saltar / llamada a la memoria de direcciones situada en el montón?
¿Qué tipo de accidente hace un llamado a la pila?
¿Tiene este tipo de necesidades de ataque para llevarse a cabo con una especie de ataque de desbordamiento de búfer?
¿Hay alguna regla de oro como el que con tampón de desbordamiento es decir, utilizar la versión n de funciones (strncpy
lugar strcpy
)?
Solución
Si he entendido bien,
Por lo común se aprovechan de la hecho de que estos bloques del montón más o menos en el mismo lugar cada tiempo el spray montón se ejecuta. Ejecución flujo puede ser redirigido al montón aerosoles a través de desbordamiento del búfer o montón fallas de desbordamiento.
Están hablando de una situación como esta:
char buffer[10];
FuncPtr p;
Y cuando se lee en buffer
no hay protección contra el desbordamiento, y se puede escribir directamente en la ubicación de memoria para p
. Más tarde, cuando sus intentos de código para llamar p
, saltará a donde el atacante quiere que salte, presumiblemente donde inyectan código ejecutable en su aplicación.
solución sencilla:. No usar tampones estáticos (prefieren las clases de colección std::
) y compruebe siempre en busca de desbordamientos