Die Auswirkungen von Gegenmaßnahmen gegen Linux-Seiten-Cache-Angriffe sind groß und werden voraussichtlich länger dauern. [Übersetzung]

Einführung

Dies ist ein Auszug aus dem LWN.net-Artikel Abwehr von Seiten-Cache-Angriffen von Jonathan Corbet und eine Zusammenfassung verwandter Informationen. Notizen und verwandte Informationen hinzugefügt. Der ursprüngliche Artikel befasst sich hauptsächlich mit den Diskussionen in Linux Kernel Mailing List und dem Verhalten von Systemaufrufen unter Linux 5.0 oder höher. Es ist ein Kommentar zu Änderungen.

Sicherheitslücken werden jetzt im Seiten-Cache des virtuellen Speichers gemeldet, der die Grundlage für den Speicherverwaltungsmechanismus des Betriebssystems bildet. Auf Sicherheitslücken aufgrund des Seiten-Cache-Timings wurde seit einiger Zeit hingewiesen, aber es werden nacheinander clevere Tricks gefunden. Das Papier, in dem das Problem angesprochen wurde, nutzt Schwachstellen in Linux und Windows aus, aber auch andere Betriebssysteme weisen Schwachstellen auf. Außerdem hat sich das Verhalten von Systemaufrufen geändert, was sich vermutlich auf die Anwendungen auswirkt, die sie verwenden. Dies ist immer noch eine Änderung in der RC-Version (Release Candidate-Version), sodass Benutzer, die normale Kernel verwenden, davon nicht betroffen sind, dies jedoch in Zukunft der Fall sein wird. Siehe Ressourcen für Systemaufrufe und andere Funktionen / Begriffe.

Lizenz

Laut Originalartikel handelt es sich um by-sa-4.0.

Überblick

Defending against page-cache attacks Die Seiten-Cache-Funktion des Kernels hat zu einer verbesserten Leistung beigetragen, indem die Festplatten-E / A (beim Zugriff auf Dateien) reduziert und die Freigabe im physischen Speicher erhöht wurde.

Wie andere leistungssteigernde Techniken, die Ressourcen über Sicherheitsgrenzen hinweg gemeinsam nutzen, können Seiten-Caches jedoch zum Lesen vertraulicher Informationen missbraucht werden.

Seiten-Caches können das Ziel einer Vielzahl von Angriffen sein, wie in einem kürzlich erschienenen [Artikel] von Daniel Glass und seinen Kollegen (https://arxiv.org/pdf/1901.01161.pdf) gezeigt. Ja, 5.0 Merge Window führt ein, dass sich das Verhalten des Systemaufrufs mincore () plötzlich geändert hat. Spätere Diskussionen zeigen jedoch, dass mincore () nur die Spitze des Eisbergs ist. Es ist unklar, was wirklich getan werden sollte, um das System vor Seiten-Cache-Angriffen zu schützen und wie viel Leistung beeinträchtigt wird.

Der Seitencache speichert eine fragmentarische Kopie der Datei im Hauptspeicher. Wenn ein Prozess auf Daten aus einer Datei zugreifen muss, muss durch das Vorhandensein der Daten im Seitencache nicht mehr von der Festplatte gelesen werden, was die Verarbeitung erheblich beschleunigt. Wenn mehrere Prozesse auf dieselbe Datei zugreifen (z. B. C-Bibliothek), wird dieselbe Kopie im Seitencache freigegeben, wodurch der für die laufende Verarbeitung erforderliche Gesamtspeicher reduziert wird. Viele Laufzeitsysteme werden auf diese Weise auf dem System gemeinsam genutzt, auf dem sich der Container befindet.

Obwohl das Zwischenspeichern von Seiten nützlich ist, ist bekannt, dass diese Art der Cache-Freigabe manchmal Informationen zwischen Prozessen offenlegen kann. Wenn ein Angreifer herausfinden könnte, welche Dateien im Seitencache vorhanden sind, weiß er, was der auf dem System ausgeführte Prozess tut.

* arXiv: 1901.01161v1 [cs.CR] 4 Ausgeliehen ab Januar 2019 *

Wenn ein Angreifer feststellen kann, dass sich eine bestimmte Seite im Cache befindet, kann er feststellen, wann ein Zugriff stattfindet. Beispielsweise kann abgeleitet werden, wann eine bestimmte Funktion nicht aufgerufen wird oder wann eine Seite mit einer bestimmten Funktion im Cache angezeigt wird. Glass et al. Konnten viele Schwachstellen ausnutzen. Es enthielt Informationen wie geheime Kanäle und das Timing von Tastenanschlägen und wurde mithilfe von zwischengespeicherten Informationen vervollständigt.

Der Erfolg eines Seiten-Cache-Angriffs besteht aus zwei Komponenten. Zum einen kann festgestellt werden, ob sich eine Seite im Cache befindet. Wenn möglich, ist es wünschenswert, den Status des Prozesscaches nicht zu verkratzen. Die andere Möglichkeit besteht darin, bestimmte Seiten aus dem Cache zu entfernen, was wichtig ist, um zu sehen, wann das Ziel diese Seiten besucht. In diesem Artikel war es möglich, die Zielseite mit einer ausreichenden Anzahl anderer Seiten einfach aus dem Cache zu entfernen. Dies war erfolgreich, aber es kann tatsächlich einen einfacheren Weg geben.

Mincore () Systemaufruf korrigieren

Der Fokus der Entwickler-Community lag auf der Möglichkeit, Informationen zum Speicherort des Seiten-Cache abzurufen. Es ist wahrscheinlich unmöglich, einen Angreifer vollständig daran zu hindern, den Status des Caches zu ändern (obwohl Speicherkontrollgruppen in dieser Hinsicht hilfreich sein können). Wenn der Angreifer den Status des Caches jedoch nicht beobachten kann, sind die meisten Angriffe recht schwierig. Sicherlich wird es schwierig sein zu wissen, ob die Zielseite erfolgreich rausgeschmissen wurde. Leider ist es nicht einfach, diese Informationen sicher zu verwahren.

In Glass 'Artikel befasste sich mincore () mit Systemaufrufen. Es ist bekannt, dass der Systemaufruf mincore () zur Verarbeitung von Seitencache-Statusberichten dient. Infolge der Zusammenführung von 5.0 wurde mincore () so geändert, dass nur auf Seiten berichtet wird, bei denen beim Aufruf des Prozesses [^ 7] ein Fehler aufgetreten ist [^ 1]. Angreifer können weiterhin mincore () verwenden, um zu wissen, wann eine Seite evakuiert wurde, können jedoch nicht mehr verwendet werden, um zu beobachten, wann eine Seite durch einen anderen Prozess zurückgemeldet wurde. Dazu muss der Angreifer zuerst die Seite bemängeln und die gewünschten Informationen zerstören.

Das Ändern des Verhaltens von mincore () ist eine wesentliche Änderung. Ich habe es gewagt, es im stabilen Update nicht zu ändern. Aus realistischer Sicht könnte dies das Verhalten des User-Space-Programms zerstören und zu einem Zurücksetzen führen. Kevin Easton ist ein Debian-Paket Liste derjenigen, die den Systemaufruf mincore () verwenden, Aber es ist noch unklar, wie viele Pakete beschädigt werden. Das wahrscheinlich problematischste auf der Liste ist vmtouch, aber ein bekannter Arbeitssatz [^ 2], um den Start der virtuellen Maschine zu beschleunigen. Es wird in einigen Einstellungen verwendet, die voreingestellt sind.

In Bezug auf diesen fatalen Effekt sagte Josh Snyder [^ 10]: "Für Netflix dauerte es Tage, um den Datenbankcluster [^ 9] in Monaten zu warten, wenn der Aufruf des Mincore-Systems genaue Informationen verlor. Es wird gestreckt "gemeldet. Der Bericht ermutigte führende Entwickler, ihre Optionen zu überdenken, einschließlich des Hinzufügens eines Systemmodus, um mincore () in privilegierte Ausführung zu ändern [^ 8]. Die Idee steht wahrscheinlich in der Nähe von vorgeschlagen und angenommen von Dominique Martinet. Er sagte, die Informationen sollten nur bereitgestellt werden, wenn der Anrufer (von mincore) die Mapping-Quelldatei schreiben darf. Dies löst den Netflix-Anwendungsfall und verhindert gleichzeitig, dass Seiten von ausführbaren Systemdateien überwacht werden. [Patch-Implementierung] mit dieser Methode (https://lwn.net/ml/linux-kernel/[email protected]/) wurde von Jiri Kosina veröffentlicht.

Noch größeres Problem

Wenn eine praktikable Lösung gefunden wird, werden einige versuchen, das größere Problem zu lösen und zu beenden. Aber dieser Fall ist vorerst nicht so. David Chinner kann den Systemaufruf preadv2 () mit dem Flag RWF_NOWAIT zum zerstörungsfreien Testen des Seitencache-Inhalts verwenden. Aufgezeigt [^ 15]. Eine verfügbare Lösung besteht darin, Readahead zu initialisieren, wenn der Datenabruf im Seitencache beim Lesen von RWF_NOWAIT fehlschlägt, um den Cache-Status zu ändern und gleichzeitig die Leistung für allgemeine Benutzer so weit wie möglich zu verbessern. Der oben aufgeführte Kosina-Patch enthält diese Änderungen.

Chinner sieht diese Flecken als Schlag auf die Mogura und immer noch inmitten einer Menge Mogura. "Viele Kernel-Schnittstellen sind so konzipiert, dass sie die sofortige Verfügbarkeit von Daten abfragen", sagte er (was im Allgemeinen bedeutet, dass sie sich im Seiten-Cache befinden). Diese Informationen werden in vielen Anwendungen verwendet, da sie auf die richtige Weise abgerufen werden können und nützlich sind. Ein weiterer Weg zu Sicherheitslücken sind Overlays, die als Mittel zum Zwischenspeichern von Seiten zwischen Containern verwendet werden. Ihm zufolge ist das Ändern von mincore () der falsche Ansatz.

Dies ist nur ein schneller Heftpflaster für eine bestimmte Lesemethode und trägt nicht dazu bei, den tatsächlichen Umfang von Informationslecks einzuschränken. Wenn wir uns nur mit Heftpflastern befassen, basieren die anderen Kanäle, die ebenfalls Informationen und die gesamte von uns aufgebaute Infrastruktur offenlegen, auf dem Kernkonzept "Seiten auf der Kernelseite über Sicherheitsgrenzen hinweg gemeinsam nutzen". Sie werden es vermissen.

In einer anschließenden Debatte enthüllte er einen anderen Weg der Verwundbarkeit. Auf mindestens einigen Dateisystemen wird durch direkte E / A-Lesevorgänge auf einer Seite die Seite aus dem Cache ausgeworfen. Das Deaktivieren (Seiten-Cache) ist für einen Angreifer daher sehr einfach. Es gab einige hitzige Debatten, aber es gab auch die Frage: "Ist es richtig für ein Dateisystem wie XFS, das zu tun?" (Linus Torvalds hält dies für einen Fehler ). Ein klarer Punkt aus dieser Diskussion ist jedoch, dass sich dieses Verhalten wahrscheinlich nicht sofort ändern wird.

Selbst wenn alle Löcher geschlossen sind, bestehen immer noch Probleme wie Abstumpfen. Es ist ein einfaches Problem mit Timing-Angriffen. Wenn eine bestimmte Seite schnell geladen wird, befindet sich diese Seite mit ziemlicher Sicherheit im Cache. Wenn es einige Zeit dauert, handelt es sich wahrscheinlich um einen Lesevorgang aus einem dauerhaften Speicher (z. B. Festplatte, SSD). Timing-Angriffe sind normalerweise ärgerlich und leicht zu bemerken, aber sie sind immer noch verfügbar. Und es scheint, dass in Zukunft neue Löcher entstehen werden. In einer anderen Diskussion stellte Chinner ein kürzlich veröffentlichtes [virtio pmem device] vor (https://lwn.net/ml/linux-kernel/[email protected]/) [^ 5] [Kommentiert] darüber, was auf die gleiche Weise missbraucht werden könnte (https://lwn.net/ml/linux-kernel/20190110012617.GA4205@dastard/). Bei io_uring-Funktionen [^ 6] würde es Angreifern leichter fallen, den Seitencache abzufragen, wenn sie in ihrer aktuellen Form zusammengeführt würden. ..

Mit anderen Worten, dieses Problem scheint zumindest im absoluten Sinne fast unlösbar. Vielleicht ist das Beste, was Sie tun können, die Schwelle hoch genug anzuheben, um die meisten Angriffe zu verhindern. Es scheint also den bekannten Mechanismus zerstörungsfreier Abfragen des Seiten-Cache-Status nur dann zu stoppen, wenn der Kernel auf "sicherer Modus" eingestellt ist. Es ist zu schwierig (oder zu teuer), sich vollständig gegen Timing-Angriffe zu verteidigen. Also, wie Linus gepostet hat, sehnt sich nach voller Sicherheit Diejenigen, die es sind, werden wie immer enttäuscht sein.

Wir werden niemals alle Seitenkanalangriffe verhindern. Einige Teile des Caching sind sehr grundlegend (insbesondere wenn es um Timing-Effekte geht). Es ist also unmöglich, eine absolute Linie auf dem Boden zu ziehen **, egal was passiert. Sie können nicht sagen, dass Sie in Schwarzweiß geschützt sind. Es gibt nur einen Unterschied in der Bequemlichkeit.

Das Blockieren des Missbrauchs bekannter Vektoren hinterlässt immer noch ein Problem, da es keine Probleme für vorhandene Userspace-Anwendungen verursacht. Wie bei Meltdown und Spectre scheint es ein Problem zu sein, das Kernel-Entwickler vorerst beschäftigt.

Ursprüngliche, primäre Informationen

Verweise

Inzwischen OpenBSD ...

Ich habe versucht, Mincore zum Lügen zu bringen. Die Art der Speicherfreigabe besteht darin, dass Sie ausspionieren können, was andere Prozesse tun. Wir wollen das nicht, also geben wir immer "Speicher befindet sich im Kern (Cache)" zurück. https://twitter.com/OpenBSD_src/status/1089658147294273536

Die HyperThreading-Funktion von Intel ist ein anfälliges Nest und OpenBSD mit HyperThreading-Funktion ** deaktiviert ** ) Allerdings muss ich sagen, dass es nur einen Steinwurf entfernt ist. Ich sehne mich danach.

[^ 1]: Ein Hardware-Interrupt (oder eine Ausnahme), der auftritt, wenn ein Programm auf eine Seite in einem virtuellen Adressraum zugreift, auf dem kein physischer Speicher zugeordnet ist.

[^ 2]: Eine Sammlung von virtuellen Speicherseiten, die zu einem bestimmten Zeitpunkt verwendet werden.

[^ 7]: Dieser Patch wurde von Linus selbst geschrieben.

[^ 8]: Insbesondere wenn sysctl_mincore_privileged aktiviert ist, wird EPERM ohne CAP_SYS_ADMIN zurückgegeben.

[^ 9]: Mit meinem eigenen Tool namens happycache speichere / stelle ich den Cache vor dem Neustart während der DB-Wartung wieder her.

[^ 5]: Pseudo-Persistenzspeicher, der von kvm verwendet wird, um den Cache von Gastseiten zu vermeiden

[^ 6]: Schnittstelle eingeführt, um die alte asynchrone E / A zu erneuern

[^ 10]: NetFlix Cloud Engineer

[^ 15]: Wenn preadv2 gleichzeitig mit dem RWF_NOWAIT-Flag verwendet wird und die Daten nicht sofort gelesen werden können (dh nicht im Cache sind), gibt es nichts zurück und kann verwendet werden, anstatt sie durch Mincore zu überprüfen. Verfügbar ab 4.14.

Recommended Posts

Die Auswirkungen von Gegenmaßnahmen gegen Linux-Seiten-Cache-Angriffe sind groß und werden voraussichtlich länger dauern. [Übersetzung]
Befehle und Dateien zum Überprüfen der Version von CentOS Linux
Ist die Lotterie rentabel? ~ LOTO7 und das Gesetz der großen Zahlen ~
[Linux] Was ist die Methode zum Lösen von Paketabhängigkeitsfehlern von yum und rpm am tatsächlichen Arbeitsplatz?
Geben Sie die Start- und Endpositionen der Dateien an, die in qiitap enthalten sein sollen