Sunkiai ištaisomos GRUB2 spragos, leidžiančios apeiti UEFI saugų įkrovą

Buvo atskleista informacija apie 8 GRUB2 įkrovos įkrovos spragas, kurios leidžia apeiti UEFI saugaus įkrovos mechanizmą ir paleisti nepatvirtintą kodą, pavyzdžiui, įdiegti kenkėjiškas programas, veikiančias įkrovos įkrovos arba branduolio lygiu.

Prisiminkime, kad daugumoje „Linux“ paskirstymų patikrintam paleidimui UEFI saugaus įkrovos režimu naudojamas nedidelis tarpiklio sluoksnis, skaitmeniniu parašu „Microsoft“. Šis sluoksnis patvirtina GRUB2 naudodamas savo sertifikatą, kuris leidžia platinimo kūrėjams neturėti kiekvieno branduolio ir GRUB naujinimo, sertifikuotų Microsoft. GRUB2 pažeidžiamumas leidžia pasiekti savo kodo vykdymą etape po sėkmingo tarpinio patikrinimo, bet prieš įkeliant operacinę sistemą, įsiterpiant į pasitikėjimo grandinę, kai aktyvus saugaus įkrovos režimas, ir visiškai valdyti tolesnį įkrovos procesą, įskaitant įkelti kitą OS, modifikuoti operacinės sistemos komponentų sistemą ir apeiti užrakinimo apsaugą.

Kaip ir praėjusių metų „BootHole“ pažeidžiamumo atveju, įkrovos įkroviklio atnaujinimo nepakanka, kad būtų užblokuota problema, nes užpuolikas, nepriklausomai nuo naudojamos operacinės sistemos, gali naudoti įkrovos laikmeną su sena, skaitmeniniu parašu pasirašyta, pažeidžiama GRUB2 versija, kad pakenktų UEFI saugaus įkrovimo sistemai. Problema gali būti išspręsta tik atnaujinus sertifikatų panaikinimo sąrašą (dbx, UEFI Revocation List), tačiau tokiu atveju bus prarasta galimybė naudoti seną diegimo laikmeną su Linux.

Sistemose su programine įranga, kuri turi atnaujintą sertifikatų panaikinimo sąrašą, UEFI saugaus įkrovos režimu galima įkelti tik atnaujintas Linux platinimų versijas. Platintojai turės atnaujinti diegimo programas, įkrovos įkroviklius, branduolio paketus, fwupd programinę-aparatinę įrangą ir tarpinį sluoksnį, generuojant jiems naujus skaitmeninius parašus. Vartotojai turės atnaujinti diegimo vaizdus ir kitas įkrovos laikmenas, taip pat įkelti sertifikatų panaikinimo sąrašą (dbx) į UEFI programinę-aparatinę įrangą. Prieš atnaujinant dbx į UEFI, sistema išlieka pažeidžiama, nepaisant naujinimų įdiegimo OS. Pažeidžiamumų būseną galima įvertinti šiuose puslapiuose: Ubuntu, SUSE, RHEL, Debian.

Norint išspręsti problemas, kylančias platinant atšauktus sertifikatus, ateityje planuojama naudoti SBAT (UEFI Secure Boot Advanced Targeting) mechanizmą, kurio palaikymas įdiegtas GRUB2, shim ir fwupd, o nuo kitų atnaujinimų naudojamas vietoj dbxtool paketo teikiamų funkcijų. SBAT buvo sukurtas kartu su Microsoft ir apima naujų metaduomenų įtraukimą į vykdomuosius UEFI komponentų failus, įskaitant informaciją apie gamintoją, produktą, komponentą ir versiją. Nurodyti metaduomenys yra sertifikuoti skaitmeniniu parašu ir papildomai gali būti įtraukti į UEFI Secure Boot leidžiamų arba draudžiamų komponentų sąrašus. Taigi, SBAT leis manipuliuoti komponentų versijų numeriais atšaukimo metu, nereikės iš naujo generuoti saugaus įkrovos raktų ir negeneruojant naujų branduolio, shim, grub2 ir fwupd parašų.

Nustatyti pažeidžiamumai:

  • CVE-2020-14372 – Naudodamas GRUB2 komandą acpi, vietinės sistemos privilegijuotas vartotojas gali įkelti pakeistas ACPI lenteles įdėdamas SSDT (antrinę sistemos aprašo lentelę) į /boot/efi katalogą ir pakeisdamas grub.cfg nustatymus. Nors saugaus įkrovos režimas yra aktyvus, siūlomą SSDT vykdys branduolys ir jis gali būti naudojamas norint išjungti LockDown apsaugą, kuri blokuoja UEFI saugaus įkrovos apėjimo kelius. Dėl to užpuolikas gali įkelti savo branduolio modulį arba paleisti kodą per kexec mechanizmą, netikrindamas skaitmeninio parašo.
  • CVE-2020-25632 yra atminties prieiga po laisvo naudojimo, įgyvendinant komandą rmmod, kuri atsiranda, kai bandoma iškrauti bet kurį modulį, neatsižvelgiant į su juo susijusias priklausomybes. Pažeidžiamumas neatmeta galimybės sukurti išnaudojimo, dėl kurio gali būti vykdomas kodas apeinant saugaus įkrovos patvirtinimą.
  • CVE-2020-25647 Neribotas rašymas funkcijoje grub_usb_device_initialize() iškviečiamas inicijuojant USB įrenginius. Problema gali būti išnaudota prijungus specialiai paruoštą USB įrenginį, kuris gamina parametrus, kurių dydis neatitinka USB struktūroms skirto buferio dydžio. Užpuolikas gali įvykdyti kodą, kuris nėra patikrintas naudojant saugų įkrovą manipuliuodamas USB įrenginiais.
  • CVE-2020-27749 yra funkcijos grub_parser_split_cmdline() buferio perpildymas, kurį gali sukelti GRUB2 komandų eilutėje nurodant didesnius nei 1 KB kintamuosius. Dėl pažeidžiamumo kodo vykdymas leidžia apeiti saugų įkrovą.
  • CVE-2020-27779 – komanda cutmem leidžia užpuolikui pašalinti daugybę adresų iš atminties, kad būtų išvengta saugaus įkrovimo.
  • CVE-2021-3418 – „Shim_lock“ pakeitimai sukūrė papildomą vektorių, skirtą išnaudoti praėjusių metų pažeidžiamumą CVE-2020-15705. Įdiegęs sertifikatą, naudojamą pasirašyti GRUB2 sistemoje dbx, GRUB2 leido bet kurį branduolį įkelti tiesiogiai, nepatikrinus parašo.
  • CVE-2021-20225 – galimybė įrašyti neribotus duomenis, kai vykdomos komandos su labai daugybe parinkčių.
  • CVE-2021-20233 – Galimybė įrašyti duomenis už ribų dėl neteisingo buferio dydžio skaičiavimo naudojant kabutes. Skaičiuojant dydį buvo daroma prielaida, kad norint išvengti vienos kabutės, reikia trijų simbolių, o iš tikrųjų reikėjo keturių.

Šaltinis: opennet.ru

Добавить комментарий