Kernel-ul personalizat Kirisakura pentru OnePlus 8 Pro permite Control Flow Integrity (CFI) pentru o mai bună securitate

Detalii tehnice despre Control Flow Integrity

„Disponibilitatea unui număr mare de indicatori de funcție în nucleu ajută la popularitatea acestui tipar de atac. Chiar dacă atacatorii nu pot injecta propriul cod executabil, părți arbitrare ale codului kernel-ului existent pot fi executate pentru a-și finaliza exploitul.

LLVMCFI-ul lui încearcă să atenueze aceste atacuri prin restricționarea țintelor de apel valide și forțând o panică a nucleului atunci când detectează o încălcare a CFI. O verificare este adăugată înainte de fiecare ramură indirectă pentru a confirma că adresa țintă indică o funcție validă cu o semnătură corectă. Acest lucru împiedică o ramură indirectă să sară la o locație de cod arbitrară și chiar limitează funcțiile care pot fi apelate. Un atacator va putea în continuare să schimbe un indicator de funcție, dacă o eroare permite accesul. Dar CFI al LLVM limitează 55% din apelurile indirecte la cel mult 5 ținte posibile și 80% la cel mult 20 de ținte. Pentru a determina toate țintele de apel valide pentru fiecare ramură indirectă, compilatorul trebuie să vadă tot codul de nucleu simultan.

Utilizarea LTO (Optimizarea timpului de conectare) face posibil acest lucru. CFI-ul LLVM necesită utilizarea LTO, unde compilatorul produce cod de biți specific LLVM pentru toate C unități de compilare, iar un linker compatibil cu LTO utilizează backend-ul LLVM pentru a combina codul de biți și a-l compila în cod nativ.

Suplimentar pentru a permite utilizarea CFI, LTO realizează performanțe de rulare mai bune prin analiza întregului program și optimizarea între module.

ThinLTO aproape a ajuns din urmă cu îmbunătățirea performanței LTO. În modul ThinLTO, ca și în cazul LTO obișnuit, Zăngăni emite cod de biți LLVM după faza de compilare. Codul de biți ThinLTO este mărit cu un rezumat compact al modulului. În timpul pasului de conectare, numai rezumatele sunt citite și îmbinate într-un index rezumat combinat, care include un index al locațiilor funcțiilor pentru importarea ulterioară a funcțiilor între module. Ulterior, se efectuează o analiză rapidă și eficientă a întregului program pe indexul rezumat combinat. ThinLTO permite un proces de conectare multi-threaded, care are ca rezultat reducerea timpului de compilare.

Datorită faptului că CFI întrerupe execuția programului la atingerea anumitor clase de erori, acesta se clasifică și ca instrument de găsire a erorilor, așa cum sa menționat anterior, atunci când este utilizat în modul permisiv. CFI permisiv va arăta încălcările CFI în jurnalul nucleului, fără a forța panica nucleului. Nucleele de bază 4.9 (dispozitive din generația Pixel 3) și 4.14 (dispozitive din generația Pixel 4) au avut mai multe tipuri de funcție nepotriviri care au dus la încălcări ale CFI, care au fost abordate de Google în seturi de patch-uri disponibile pe kernel/comun repos.

Cu toate acestea, din cauza naturii ecosistemului Android, este posibil ca aceste nepotriviri să fie găsite și în codul specific producătorului SoC (în acest caz, Qualcomm) sau OEM (OnePlus). Mai multe încălcări CFI în codul Qualcomm distinct de nucleul 4.19 au fost remediate pe nucleul Kirisakura pentru OnePlus 8 Pro (exemplu: 1, 2, 3).

Rularea nucleului în CFI permisiv a dezvăluit încălcări CFI în codul legat și de driverele OnePlus (comiterile relevante pot fi găsite Aici și Aici). Kernel-ul Kirisakura pentru OnePlus 8 Pro rulează cu CFI aplicat, protejându-și utilizatorii împotriva acestui tip de atacuri de reutilizare a codului.”

citeşte mai mult

Pasionat de bricolaj (adică salvator de piese vechi de PC). Utilizator avid al Android încă din zilele Eclair, lui Skanda îi place, de asemenea, să urmărească tendințele recente de dezvoltare din lumea computerelor cu o singură placă.