Nulles atsauču izmantošana Linux kodolā
Nesen tika paziņots, ka Google Project Zero komandas pētnieki ir izstrādājuši metodi , kā izmantot Linux kodola ievainojamības, ko izraisa NULL rādītāja dereferencēšana.
Līdz šim kodola problēmām, kas saistītas ar NULL rādītāja atsauču atcelšanu, netika pievērsta pienācīga uzmanība , jo tika uzskatīts par nereālu pārvērst šādas problēmas uzbrukumos, kas noved pie privilēģiju eskalācijas vai sava koda izpildes (neprivileģētu procesu kartēšana uz adreses telpas zemāko reģionu ir aizliegta).
Parasti šādas kļūdas noved pie tā, ka kodols ģenerē brīdinājumus par avāriju , pēc kuriem problemātiskie uzdevumi tiek pabeigti un stāvoklis tiek atjaunots bez nepieciešamības apturēt sistēmu.
Jaunā uzbrukuma metode ir balstīta uz "oops" stāvokļu apstrādi , kas var izraisīt atsauces skaitītāja (recount) vērtības palielināšanos, kas savukārt var izraisīt skaitītāja pārpildīšanu un atbrīvot ar recount saistīto atmiņu.
Šajā gadījumā ekspluatācija tiek reducēta uz manipulācijām, kas raksturīgas izmantošanas pēc brīvā laika uzbrukumiem (rodas situācija, kad objekta atskaites skaits kļūst nulle, atmiņa tiek atbrīvota, bet faktiski ir darba saites, kas norāda uz atbrīvoto atmiņu).
Pašlaik, kad Linux kodols procesa kontekstā izraisa nulles atsauces kļūmi, tas ģenerē kļūmi “oops” , kas atšķiras no kodola panikas. Panika rodas, ja kodols nosaka, ka nav droša veida, kā turpināt izpildi, un tāpēc tam ir jāpārtrauc visa izpilde. Tomēr kodols “oops” kļūmes laikā neaptur visu izpildi; tā vietā kodols mēģina atgūties, cik vien labi iespējams, un turpina izpildi.
Atsauces uz NULL rādītāju atcelšana šeit tiek izmantota kā veids, kā kontrolētā veidā ģenerēt stāvokli "Hmm". Problēma ir tā, ka ir nepieciešami aptuveni 232 statusa izsaukumi "ups", lai sasniegtu 32 bitu pārskaitīšanas pārpildīšanu.
No praktiskā viedokļa, lai veiktu uzbrukumu, izmantojot ierosināto izmantošanu, nepieciešamas aptuveni astoņas dienas nepārtrauktas ārpusvietas (OOP) stāvokļu ģenerēšanas . Ja izmantošana ir veiksmīga, tā ļauj izpildīt kodu kodola līmenī.
Ekspluatācijā izmantotā NULL rādītāja norāde tika novērsta oktobrī, taču, tā kā līdzīgas problēmas nav nekas neparasts un iepriekš tika uzskatītas par kļūdām, nevis ievainojamību, izstrādātāji pievienos Linux kodolam vispārēju aizsardzību, lai novērstu uzbrukumus, kas manipulē ar "oops" ģenerēšanu. ”.
Uzdevuma gadījumā tas nozīmē, ka ir jāatmet esošā kodola steka un jādodas tieši uz make_task_dead, kas izsauc do_exit. Kodols arī ievietos dmesg "avārijas" žurnālu un kodola izsekošanu, kas parāda, kādā stāvoklī kodols bija kļūdas rašanās brīdī. Tā var šķist dīvaina izvēle, ja ir skaidri notikusi atmiņas bojājums; tomēr mērķis ir atvieglot kodola kļūdu atklāšanu un reģistrāciju saskaņā ar filozofiju, ka darbojošos sistēmu ir daudz vieglāk atkļūdot nekā nederīgu.
Jo īpaši kodola 6.2 versijā ir iekļautas izmaiņas, lai ierobežotu maksimālo "oops" skaitu . Pēc ierobežojuma sasniegšanas, kas pēc noklusējuma ir iestatīts uz 10 000 oops (to var mainīt, izmantojot parametru oops_limit, ja nepieciešams), kodols iniciēs pāreju uz "panikas" stāvokli, kam sekos pārstartēšana, kas neļaus veikt iterāciju skaitu, kas nepieciešams, lai atiestatītu recount uz nulli.
Tāpat plānots, ka ierobežojums tiks pārcelts uz iepriekš izlaistajiem, bet joprojām atbalstītajiem kodola zariem, kā arī populāro distribūciju kodola pakotnēm.
Visbeidzot, ja vēlaties uzzināt vairāk par šo tēmu , sīkāku informāciju varat atrast, izmantojot šo saiti.