Während Intel Shadow Stack Support seit Tiger Lake CPUs als Teil von Intels Control-Flow Enforcement Technology (CET) gibt, wird diese Sicherheitsfunktion endlich für den Linux 6.4-Kernel mit dem Mainline-Linux-Kernel aktiviert.

Linux-Ingenieure von Intel arbeiten seit langem an der Shadow-Stack-Unterstützung als Teil von CET. Der andere Teil von CET, Indirect Branch Tracking, wurde in Linux 5.18 hochgeladen.

Die Shadow-Stack-Funktionalität von Intel für Linux 6.4 ist ein Rückadressenschutz zum Schutz vor rückkehrorientierten Programmierangriffen (ROP). Die neuesten AMD-CPUs bieten auch eine Shadow-Stack-Funktionalität, die mit der Implementierung von Intel kompatibel ist.

Der langjährige Intel Linux-Ingenieur Dave Hansen reichte die x86/shstk-Pull-Anforderung am Montag für die endliche Einführung dieser Funktion. Er erklärte in dieser Nachricht:

Bitte ziehen Sie x86/shstk für 6.4. Dies ist die lang erwartete Shadow Stack-Unterstützung. Es ist seit langem das begehrteste Hardware-Sicherheitsfeature. Sowohl AMD als auch Intel haben (kompatible) Implementierungen. Es ist auf der Intel-Seite seit den CPUs der 11. Generation präsent, hatte aber ein paar Stolpersteine ​​auf dem Weg und ist etwas spät dran.

Der kniffligste Teil dieser ganzen Sache (IMNHO) war, dass Schattenstapel in einer Erlaubnis-Grauzone existieren. Ein Shadow-Stack-PTE sagt buchstäblich Write=0, aber einige Befehle _können_ darauf schreiben. Die PTEs können auch nicht schreibgeschützt sein, also können sie nicht COW’d werden. Sie sind Sonderlinge.

Die PTE-Berechtigungen Write=0,Dirty=1 bedeuten auch, dass das Dirty-Bit nicht mehr so ​​frei verwendet werden kann wie zuvor. Diese beiden Dinge zusammen führen zu einer beträchtlichen Abwanderung des PTE-Managements.

Noch ein paar Dinge, die Sie wissen sollten:

1. Es gibt eine nicht unerhebliche Menge an Kern-mm-Abwanderung. Es gibt Bestätigungen von mm-Leuten und ich hoffe, es ist keine Überraschung für Andrew. Diese fügen pte_mkwrite() ein VMA-Argument hinzu. Es gibt einen neuen Benutzer in Andrews Stapel, der repariert werden muss, bevor er mit dem mm-Baum zusammengeführt wird.
2. Es gab ein ungewöhnliches Gewirr von Kompatibilitätsproblemen im Userspace mit Shadow Stacks. Obwohl die Umstellung auf neue arch_prctl()-Werte geholfen hat, können wir uns immer noch Szenarien vorstellen, in denen dieser alte Code uns beißen könnte. Der Plan ist, zu versuchen, problematischen Apps die Verwendung von Shadow Stack zu verbieten, wenn in der Praxis etwas auftaucht. Nach diesen sollten wir natürlich Ausschau halten.
3. Dies steht im Konflikt mit dem LAM-Code, der in x86/mm kommt. Ich werde die Auflösung besprechen, wenn ich x86/mm sende.

Zum jetzigen Zeitpunkt muss Linus Torvalds noch die Shadow Stack-Unterstützung einbeziehen oder Kommentare zur Mailingliste abgeben. Wir werden sehen, ob alles in Ordnung ist, dass Linus dieses Feature für Linux 6.4 einführt, oder ob er aufgrund der obigen Kommentare Vorbehalte hat. Hoffentlich wird diese Intel/AMD-Sicherheitsfunktion zur Abwehr von ROP-Angriffen jedoch endlich zusammengeführt.