MemGuard
Software-Enklave zur Speicherung sensibler Informationen im Arbeitsspeicher.
Dieses Paket versucht, die Wahrscheinlichkeit zu verringern, dass sensible Daten im Arbeitsspeicher offengelegt werden. Es strebt an, alle gängigen Betriebssysteme zu unterstützen und ist in reinem Go geschrieben.
Funktionen
- Sensible Daten werden im Arbeitsspeicher mit XSalsa20Poly1305 verschlüsselt und authentifiziert. Das verwendete Schema schützt auch vor Kaltstartangriffen.
- Die Speicherzuweisung umgeht die Sprachlaufzeit, indem Systemaufrufe verwendet werden, um Ressourcen direkt vom Kernel anzufordern. Dadurch werden Eingriffe des Garbage Collectors vermieden.
- Puffer, die Klartextdaten speichern, werden mit Guard-Pages und Canary-Werten verstärkt, um sporadische Zugriffe und Überläufe zu erkennen.
- Es wird darauf geachtet, dass sensible Daten nicht auf die Festplatte gelangen. Dazu gehört das Sperren des Speichers, um Auslagerung zu verhindern, sowie der Umgang mit Kernspeicherauszügen.
- Kernel-Level-Unveränderlichkeit wird implementiert, sodass versuchte Änderungen geschützter Regionen zu einer Zugriffsverletzung führen.
- Mehrere Endpunkte bieten Funktionen zur Sitzungsbereinigung und zur sicheren Beendigung sowie Signalbehandlung, um zu verhindern, dass Restdaten zurückbleiben.
- Gegen Seitenkanalangriffe wird abgesichert, indem das Kopieren und Vergleichen von Daten in konstanter Zeit erfolgt.
Einige Funktionen wurden von libsodium inspiriert, daher geht der Dank an sie.
Die vollständige Dokumentation und eine vollständige Übersicht über die API finden Sie hier. Interessante und nützliche Codebeispiele finden Sie im Unterpaket examples.
Installation
$ go get github.com/awnumar/memguard
Die API ist experimentell und kann instabile Änderungen enthalten. Sie sollten eine Version festlegen. [Modules]
Mitwirken
- Einreichen von Programmbeispielen in
./examples.
- Melden von Fehlern, Sicherheitslücken und jeglichen Schwierigkeiten bei der Nutzung der API.
- Schreiben nützlicher Sicherheits- und Kryptobibliotheken, die memguard nutzen.
- Implementierung von kernel-/CPU-spezifischen Schutzmaßnahmen.
- Einreichen von Leistungsverbesserungen.
Issues sind zum Melden von Fehlern und zur Diskussion von Vorschlägen gedacht. Pull Requests sollten gegen den master-Zweig erfolgen.