Saltar al contenido

¿Hay alguna distribución de Linux o parche del kernel que borre un espacio de memoria del proceso después de que finalice el proceso?

Esta es la respuesta más válida que te podemos aportar, pero primero mírala detenidamente y valora si se puede adaptar a tu proyecto.

Solución:

Linux pone a cero (es decir, rellena con ceros) todas las páginas de memoria no cuando se liberan, sino cuando se entregan a otro proceso. Por lo tanto, ningún proceso puede obtener extractos de datos de otro proceso. Sin embargo, las páginas conservarán su antiguo contenido hasta que sean reutilizadas. No tengo conocimiento de ningún parche que haga la puesta a cero al publicar la página (Editar: como @user2313067 señala en su respuesta, el parche PaX ofrece esta opción, a un costo que puede o no ser un problema en cualquier sistema dado); en general, sería perjudicial para el rendimiento porque llenaría los cachés con ceros, expulsando más datos "útiles" (y eso sin contar el espacio de intercambio, del que probablemente carece su dispositivo integrado, pero la mayoría de los sistemas Linux tienen intercambio) .

Puede forzar una especie de borrado de datos simplemente asignando todas las páginas posibles de otro proceso. Algo como esto:

#include 
#include 
#include 

int
main(void)

    for (;;) 
        void *x = malloc(2000);
        if (x == NULL) 
            break;
        
        memset(x, 'T', 2000);
    
    return 0;

Si ejecuta este programa como root, luego toma toda la memoria disponible y la llena (para forzar la asignación real), saliendo solo cuando no queda memoria. corriendo como root es necesario porque el núcleo reserva las últimas páginas para root.

Tenga en cuenta que llenar la memoria activa las condiciones OOM, momento en el que el kernel se siente autorizado a disparar procesos para hacer algo de espacio. Esto sucede solo cuando no queda ninguna página libre, es decir, el estado que desea alcanzar (si no queda ninguna página libre significa que todas las páginas antiguas se han reasignado y, por lo tanto, se han puesto a cero). Es una especie de suicidio para el sistema operativo, porque el código de manejo de OOM puede matar algunos procesos esenciales (no intentos no, pero bueno, esto son solo heurísticas). Sin embargo, esto parece apropiado en su caso: si se detecta una manipulación, el dispositivo no tiene otra opción que el destripamiento honorable.

Entonces, solo tiene que iniciar su aplicación crítica en un contenedor (un script simple) que inicia el programa anterior cuando la aplicación crítica sale (presumiblemente debido a la manipulación detectada).

Grsecurity tiene PAX_MEMORY_SANITIZE para hacer esto. Consulte la opción en esta página.

Si te sientes estimulado, tienes la libertad de dejar un enunciado acerca de qué le añadirías a este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.