ich schreibe einen Server in C ++, der sichere Verbindungen behandelt, wo sensible Daten gesendet werden.
Das Ziel besteht darin, die Daten niemals in unverschlüsselter Form irgendwo außerhalb des Speichers zu speichern und sie auf einem definierten Speicherplatz im Speicher zu belassen (der überschrieben wird, nachdem er nicht mehr benötigt wird)
wird ein großer Teil des Speichers zugeordnet und verwendet, um die sensiblen Daten zu speichern, ausreichend sein und sicherstellen, dass es keine Datenlecks gibt?
Aus dem Handbuch eines Tools, das Passwörter verarbeitet :
Es ist auch fraglich, ob
mlock()
eine geeignete Methode ist, um sensible Daten zu schützen Information. Laut POSIX garantiert mlock () - eine Seite dies ist im Speicher (nützlich für Echtzeitanwendungen), nicht so, dass nicht ist im Swap (nützlich für Sicherheitsanwendungen). Möglicherweise verschlüsselt Swap-Partition (oder keine Swap-Partition) ist eine bessere Lösung.
Allerdings garantiert Linux , dass es nicht im Swap enthalten ist und speziell bespricht die Sicherheitsanwendungen. Es erwähnt auch:
Aber beachten Sie, dass der Suspend-Modus auf Laptops und einigen Desktop-Computern funktioniert Speichern Sie eine Kopie des RAM des Systems auf dem Datenträger, unabhängig von den Speichersperren.
Warum benutzt du SELinux nicht? Dann kann kein Prozess auf andere Dinge zugreifen, es sei denn, Sie sagen es.
Ich denke, wenn Sie ein Programm sichern, das mit sensiblen Daten arbeitet, sollten Sie mit einem sicheren Betriebssystem beginnen. Wenn das Betriebssystem nicht sicher genug ist, kann Ihre Anwendung nichts dagegen tun.
Und vielleicht müssen Sie bei der Verwendung von SELinux nichts Besonderes in Ihrer Anwendung tun, um Ihre Anwendung kleiner, einfacher und sicherer zu machen?
Das Sperren des Speichers (oder, wenn Sie Linux verwenden, die Verwendung großer Seiten, da diese nicht ausgelagert werden können) ist ein guter Anfang. Abgesehen von allen anderen Überlegungen, schreibt das zumindest nicht unvorhersehbar Klartext auf die Festplatte.
Das Überschreiben von Speicher, wenn nicht mehr benötigt, tut nicht weh, ist aber wahrscheinlich nutzlos, weil
Es gibt unzählige Bedenken, wenn jemand versucht, vertrauliche Daten zu stehlen, und dies ist keineswegs einfach. Daten zu verschlüsseln, keine offensichtlichen Exploits zu haben und die dümmsten Fehler zu vermeiden ist so gut wie möglich. Darüber hinaus ist nichts wirklich sicher, denn für jedes N Ding, das du planst, existiert ein N + 1 Ding.
Nehmen Sie den Laptop meiner Frau als Paradebeispiel mit. Der Praktikant, der die Maschinen in seiner Firma aufstellt (zumindest schätze ich, dass er ein Praktikant ist), ergreift alle möglichen Maßnahmen und konfiguriert alles im Paranoia-Modus, um sicherzustellen, dass Daten auf dem Computer nicht gestohlen werden können und die Arbeit zu einer echten Tortur wird möglich. Was Sie am Ende haben, ist ein Bitlocker-geschützter Computer, der 3 Kennwörter benötigt, um sogar hochzufahren, und auf dem Sie praktisch nichts tun können, und einen Bildschirmschoner, der die Arbeitsstation bei jedem Abheben blockiert und das Schütteln der Maus vergisst. Gleichzeitig verfügt dieser super sichere Computer über einen aktivierten Firewire-Port, über den jeder beliebige Inhalt im Speicher des Computers ohne Passwort lesen und schreiben kann.
Tags und Links c++ linux cryptography