¿Hay algún buen recurso en línea para conocer cómo la asignación de memoria afecta la seguridad?
Es una nueva área para mí, y se agradecería cualquier indicador sobre dónde comenzar.
Vi lo que hiciste allí, preguntando sobre la asignación de memoria & seguridad luego mencionando punteros;)
En mi opinión, la mejor manera de comenzar a aprender sobre la memoria (en general) es escribir código. No estoy seguro de que haya otra forma de abordar esto. No es un código cualquiera, busque un lenguaje que obligue a administrar la memoria en el programador, no en entornos administrados como Java o .NET Framework. Estos son excelentes lenguajes para RAD, pero no proporcionan los aspectos de nivel inferior que se requerirían. Recomiendo C o C ++. Aprenda sobre punteros, referencias colgantes, asignación de memoria dinámica y amp; dislocación, etc.
El ensamblaje es un lenguaje fantástico si desea conocer los entresijos de cómo funciona el software, pero también es difícil de entender. Sin embargo, no necesariamente tiene que poder escribir código de ensamblaje. Solo retire algunos documentos en el idioma y le garantizo que aumentará sustancialmente su comprensión de la memoria.
A veces, la única forma de entender realmente cómo funciona algo es desarmarlo. Elija un libro sobre la arquitectura del sistema operativo, como Sistemas operativos: diseño e implementación o un libro de ingeniería inversa Reversing: Secrets of Reverse Engineering . Separe algunas cosas, familiarícese con un depurador y analice las aplicaciones que se ejecutan en la memoria. Comience a jugar con puntos de interrupción y vea qué le dice su depurador sobre lo que está sucediendo.
En conclusión, la mejor manera en mi opinión de aprender sobre la memoria es ser responsable de su gestión. Comienza despacio, aprende C ++ y trabaja para conseguir cosas más difíciles.
Desbordamientos de búfer puede ser lo que intenta referirse. Una vez que descubras exactamente qué es lo que quieres aprender, es posible que desees crear tu propio entorno de prueba para observar cómo funciona. DVWA es un gran lugar para comenzar con eso.
El asignador de memoria puede influir en la seguridad de la siguiente manera: la elección del asignador de memoria puede afectar la facilidad o dificultad de explotar la saturación del búfer y otras vulnerabilidades relacionadas con la seguridad de la memoria.
Por ejemplo, la asignación aleatoria de la ubicación en la que se asignan los objetos puede interrumpir los ataques que dependen de estos objetos para que estén en ubicaciones predecibles, lo que derrota al atacante. Por lo tanto, un asignador de memoria bien diseñado puede desempeñar un papel en la implementación de ASLR ( aleatorización del diseño del espacio de direcciones ). En general, un asignador de memoria puede potencialmente ayudar a defenderse contra algunas "vulnerabilidades de almacenamiento dinámico".
Consulte, por ejemplo, los siguientes artículos de investigación para algunos trabajos sobre la construcción de asignadores de memoria reforzados que dificultan la explotación de este tipo de vulnerabilidades:
DieHard: Seguridad de memoria probabilística para idiomas inseguros , Emery D Berger y Benjamin G. Zorn, PLDI 2006. Este documento diseña un asignador de memoria que asigna al azar el diseño de objetos en el montón, lo que dificulta la explotación de ciertas vulnerabilidades de seguridad. Consulte la página del proyecto Diehard para obtener más información. Al parecer, este trabajo influyó en el diseño de mitigaciones similares en Montón de tolerancia a fallas de Windows 7 .
DieHarder: Asegurando el montón , Gene Novark, Emery D. Berger, ACM CCS 2010. DieHarder mejora a DieHard al brindar mayor seguridad contra ciertos ataques.
Adherencia: un asignador de memoria para mitigar los punteros colgantes , Periklis Akritidis , Usenix Security 2010. Cling es un asignador de memoria destinado a hacer más difícil la explotación de vulnerabilidades de uso después de liberarse.
Explotación de la piscina del núcleo en Windows 7 , Tarjei Mandt, Blackhat 2011. El asignador de memoria del núcleo de Windows 7 fue diseñado para intentar detener la explotación de ciertos tipos de vulnerabilidades de seguridad de la memoria. Este documento encuentra que la protección es imperfecta y describe cómo un atacante podría anular la protección bajo ciertas condiciones.
Aquí hay más información sobre cómo los sistemas operativos implementados implementan estas ideas:
Un nuevo malloc (3) para OpenBSD . Esta cubierta de diapositivas explica cómo se cambió el asignador de memoria de OpenBSD para usar la aleatorización.
El Heap con tolerancia a errores de Windows 7 implementa algunas de estas ideas (como se mencionó anteriormente).
Lea otras preguntas en las etiquetas memory