Project Zero har utvecklat en metod för att utnyttja sårbarheter i Linux

Linux

Utnyttjande av nollreferenser i Linux-kärnan

Det tillkännagavs nyligen att forskare från Google Project Zero-teamet har utvecklat en metod för att utnyttja sårbarheter i Linuxkärnan orsakade av avreferensering av NULL-pekaren.

Hittills har kärnproblem relaterade till dereferering av NULL-pekare inte fått tillräcklig uppmärksamhet , eftersom det ansågs orealistiskt att förvandla sådana problem till attacker som skulle leda till privilegieeskalering eller exekvering av ens egen kod (det är förbjudet att mappa oprivilegierade processer till den nedre delen av adressrymden).

Som en allmän regel leder sådana fel till att kärnan genererar oops-varningar , varefter de problematiska uppgifterna slutförs och tillståndet återställs utan att systemet behöver stoppas.

Den nya attackmetoden är baserad på hanteringen av "oops"-tillstånd , vilket kan resultera i en ökning av referensräknarens (refcount) värde, vilket i sin tur kan orsaka att räknaren överfylls och frigör minnet som är associerat med refcounten.

I det här fallet reduceras utnyttjandet till manipulationer som är typiska för attacker utan användning (en situation uppstår där referenstalet för objektet blir noll, minnet frigörs, men i själva verket finns det fungerande länkar som pekar på till frigjort minne).

För närvarande, när Linuxkärnan utlöser en null-dereferens inifrån en processkontext, genererar den en oops , vilket skiljer sig från en kernel panic. En panik inträffar när kärnan bestämmer att det inte finns något säkert sätt att fortsätta körningen och därför måste avbryta all körning. Kärnan stoppar dock inte all körning under en oops; istället försöker kärnan återhämta sig så gott den kan och fortsätter körningen.

Avreferensering av en NULL-pekare används här som ett sätt att generera "oops"-tillståndet på ett kontrollerat sätt. Problemet är att det tar cirka 232 "oops"-statusanrop för att nå ett 32-bitars återräkningsspill.

Ur en praktisk synvinkel tar det ungefär åtta dagar av kontinuerlig generering av out-of-place-tillstånd (OOP) för att utföra en attack med den föreslagna exploiten. Om den lyckas tillåter exploiten dig att exekvera din kod på kärnnivå.

NULL-pekarens referens som användes i exploateringen fixades i oktober, men eftersom liknande problem inte är ovanliga och tidigare behandlats som buggar, inte sårbarheter, kommer utvecklarna att lägga till allmänt skydd till Linux-kärnan för att förhindra attacker som manipulerar genereringen av "oops ."

 I fallet med en uppgift betyder det att man kasserar den befintliga kärnstacken och går direkt till make_task_dead som anropar do_exit. Kärnan kommer också att skicka till dmesg en "krasch"-logg och en kärnspårning som visar vilket tillstånd kärnan var i när felet inträffade. Detta kan verka som ett udda val när minneskorruption uppenbarligen har inträffat; men avsikten är att göra kärnbuggar lättare att upptäcka och logga under filosofin att ett körande system är mycket lättare att felsöka än ett nedåtgående.

I synnerhet inkluderar Kernel 6.2 ändringar för att begränsa det maximala antalet "oops" . Efter att ha nått gränsen, som är satt till 10 000 oops som standard (du kan ändra detta med parametern oops_limit om så önskas), kommer kärnan att initiera en övergång till ett "panikläge", följt av en omstart, vilket inte tillåter det antal iterationer som krävs för att återställa refcount till noll.

Det är också planerat att begränsningen kommer att överföras till tidigare släppta, men fortfarande stödda kärngrenar, såväl som kärnpaket av populära distributioner.

Slutligen, om du är intresserad av att lära dig mer om detta , kan du hitta detaljerna på följande länk.


Lägg till som prioriterad källa i Google