Kann das Austauschen auf Anwendungsebene deaktiviert werden?


10

Ich verwende derzeit Thunderbird mit Gnupg, um verschlüsselte E-Mails zu lesen. Wenn ich das Austauschverhalten richtig verstehe, werden die Speicherseiten mit den entschlüsselten E-Mails möglicherweise ausgelagert und hinterlassen Spuren auf der Festplatte, die theoretisch später forensisch wiederhergestellt werden können.

Es ist sicherlich möglich, nur eine verschlüsselte Auslagerungsdatei zu verwenden oder das Auslagern global für die Dauer der Verwendung vertraulicher Dateien zu deaktivieren. Dies wirkt sich jedoch auf die Leistung aus, wird möglicherweise vergessen und erfordert Root-Rechte.

Ist es möglich, bestimmte Dateien oder Programme als nicht ausgelagert zu markieren? Auch ohne Root-Zugriff? Könnte man eine Anwendung schreiben, die an technisch naive Benutzer verteilt werden kann und deren Speicherinhalt niemals auf die Festplatte übertragen wird?


2
Im Wesentlichen verwandt würden Sie eine cgroup erstellen, Swappiness so einstellen, dass es niemals austauschen würde, und cgexecThunderbird hinein. Sie benötigen noch Root-Zugriff, aber das ist die Auflösung auf Administratorebene. Wenn Sie Ihre eigene Anwendung entwickeln, würden Sie mlock verwenden .
Bratchley

1
GPG kann bereits anrufen mlock, sollten Sie überprüfen.
Steve Wills

Vielen Dank! Ich wusste noch nichts über cgroups, sie klingen interessant.
user54114

1
@SteveWills Das tut es. Ich bin mir jedoch nicht sicher über Thunderbird, das das entschlüsselte Ergebnis anzeigt.
user54114

@Bratchley, kannst du es in eine Antwort setzen? Ich wusste nicht, dass man Swappiness für cgroups einstellen kann, das klingt faszinierend.
Frostschutz

Antworten:


9

In den Kommentaren schlug ich vor, dass Sie eine cgroup erstellen, memory.swappinessauf Null setzen (um das Austauschen zu minimieren) und Ihre Anwendung darin ausführen. Wenn Sie dies tun würden, würde Ihre Anwendung wahrscheinlich nicht ausgetauscht, wenn Sie nicht so wenig physischen Speicher hätten, dass das Austauschen von Seiten gegen Programme in dieser Gruppe die einzige Möglichkeit wäre, genügend physischen Speicher zur Verfügung zu stellen.

So tun Sie dies auf RHEL 6.5:

  • Stellen Sie sicher, dass das libcgroupPaket installiert ist. Dadurch erhalten Sie Zugriff auf Userspace-Tools wie cgcreateund cgexec.

  • Starten und aktivieren Sie den cgconfigDienst, damit die Änderungen an der cgroup-Konfiguration zwischen den Neustarts erhalten bleiben. Unter RHEL sollte dieser Dienst auch die erforderlichen Dateisysteme unter dem /cgroupBaum bereitstellen .

  • Erstellen Sie die cgroup mit cgcreate -g memory:thunderbird

  • Setzen Sie swappiness in dieser Gruppe mit auf Null cgset -r memory.swappiness=0 thunderbird

  • Verwenden Sie cgsnapshot -s > /etc/cgconfig.confdiese Option , um eine aktualisierte persistente Konfiguration für den cgconfigDienst zu speichern (alle Änderungen waren bisher Laufzeitänderungen. Möglicherweise möchten Sie die Standardkonfigurationsdatei irgendwo speichern und erneut ausführen, bevor Sie sie zur persistenten Konfiguration machen.

  • Sie können jetzt die cgexecgewünschten Anwendungen innerhalb der thunderbirdcgroup starten:

    [root @ xxx601 ~] # cgexec -g Speicher: Thunderbird ls

    anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build stack test

    [root @ xxx601 ~] #

Ich habe nicht thunderbirdwirklich installiert, sonst hätte ich das getan. Ich bin mir nicht sicher, warum die Formatierung der oben genannten fehlerhaft ist.

  • Eine Alternative dazu cgexecwäre, Thunderbird zu starten und die PID zur tasksDatei für die Anwendung hinzuzufügen . Beispielsweise:

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / task

    [root @ xxx601 ~] # pidof httpd

    25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109

    [root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / task

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / task

    25926

Auch hier ist zu erwähnen, dass dies das Austauschen technisch nicht verhindert, aber ohne die Anwendung selbst zu ändern, wahrscheinlich die beste Wahl ist. Ich habe gerade herausgefunden memory.memsw.limit_in_bytes, dass es eine direktere Kontrolle zu sein scheint, wenn es darum geht, kein Tauschen zu erzwingen, aber ich habe nicht genug damit herumgespielt, um mich wirklich wohl zu fühlen und zu sagen, dass es Ihr Problem vollständig behebt. Das heißt, es könnte etwas sein, um das man sich kümmern muss.


Die eigentliche Antwort wäre, über anwendungssensible mlockInformationen zu verfügen , um diese Art von Bedenken zu umgehen. Ich bin bereit zu wetten, dass eine Anwendung wie Thunderbird dies tut, aber ich weiß nicht genug über die Interna, um dies zu kommentieren.


Um mit all den anderen Fs umzugehen, die @ Gilles erwähnt, möchten Sie auch einen chrootin einem unshared- --mountNamespace, denke ich. Wenn Sie dies tun, bin ich bereit zu wetten, dass der Endleistungseffekt besser ist als ein verschlüsselter Tausch.
Mikeserv

Ja, kein Zweifel, dass ein Administrator nur so viel kann. Letztendlich muss die Anwendung diese Art von Dingen berücksichtigen, da es so viele gibt und Steuerelemente auf Administratorebene ziemlich aufwändig werden können.
Bratchley

Könnte ein Coredump noch inspiziert werden, um zu enthüllen, was für einen willkürlichen Prozess vor sich geht, selbst wenn memory.swappiness=0Sie denken? Ich würde es nicht wissen - aber ich bin neugierig.
Mikesserv

1
Ja, aber das gilt für fast alles, einschließlich Anwendungen mit mlock, aber nicht MADV_DONTDUMP. Meistens sind Menschen, die sich Sorgen um den Austausch vertraulicher Informationen machen, jedoch besorgt darüber, dass Laptops gestohlen und der Austauschbereich gekämmt werden. Zu dem Zeitpunkt, an dem Core Dumps initiiert werden, wurde das System bereits vollständig kompromittiert.
Bratchley

5

Anwendungen können ihren Speicher sperren, sodass er nicht ausgetauscht werden kann.

mlock, munlock, mlockall, munlockall - lock and unlock memory

Ich kenne jedoch keine Möglichkeit, dies von außen zu beeinflussen. Die Anwendung müsste geschrieben werden, um dies selbst zu verwenden. Mit Mails ist es wahrscheinlich besonders schwierig, da es normalerweise auch externe Programme zum Anzeigen von Anhängen und dergleichen beinhaltet.

Selbst mit Memlock besteht die Möglichkeit, dass es auf Ihrer Swap-Partition landet - wenn Sie Suspend to Disk verwenden, das den gesamten Speicher auf die Festplatte schreibt, unabhängig von Nicht-Swap-Einstellungen.

Es ist einfacher, zunächst nur die vollständige Festplattenverschlüsselung durchzuführen.


5

Ja, eine Anwendung kann durch den mlockSystemaufruf verhindern, dass ein Teil ihres Speichers ausgelagert wird . Dies ist jedoch in Ihrem Fall nicht wirklich nützlich.

Vertrauliche Daten befinden sich nicht nur im Anwendungsspeicher. Es endet in temporären Dateien an verschiedenen Orten auf ( /tmp, /var/spoolusw.). Thunderbird selbst zeigt die entschlüsselte E-Mail an, sodass Sie sie auch im RAM sperren müssen.

Wenn Sie sicherstellen möchten, dass Ihre Festplatte keine Spuren vertraulicher Dateien enthält, müssen Sie Ihren Swap sowie alle potenziellen Speicherorte temporärer Dateien verschlüsseln (insbesondere, /tmpwenn es sich nicht um tmpfs handelt, und die meisten davon /varzusätzlich natürlich in dein Home-Verzeichnis).

Der Einfluss des verschlüsselten Austauschs auf die Leistung ist gering bis gleich Null. Die Verschlüsselung ist viel schneller als die Festplatten-E / A.


chrootEin Namespace-Container mit scheint eine swapoffbessere Alternative zum verschlüsselten Swap zu sein. Sehr gute Antwort - keine andere Antwort erwähnte andere Dateisystemeffekte. Ich selbst habe einfach keinen swap- ich besitze keinen Computer mit weniger als 4 GB RAM und sehe keinen Nutzen darin, ihn zu verwenden. Seine Verwendung ist nur für alle Maschinen praktisch, bei denen es um Suspend geht - und das lässt sich leicht per Skript ausführen.
Mikeserv

0

Ich denke nur , wenn es besser sei , mit der Änderung der Priorität des Bewerbungsverfahrens auf zB mit einem Start-up - Skript starten sie mit einer hohen Priorität beginnend mit niceund reniceund mit der I / O - Priorität ändern , dass mit ioniceund dann sehen , was das passiert.

Sie können die Anwendung auf die höchste Prioritätsstufe "schön" machen, z. B. auf -20diese Weise verlassen Sie das Betriebssystem, um das zu tun, was es am besten kann, indem Sie entscheiden, wann die Anwendungsprozesse ausgetauscht werden sollen.

Hat aber von anderen vorgeschlagen, wenn Sie mehr Kontrolle und Granularität wünschen, müssen Sie anfangen zu betrachten cgroupsund einzustellenmemory.swappiness

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.