it-swarm.com.de

Warum Daten im Speicher verschlüsseln?

Ich habe gesehen, dass KeePass nicht nur seine Passwort-Datenbank-Datei verschlüsselt, sondern auch die Passwörter verschlüsseln kann, die es im Speicher hat. Dies ist nur ein Beispiel. Ich denke an ein neues Projekt, das sich mit sensiblen/persönlichen Daten befasst, und frage mich jetzt, ob ich auch die im Speicher gespeicherten Daten verschlüsseln soll. Dieses Projekt würde mit Java SE und einer zusätzlichen Android -Anwendung) implementiert. In diesem speziellen Fall werden keine Daten in der Cloud oder auf einem Server gespeichert. Daten von Android werden von der Java SE Desktop-Anwendung über Kabelverbindung importiert.

Aber warum ist das überhaupt notwendig? Arbeiten moderne Betriebssysteme nicht mit der Verwaltung des virtuellen Speichers, sodass Benutzerbereichs-/Benutzermodusprozesse nicht auf den Speicher anderer Prozesse zugreifen können?

Ist es nur eine weitere Verteidigungslinie, wenn eine Sicherheitslücke im Betriebssystem besteht, die den Zugriff auf fremden Speicher ermöglicht? In diesem Fall wäre es meiner Meinung nach viel einfacher, die Datendatei zu stehlen und einen Schlüssellogger zu verwenden, um das vom Benutzer eingegebene Kennwort abzufangen, anstatt die Daten über den Speicherzugriff zu stehlen.

26
user573215

In einer perfekten Welt haben Sie Recht: Es sollte keinen Sinn machen, Daten im RAM verschlüsselt zu halten. Das Betriebssystem sollte eine starke Trennung zwischen den Prozessen beibehalten, klar RAM, wenn es einem anderen Prozess neu zugewiesen wird) und, wenn das Angriffsmodell zulässt, dass ein Angreifer das Gerät anschließend stiehlt und eine Festplattenanalyse durchführt, das verschlüsseln Swap (oder verwenden Sie überhaupt keinen Swap, was für ein Gerät mit Flash-basiertem Speicher möglicherweise sinnvoller ist).

In einer realistischen Welt, in der Betriebssysteme und Systemadministration menschliche Bestrebungen sind und daher von Natur aus nicht perfekt sind, möchten Sie möglicherweise einige Sicherheitsvorkehrungen hinzufügen, einschließlich der Verschlüsselung von Daten in RAM und der Anweisung des Betriebssystems - not ​​um Daten in den Swap Space zu schreiben (auf Unix-ähnlichen Systemen geschieht dies mit mlock()). Dennoch ist diese Verschlüsselung im RAM eher ein psychologisches Ritual als eine echte Verteidigung Die Haupttugend besteht darin, dass sich der Entwickler besser fühlt.

Machen Sie sich das sowieso nicht in Java. Der Garbage Collector kopiert Objekte transparent in RAM) (dies ist Teil der effizientesten GC-Algorithmen und kann nicht verhindert werden), sodass Ihre Anwendung keine Verschlüsselungsstufe verwendet Stellen Sie sicher, dass zu keinem Zeitpunkt eine eindeutige Version der Schlüssel in RAM) vorhanden ist.

27
Thomas Pornin

Moderne Betriebssysteme arbeiten mit der Verwaltung des virtuellen Speichers, sodass Benutzerbereichs-/Benutzermodusprozesse standardmäßig nicht direkt auf den Speicher anderer Prozesse zugreifen können.

In Windows (ich weiß nicht, ob dies auch für Linux gilt) gibt es jedoch Schnittstellen, über die Standardbenutzer auf den Prozessspeicher anderer Prozesse zugreifen können, die mit denselben Anmeldeinformationen ausgeführt werden.

Es gibt viele Programme, die diese Schnittstelle verwenden. Ein sehr einfaches Beispiel ist HxD - ein Freeware-Hex-Editor, mit dem der Prozessspeicher anderer Prozesse angezeigt und sogar bearbeitet werden kann.

9
Robert

Das Gedächtnis kann für andere Prozesse sichtbar werden durch:

  1. verfügbar sein, sobald der ursprüngliche Prozess, der ihn verwendet, ihn an das Betriebssystem zurückgegeben hat. Der Speicher wird nicht gelöscht, und ein nachfolgender Prozess kann eine malloc() ausführen und Informationen zu einem zuvor ausgeführten Prozess abrufen (Hinweis Kapitel 8 von Linux-Gerätetreibern - insbesondere die Fußnote zur ersten Seite)
  2. seiten, die vom Betriebssystem auf die Festplatte ausgelagert werden. Diese können dann für einen Prozess verfügbar werden, der die Festplatte/den Speicher überwacht.

Folglich kann unverschlüsselter Speicher für andere Prozesse sichtbar werden.

This ist ein sehr interessanter Link, und beachten Sie dieses Zitat:

Diese Volatilität hängt jedoch stark vom jeweiligen Computer ab. Wenn ein Computer nichts tut, kann der anonyme Speicher über lange Zeiträume bestehen bleiben. Zum Beispiel konnten auf einigen Computern Passwörter und andere vorberechnete Daten viele Tage nach der Eingabe oder dem Laden in den Speicher leicht wiederhergestellt werden

7
Brian Agnew

Es gibt einige Probleme, die spezifisch für die Welt sind Java Welt, die Sie berücksichtigen müssen. Es ist eine normale Praxis, dass man Heap-Dumps der JVM erstellt, wenn ein technisches Problem auftritt. Ich beschäftige mich damit Eine App, die sogar eine dedizierte Benutzeroberfläche dafür hat. Dies kann unglaublich wertvoll sein, z. B. um Speicherlecks zu finden. Und sicher - ja - die vertraulichen Informationen werden in den Speicherauszug verschoben. Wenn also jemand die App unterbricht (z. B. die Anmeldung mit SQL umgeht) Injektion :)) ...: X. Oder wenn der Administrator eine neugierige Person ist ...: X.

Ich weiß, dass dies in der "idealen Welt" nicht passieren sollte.

Sie können die JVM auch so konfigurieren, dass bei Speicherausfällen ein Speicherauszug erstellt wird. Seit Java 1.4) könnte dies so aussehen:

-XX:-HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=<path to dump file>

Ein Angreifer findet möglicherweise einen Exploit, der die App zum Absturz bringt, und möglicherweise einen anderen Exploit (z. B. Fehler beim Durchlaufen des Dateipfads), um Ihren Speicherauszug zu stehlen!

Die andere Sache, über die Sie nachdenken sollten, ist, dass einige sensible Daten irgendwie in Ihre App gelangen müssen. In bestimmten Momenten haben Sie es also im Gedächtnis. Sie können wenig oder nichts dagegen tun. Sie können es jedoch schneller reinigen. Nehmen Sie zum Beispiel ein Benutzerkennwort. Wenn Sie es in einer String-Instanz speichern, haben Sie nicht viel Kontrolle darüber, wann der Müll gesammelt wird. Daher verarbeiten Nice APIs normalerweise solche Daten in Zeichenarrays (char []), die nach der Verwendung auf Null gesetzt werden können.

2
Lachezar Balev

Google hat einen Exploit namens RowHammer , mit dem ein Benutzer den Inhalt von RAM] lesen kann, der an die Daten angrenzt, in die geschrieben wird. Verschlüsseln des RAM würde diesen Exploit viel schwieriger machen.

"Rowhammer" ist ein Problem bei einigen neueren DRAM-Geräten, bei denen ein wiederholter Zugriff auf eine Speicherzeile Bitflips in benachbarten Zeilen verursachen kann. Wir haben eine Auswahl von Laptops getestet und festgestellt, dass eine Untergruppe von ihnen das Problem aufwies. Wir haben zwei Exploits zur Eskalation von Arbeitsrechten erstellt, die diesen Effekt nutzen. Ein Exploit verwendet Rowhammer-induzierte Bit-Flips, um Kernel-Berechtigungen unter x86-64 Linux zu erhalten, wenn er als nicht privilegierter Userland-Prozess ausgeführt wird. Bei der Ausführung auf einem Computer, der für das Rowhammer-Problem anfällig ist, konnte der Prozess Bit-Flips in Seitentabelleneinträgen (PTEs) auslösen. Damit konnte es Schreibzugriff auf seine eigene Seitentabelle und damit Lese-/Schreibzugriff auf den gesamten physischen Speicher erhalten.

Wir wissen nicht genau, wie viele Computer für diesen Angriff anfällig sind oder wie viele vorhandene anfällige Computer repariert werden können. Unser Exploit verwendet den x86-CLFLUSH-Befehl, um viele Zugriffe auf den zugrunde liegenden DRAM zu generieren. Andere Techniken funktionieren jedoch möglicherweise auch auf Nicht-x86-Systemen.

Wir erwarten, dass unser PTE-basierter Exploit auch auf anderen Betriebssystemen funktioniert. Es ist nicht von Natur aus Linux-spezifisch. Das Verursachen von Bitflips in PTEs ist nur eine Möglichkeit der Ausnutzung. Andere Möglichkeiten zum Ausnutzen von Bitflips können ebenfalls praktisch sein. Unser anderer Exploit demonstriert dies, indem er aus der Native Client-Sandbox entkommt.

1

KeePass hat speziell eine chrome -Erweiterung, sodass andere Chrome -Erweiterungen denselben Speicher lesen können, den KeePass verwendet. Der Betriebssystemspeicherschutz hilft dabei nicht weiter Fall. Daher die Verschlüsselung.

Eine weitere Familie von Gründen für die Speicherverschlüsselung ist im Allgemeinen, dass es Hardwareangriffe gibt, bei denen jemand auf den Speicher zugreifen kann:

  • Kaltstartangriffe Ermöglichen Sie einem Angreifer, den Computer neu zu starten, während der Speicher intakt bleibt. Anschließend starten sie ein alternatives Betriebssystem ohne Speicherschutz und führen einen Scan durch.
  • Einfrieren der RAM Chips bewirkt, dass sie ihren Inhalt auch nach einem Stromausfall beibehalten. Ein Hacker mit physischem Zugriff könnte also die RAM] entfernen und legen Sie es in einen Vorratsbehälter für flüssigen Stickstoff und verschieben Sie das RAM an einen anderen Ort), installieren Sie es erneut und scannen Sie es.
  • Verschiedene Hardware-Busse wie PCI und Firewire unterstützen DMA , wodurch das Gerät direkt auf den Speicher zugreifen kann. Ein Hacker könnte also ein Gerät in den Computer einfügen, das RAM liest.

Randnotiz: Intel und AMD bieten jetzt RAM Verschlüsselung als Feature an.

1
Moby Disk

Der Grund, warum es sich nach einer guten Idee anhört, ist, dass Sie die Daten vor Diebstahl schützen möchten, während Sie sich im Speicher befinden. Dies setzt voraus, dass die Daten in der eigentlichen Datenbank verschlüsselt sind (wie alle PII sein sollten), sich jedoch während der Verarbeitung unverschlüsselt im Speicher befinden. Dies wäre aus einer Vielzahl von Gründen, die von anderen Kommentatoren dargelegt wurden, ziemlich schwierig und würde eine große Komplexität in Bezug auf die Funktionsweise der Anwendungen mit den verschlüsselten Daten im Speicher mit sich bringen.

Eine bessere und praktikablere Lösung besteht darin, eine ordnungsgemäße Zugriffskontrolle auf die Datenbank/das System sicherzustellen und sicherzustellen, dass das DBMS unter einem "normalen" Benutzerkonto und nicht unter einem erhöhten Konto wie SYSTEM usw. ausgeführt wird. Außerdem gibt es zusätzliche Detektivkontrollen Sie können beispielsweise ein DBMS-Überwachungstool einrichten, das Sie so konfigurieren können, dass große Auswahlen in vertraulichen Tabellen usw. angezeigt werden und über ungewöhnliche Ereignisse berichtet wird. Auf diese Weise können Sie sehen, ob eine Auswahl oder ein Prozess versucht, große Datenmengen herauszuholen.

0
Michael