GNU/Linux >> Tutoriales Linux >  >> Linux

¿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?

Linux pone a cero (es decir, llena con ceros) todas las páginas de la 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 ponga 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 <stdio.h>
#include <stdlib.h>
#include <string.h>

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 kernel 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 lograr (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 eliminar algunos procesos esenciales (intenta 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. Ver la opción en esta página.


Linux
  1. El kernel de Linux:las 5 principales innovaciones

  2. Linux:¿hay alguna forma de identificar la velocidad de su memoria a través del software?

  3. ¿Cómo puedo reservar un bloque de memoria del kernel de Linux?

  4. ¿Usa el kernel 3.x de Linux el programador de procesos CFS?

  5. ¿Hay una distribución de Linux que esté certificada por UNIX?

¿Linux Oom aleatoriamente cuando todavía hay memoria libre?

¿Cómo funciona internamente copy_from_user del kernel de Linux?

Encontrar el proceso que está usando un determinado puerto en Linux

Compilando el kernel de Linux, ¿cuánto tamaño se necesita?

¿Existe un comando en Linux para saber el número de procesador en el que se carga un proceso?

¿De qué sirve tener una parte del núcleo en el espacio de memoria virtual de los procesos de Linux?