Hoewel Intel Shadow Stack-ondersteuning al bestaat sinds Tiger Lake-CPU’s als onderdeel van Intel’s Control-flow Enforcement Technology (CET), wordt deze beveiligingsfunctie eindelijk voor de Linux 6.4-kernel ingeschakeld met de standaard Linux-kernel.
Intel Linux-technici werken al lang aan de schaduwstapelondersteuning als onderdeel van CET. Het andere deel van CET, Indirect Branch Tracking, werd geupstreamd in Linux 5.18.
De schaduwstackfunctionaliteit van Intel voor Linux 6.4 is retouradresbescherming ter verdediging tegen ROP-aanvallen (Return-Oriented Programming). De nieuwste AMD-CPU’s bieden ook Shadow Stack-functionaliteit die compatibel is met de implementatie van Intel.
Dave Hansen, een ervaren Intel Linux-ingenieur, diende de x86/shstk pull-aanvraag in op maandag voor het eindelijk introduceren van deze functie. Hij legde in dat bericht uit:
Trek x86/shstk voor 6.4. Dit is de langverwachte Shadow Stack-ondersteuning. Het is de meest gewilde hardwarebeveiligingsfunctie sinds lange tijd. Zowel AMD als Intel hebben (compatibele) implementaties. Het is aanwezig aan de Intel-kant sinds de 11e generatie CPU’s, maar het had een paar struikelblokken onderweg en is een beetje laat.
Het lastigste deel van dit hele ding (IMNHO) was dat schaduwstapels bestaan in een permissie grijs gebied. Een schaduwstapel PTE zegt letterlijk Schrijven=0, maar sommige instructies _kunnen_ ernaar schrijven. De PTE’s kunnen ook niet alleen-lezen zijn, dus ze kunnen niet worden COW’d. Het zijn excentriekelingen.
De Write=0,Dirty=1 PTE-machtigingen betekenen ook dat de dirty bit niet meer zo vrij kan worden gebruikt als voorheen. Die twee dingen zorgen samen voor een behoorlijke hoeveelheid PTE-managementverloop.
Nog een paar dingen die u moet weten:
1. Er is een niet-triviale hoeveelheid core mm churn. Het heeft acks van mm-mensen en ik hoop dat het geen verrassing is voor Andrew. Deze voegen een VMA-argument toe aan pte_mkwrite(). Er is een nieuwe gebruiker in de stapel van Andrew die moet worden opgeknapt voordat deze wordt samengevoegd met de mm-structuur.
2. Er is een ongewoon gegrom van compatibiliteitsproblemen met gebruikersruimten met schaduwstapels. Hoewel de overstap naar nieuwe arch_prctl()-waarden heeft geholpen, kunnen we ons nog steeds scenario’s voorstellen waarin deze oude code ons zou kunnen bijten. Het plan is om te voorkomen dat problematische apps schaduwstapel gebruiken als er in de praktijk iets gebeurt. Die moeten we natuurlijk op onze hoede hebben.
3. Dit is in strijd met de LAM-code die in x86/mm komt. Ik zal de resolutie bespreken wanneer ik x86/mm stuur.
Op het moment van schrijven moet Linus Torvalds de Shadow Stack-ondersteuning nog binnenhalen of opmerkingen op de mailinglijst maken. We zullen zien of alles in orde is dat Linus deze functie voor Linux 6.4 binnenhaalt of dat hij bedenkingen heeft gezien de opmerkingen hierboven. Hopelijk wordt deze Intel/AMD-beveiligingsfunctie voor het afweren van ROP-aanvallen eindelijk samengevoegd.