Vlastné jadro Kirisakura pre OnePlus 8 Pro umožňuje integritu Control Flow Integrity (CFI) pre lepšiu bezpečnosť

Technické podrobnosti o integrite riadiaceho toku

„Dostupnosť obrovského počtu funkčných ukazovateľov v jadre pomáha popularite tohto vzoru útoku. Aj keď útočníci nemôžu vložiť svoj vlastný spustiteľný kód, na dokončenie ich zneužitia môžu byť spustené ľubovoľné časti existujúceho kódu jadra.

LLVMCFI sa pokúša zmierniť tieto útoky obmedzením platných cieľov volania a vynútením paniky jadra pri zistení porušenia CFI. Pred každou nepriamou vetvou sa pridá kontrola, aby sa potvrdilo, že cieľová adresa ukazuje na platnú funkciu so správnym podpisom. To zabraňuje nepriamej vetve preskočiť na ľubovoľné umiestnenie kódu a dokonca obmedzuje funkcie, ktoré možno volať. Útočník bude stále môcť zmeniť ukazovateľ funkcie, ak mu chyba umožní prístup. Ale CFI LLVM obmedzuje 55 % nepriamych volaní na maximálne 5 možných cieľov a 80 % na maximálne 20 cieľov. Aby bolo možné určiť všetky platné ciele volania pre každú nepriamu vetvu, kompilátor potrebuje vidieť celý kód jadra naraz.

Využitie LTO (Optimalizácia času prepojenia

) to umožňuje. CFI LLVM vyžaduje použitie LTO, kde kompilátor vytvára bitový kód špecifický pre LLVM pre všetky C kompilačné jednotky a linker s podporou LTO používa backend LLVM na skombinovanie bitového kódu a jeho kompiláciu do natívny kód.

Doplnkom k povoleniu používania CFI dosahuje LTO lepší výkon za behu prostredníctvom analýzy celého programu a optimalizácie medzi modulmi.

ThinLTO takmer dohnal zlepšenie výkonu LTO. V režime ThinLTO, ako pri bežnom LTO, Clang po fáze kompilácie vysiela bitový kód LLVM. Bitový kód ThinLTO je rozšírený o kompaktný súhrn modulu. Počas kroku prepojenia sa načítajú iba súhrny a zlúčia sa do kombinovaného súhrnného indexu, ktorý obsahuje index umiestnení funkcií na neskorší import funkcií medzi modulmi. Potom sa vykoná rýchla a efektívna analýza celého programu na kombinovanom súhrnnom indexe. ThinLTO umožňuje viacvláknový proces prepojenia, čo vedie k skráteniu času kompilácie.

Vzhľadom na to, že CFI prerušuje vykonávanie programu pri zasiahnutí určitých tried chýb, klasifikuje sa tiež ako nástroj na vyhľadávanie chýb, ako už bolo spomenuté, keď sa používa v permisívnom režime. Povolená CFI zobrazí porušenia CFI v protokole jadra bez toho, aby vyvolala paniku jadra. Jadrá jadra 4.9 (zariadenia generácie Pixel 3) a 4.14 (zariadenia generácie Pixel 4) mali niekoľko typov funkcií nezhody vedúce k porušeniam CFI, ktoré spoločnosť Google riešila v sadách opráv dostupných na jadre/common repo.

Vzhľadom na povahu ekosystému Android sa však tieto nezhody pravdepodobne nachádzajú aj v špecifickom kóde výrobcu SoC (v tomto prípade Qualcomm) alebo OEM (OnePlus). Niekoľko porušení CFI v kóde Qualcomm odlišných od jadra 4.19 bolo opravených na jadre Kirisakura pre OnePlus 8 Pro (príklad: 1, 2, 3).

Spustenie jadra v permisívnom CFI odhalilo porušenia CFI v kóde súvisiacom aj s ovládačmi OnePlus (príslušné potvrdenia nájdete tu a tu). Jadro Kirisakura pre OnePlus 8 Pro beží s vynúteným CFI, čím chráni svojich používateľov pred týmto druhom útokov na opätovné použitie kódu."

čítaj viac

DIY nadšenec (t. j. záchranca starých PC dielov). Skanda, vášnivý používateľ Androidu od čias Eclair, tiež rád sleduje najnovšie vývojové trendy vo svete jednodoskových počítačov.