Project Zero har udviklet en metode til at udnytte sårbarheder i Linux

Linux

Udnyttelse af nul-referencer i Linux-kernen

Det blev for nylig annonceret, at forskere fra Google Project Zero-teamet har udviklet en metode til at udnytte sårbarheder i Linux-kernen forårsaget af dereferencing af NULL-pointeren.

Indtil nu har kerneproblemer relateret til NULL-pointer-dereferencing ikke fået den nødvendige opmærksomhed , da det blev anset for urealistisk at gøre sådanne problemer til angreb , der førte til privilegiumseskalering eller udførelse af ens egen kode (det er forbudt at kortlægge ikke-privilegerede processer til den nedre region af adresserummet).

Som en generel regel fører sådanne fejl til generering af oops-advarsler fra kernen, hvorefter de problematiske opgaver fuldføres, og tilstanden genoprettes uden behov for at stoppe systemet.

Den nye angrebsmetode er baseret på håndtering af "oops"-tilstande , hvilket kan resultere i en stigning i værdien af ​​referencetælleren (refcount), hvilket igen kan få tælleren til at overløbe og frigive den hukommelse, der er knyttet til refcounten.

I dette tilfælde reduceres udnyttelsen til manipulationer, der er typiske for use-after-free-angreb (der opstår en situation, hvor referencetallet for objektet bliver nul, hukommelsen frigives, men faktisk er der arbejdende links, der peger på til frigjort hukommelse).

I øjeblikket genererer Linux-kernen en oops , når den udløser en null-dereference indefra en proceskontekst, hvilket er forskelligt fra en kernelpanik. En panik opstår, når kernen bestemmer, at der ikke er nogen sikker måde at fortsætte udførelsen på, og derfor skal stoppe al udførelse. Kernen stopper dog ikke al udførelse under en oops; i stedet forsøger kernen at gendanne sig så godt den kan og fortsætter udførelsen.

Frareference af en NULL-pointer bruges her som en måde at generere "ups"-tilstanden på en kontrolleret måde. Problemet er, at det tager omkring 232 "ups"-statuskald for at nå et 32-bit genoptællingsoverløb.

Fra et praktisk synspunkt tager det cirka otte dage med kontinuerlig generering af out-of-place (OOP) tilstande at udføre et angreb ved hjælp af den foreslåede exploit. Hvis det lykkes, giver exploiten dig mulighed for at udføre din kode på kerneniveau.

NULL pointer-dereferencen brugt i udnyttelsen blev rettet i oktober, men da lignende problemer ikke er ualmindelige og tidligere blev behandlet som fejl, ikke sårbarheder, vil udviklerne tilføje generel beskyttelse til Linux-kernen for at forhindre angreb, der manipulerer genereringen af ​​"ups" ."

 I tilfælde af en opgave betyder det at kassere den eksisterende kernestak og gå direkte til make_task_dead, som kalder do_exit. Kernen vil også sende til dmesg en "crash"-log og en kernesporing, der viser hvilken tilstand kernen var i, da fejlen opstod. Dette kan virke som et mærkeligt valg, når hukommelseskorruption tydeligvis er opstået; Men hensigten er at gøre kernefejl nemmere at opdage og logge under den filosofi, at et kørende system er meget nemmere at fejlfinde end et nede.

Især indeholder Kernel 6.2 ændringer for at begrænse det maksimale antal "oops" . Efter at have nået grænsen, som som standard er sat til 10 oops (du kan ændre dette ved hjælp af parameteren oops_limit, hvis det ønskes), vil kernen starte en overgang til en "panik"-tilstand, efterfulgt af en genstart, som ikke tillader det antal iterationer, der kræves for at nulstille refcount til nul.

Det er også planlagt, at begrænsningen vil blive overført til tidligere udgivne, men stadig understøttede kernegrene, såvel som kernepakker af populære distributioner.

Endelig, hvis du er interesseret i at lære mere om dette , kan du finde detaljerne på følgende link.


Tilføj som foretrukken kilde i Google