¿Cómo puede el código/software acceder a ubicaciones en la memoria que no debería hacerlo?

¿Cómo puede el código/software acceder a ubicaciones en la memoria que no debería hacerlo?

De forma predeterminada, cuando se ejecutan aplicaciones, están limitadas en la cantidad de RAM a la que pueden acceder, ¿verdad? Técnicamente mi VLC no pudo acceder a las direcciones de memoria utilizadas por Chrome. Pero, ¿cómo es posible que el sistema operativo/compilador permita por error el acceso a una dirección cuyo código no está permitido? Sé que muchos 'exploits' y 'cargas útiles' aprovechan este hecho y crean variables que ocupan demasiado espacio y se 'desbordan' hacia otras direcciones, pero ¿cómo sucede esto realmente?

¿Algunos programas son más propensos a esto que otros? ¿Importa en qué idioma están codificados? Por ejemplo, sé que a C se le permite jugar con la memoria, mientras que a Java no.

Además, ¿cuáles son las ventajas de esto? ¿Qué podría hacer si alguien escribiera un código malicioso para acceder a algún lugar de la memoria? Lo único que se me ocurre son contraseñas/claves almacenadas en la RAM.

PDPensé en poner esto en Stack Overflow, pero mi pregunta es mucho más amplia que simplemente relacionada específicamente con una perspectiva de programación. Si lo he colocado en el lugar equivocado, lo siento.

Respuesta1

Por extraño que parezca, implica un desbordamiento: undesbordamiento de pila- utilizar un proceso cuidadosamente elaborado para utilizar espacio más allá de lo que debería, con el fin de cambiar el comportamiento de un programa de destino o bloquearlo.

Respuesta2

Un punto concreto: los “overflows” que suelen interesar no permiten que una aplicación (proceso) sobrescriba a otra; más bien, son solo los datos que el proceso está procesando, lo que hace que el programa sobrescriba partes de sí mismo (generalmente la pila, posiblemente indirectamente) con esos datos, lo que luego permite tomar el control deese proceso.

Luego, ese proceso puede interactuar mediante llamadas normales de IPC y del sistema para hacerse cargo de cualquier otra cosa a la que tenga acceso su cuenta. VLC no puede acceder al espacio de memoria de Chrome con una dirección normal, peropoder:

  • Finja ser un depurador, adjunte al proceso de Chrome y modifíquelo.
  • Vuelva a escribir cualquiera de sus archivos y configuraciones de cuenta para que su código se ejecute en el futuro cada vez que inicie sesión.
  • Abra conexiones de red y propaguese a otras máquinas.

Con excepciones ocasionales, los sistemas operativos modernos, desafortunadamente, asumen que usted confía plenamente en cada programa que ejecuta con todo lo que hay en su cuenta. Esta es una suposición que no ha sido cierta desde los días de los sistemas de tiempo compartido sin conexión en red utilizados únicamente por expertos (donde las protecciones proporcionadas por el sistema operativo)protegió a los usuarios entre sí, no desde su propio software).

información relacionada