GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine Linux-Distribution oder einen Kernel-Patch, der einen Prozessspeicherplatz löscht, nachdem der Prozess beendet wurde?

Linux löscht (d.h. füllt mit Nullen) alle Speicherseiten nicht, wenn sie freigegeben werden, sondern wenn sie an einen anderen Prozess übergeben werden. Somit darf kein Prozess Datenauszüge von einem anderen Prozess erhalten. Die Seiten behalten jedoch ihre alten Inhalte, bis sie wiederverwendet werden. Mir ist kein Patch bekannt, der die Nullung bei der Seitenfreigabe durchführt (Edit: wie @user2313067 in seiner Antwort betont, bietet der PaX-Patch diese Option zu einem Preis, der auf einem bestimmten System ein Problem darstellen kann oder auch nicht); Im Allgemeinen wäre dies nachteilig für die Leistung, da Caches mit Nullen gefüllt und mehr "nützliche" Daten entfernt würden (und das zählt nicht den Swap-Speicher, der Ihrem eingebetteten Gerät wahrscheinlich fehlt, aber die meisten Linux-Systeme da draußen haben Swap) .

Sie können eine Art Datenlöschung erzwingen, indem Sie einfach jede mögliche Seite aus einem anderen Prozess zuweisen. Etwa so:

#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;
}

Wenn Sie dieses Programm als root ausführen , dann greift es den gesamten verfügbaren Speicher und füllt ihn (um die tatsächliche Zuweisung zu erzwingen) und wird nur beendet, wenn kein Speicher mehr vorhanden ist. Läuft als root wird benötigt, da der Kernel die letzten paar Seiten für root reserviert .

Beachten Sie, dass das Auffüllen des Speichers OOM-Bedingungen auslöst, an denen sich der Kernel erlaubt fühlt, Prozesse abzuschießen, um etwas Platz zu schaffen. Dies geschieht nur, wenn keine freie Seite mehr vorhanden ist, d. h. der Zustand, den Sie erreichen möchten (keine freie Seite mehr übrig bedeutet, dass alle alten Seiten neu zugewiesen und daher auf Null gesetzt wurden). Es ist eine Art Selbstmord für das Betriebssystem, weil der OOM-Behandlungscode einige wesentliche Prozesse beenden kann (es versucht nicht, aber hey, das sind nur Heuristiken). In Ihrem Fall scheint dies jedoch angemessen:Wenn eine Manipulation erkannt wird, hat das Gerät keine andere Wahl als eine ehrenhafte Ausweidung.

Sie müssen also nur Ihre kritische Anwendung in einem Wrapper (einem einfachen Skript) starten, der das obige Programm startet, wenn die kritische Anwendung beendet wird (vermutlich aufgrund einer erkannten Manipulation).


Grsecurity hat dafür PAX_MEMORY_SANITIZE. Siehe Option auf dieser Seite.


Linux
  1. Der Linux-Kernel:Top 5 Innovationen

  2. Linux – Was sind High Memory und Low Memory unter Linux?

  3. Linux – Warum gibt es eine Linux-Kernel-Richtlinie, um den Benutzerbereich niemals zu unterbrechen?

  4. Linux – Gibt es GUIs für Linux, die kein X11 verwenden?

  5. Linux - Gibt es eine Möglichkeit, die Geschwindigkeit Ihres Speichers per Software zu ermitteln?

Linux Oom zufällig, wenn noch freier Speicher vorhanden ist?

Wie viel Größe wird beim Kompilieren des Linux-Kernels benötigt?

Gibt es in Linux einen Befehl, um die Prozessornummer zu ermitteln, in der ein Prozess geladen wird?

Wie kann ich einen Speicherblock aus dem Linux-Kernel reservieren?

Verwendet der Linux-Kernel 3.x den CFS-Prozessplaner?

Was nützt es, einen Kernel-Teil im virtuellen Speicherbereich von Linux-Prozessen zu haben?