A Control Flow Integrity műszaki adatai
"A kernelben található függvénymutatók nagy száma elősegíti ennek a támadási mintának a népszerűségét. Még akkor is, ha a támadók nem tudnak saját végrehajtható kódot fecskendezni, a meglévő kernelkód tetszőleges részei végrehajthatók kihasználásuk befejezése érdekében.
LLVMA CFI úgy próbálja enyhíteni ezeket a támadásokat, hogy korlátozza az érvényes híváscélpontokat, és kernelpánikot kényszerít ki a CFI megsértésének észlelésekor. Minden közvetett elágazás előtt egy ellenőrzés kerül hozzáadásra annak megerősítésére, hogy a célcím egy érvényes függvényre mutat, helyes aláírással. Ez megakadályozza, hogy egy közvetett ág tetszőleges kódhelyre ugorjon, és még korlátozza a meghívható függvényeket is. A támadó továbbra is módosíthatja a funkciómutatót, ha egy hiba lehetővé teszi a hozzáférést. Az LLVM CFI azonban a közvetett hívások 55%-át legfeljebb 5 lehetséges célpontra, 80%-át pedig legfeljebb 20 célpontra korlátozza. Az egyes közvetett ágak összes érvényes hívási céljának meghatározásához a fordítónak látnia kell az összes kernelkódot egyszerre.
Az LTO használata (Linkidő optimalizálása) teszi ezt lehetővé. Az LLVM CFI-je megköveteli az LTO használatát, ahol a fordító minden C-hez LLVM-specifikus bitkódot állít elő. fordítási egységeket, és egy LTO-tudatos linker az LLVM háttérprogramot használja a bitkód kombinálására és fordítására natív kód.
A CFI használatának engedélyezése mellett az LTO jobb futásidejű teljesítményt ér el a teljes program elemzésével és a modulok közötti optimalizálással.
ThinLTO majdnem utolérte az LTO-k teljesítményének javulását. ThinLTO módban, mint a normál LTO-nál, Csengés LLVM bitkódot bocsát ki a fordítási fázis után. A ThinLTO bitkódot a modul kompakt összefoglalója egészíti ki. A hivatkozási lépés során csak az összefoglalókat olvassák be, és egyesítik egy kombinált összesítő indexbe, amely tartalmazza a függvényhelyek indexét a későbbi, több moduláris függvényimportáláshoz. Ezt követően gyors és hatékony teljes programelemzés történik a kombinált összesítő indexen. A ThinLTO többszálú összekapcsolási folyamatot tesz lehetővé, ami csökkenti a fordítási időt.
Mivel a CFI bizonyos hibaosztályok elérésekor megszakítja a programvégrehajtást, a korábban említettek szerint hibakereső eszköznek minősül, ha engedélyező módban használják. A megengedő CFI megjeleníti a CFI-sértéseket a kernelnaplóban, anélkül, hogy kernelpánikba kényszerítene. A mag 4.9 (Pixel 3 generációs eszközök) és 4.14 (Pixel 4 generációs eszközök) kerneleknek több funkciótípusa volt a CFI megsértését eredményező eltérések, amelyeket a Google a kernelen/common elérhető patchsetekben orvosolt repók.
Az Android ökoszisztéma természetéből adódóan azonban ezek az eltérések valószínűleg a SoC gyártó (jelen esetben a Qualcomm) vagy az OEM (OnePlus) specifikus kódokban is megtalálhatók. A 4.19-es kerneltől eltérő Qualcomm-kódban számos CFI-sértést javítottak ki a OnePlus 8 Pro Kirisakura kernelén (példa: 1, 2, 3).
A kernel megengedő CFI-ben való futtatása CFI-sértéseket tárt fel a OnePlus-illesztőprogramokhoz kapcsolódó kódban is (a vonatkozó véglegesítések megtalálhatók itt és itt). A OnePlus 8 Pro-hoz készült Kirisakura kernel CFI-vel fut, megvédve a felhasználókat az ilyen típusú kód-újrahasználati támadásoktól."
Olvass tovább
Barkácsolás-rajongó (vagyis a régi PC-alkatrészek megmentője). Az Eclair idők óta lelkes Android-felhasználó Skanda az egykártyás számítástechnika világának legújabb fejlesztési trendjeit is szívesen követi.