Tehnilised üksikasjad juhtimisvoo terviklikkuse kohta
"Tohutu hulga funktsiooniosutajate olemasolu tuumas aitab kaasa selle ründemustri populaarsusele. Isegi kui ründajad ei saa oma käivitatavat koodi sisestada, saab nende ärakasutamise lõpuleviimiseks käivitada olemasoleva kerneli koodi suvalised osad.
LLVMCFI püüab neid rünnakuid leevendada, piirates kehtivaid kõne sihtmärke ja sundides kerneli paanikat CFI rikkumise tuvastamisel. Iga kaudse haru ette lisatakse kontroll, mis kinnitab, et sihtaadress osutab õigele ja õige allkirjaga funktsioonile. See hoiab ära kaudse haru hüppamise suvalisesse koodi asukohta ja piirab isegi kutsutavaid funktsioone. Ründaja saab siiski funktsioonikursorit muuta, kui viga võimaldab juurdepääsu. Kuid LLVM-i CFI piirab 55% kaudsetest kõnedest kuni 5 võimaliku sihtmärgini ja 80% maksimaalselt 20 sihtmärgini. Iga kaudse haru kõigi kehtivate kõne sihtmärkide kindlaksmääramiseks peab kompilaator nägema kogu kerneli koodi korraga.
LTO kasutamine (Linki aja optimeerimine
) teeb selle võimalikuks. LLVM-i CFI nõuab LTO kasutamist, kus kompilaator toodab LLVM-spetsiifilise bitkoodi kõigi C-de jaoks kompileerimisüksused ja LTO-teadlik linker kasutab LLVM-i taustaprogrammi, et ühendada bitkood ja see kompileerida kohalik kood.Lisaks CFI kasutamise lubamisele saavutab LTO kogu programmi analüüsi ja moodulitevahelise optimeerimise kaudu parema käitusaja jõudluse.
ThinLTO on LTO-de jõudluse paranemisele peaaegu järele jõudnud. ThinLTO režiimis, nagu tavalise LTO puhul, Kõlisema väljastab pärast kompileerimisfaasi LLVM-bitkoodi. ThinLTO bitikood on täiendatud mooduli kompaktse kokkuvõttega. Linkimisetapi ajal loetakse ainult kokkuvõtteid ja liidetakse need kombineeritud kokkuvõtlikuks indeksiks, mis sisaldab funktsioonide asukohtade indeksit hilisemaks mooduliüleseks funktsioonide importimiseks. Seejärel tehakse kombineeritud koondindeksi põhjal kiire ja tõhus kogu programmi analüüs. ThinLTO võimaldab mitme lõimega linkimisprotsessi, mille tulemuseks on lühendatud kompileerimisaeg.
Kuna CFI katkestab programmi täitmise teatud veaklasside tabamisel, klassifitseeritakse see lubavas režiimis kasutamisel ka veaotsingu tööriistaks, nagu eelnevalt mainitud. Lubav CFI näitab CFI rikkumisi kerneli logis ilma kerneli paanikat tekitamata. 4.9 (Pixel 3 põlvkonna seadmed) ja 4.14 (Pixel 4 põlvkonna seadmed) tuumadel oli mitu funktsiooni tüüpi ebakõlad, mis põhjustasid CFI rikkumisi, mille Google lahendas kernelis/common saadaolevates paigakomplektides repod.
Kuid Androidi ökosüsteemi olemuse tõttu võib neid ebakõlasid leida ka SoC-tootja (antud juhul Qualcomm) või OEM-i (OnePlus) spetsiifilisest koodist. OnePlus 8 Pro Kirisakura tuumas parandati mitu CFI rikkumist Qualcommi koodis, mis erinevad 4.19 tuumast (näide: 1, 2, 3).
Kerneli käitamine lubavas CFI-s avastas CFI rikkumisi ka OnePlusi draiveritega seotud koodis (asjakohased kohustused leiate siin ja siin). OnePlus 8 Pro jaoks mõeldud Kirisakura kernel töötab CFI-ga, kaitstes selle kasutajaid seda tüüpi koodi taaskasutamise rünnakute eest.
Loe rohkem
DIY entusiast (st vanade arvutiosade päästja). Skanda, kes on innukas Androidi kasutaja Eclairi päevist saati, meeldib jälgida ka viimase aja arengutrende ühe tahvliarvutite maailmas.