Kirisakura prilagođeni kernel za OnePlus 8 Pro omogućuje Integritet protoka kontrole (CFI) za bolju sigurnost

Tehnički detalji o Integritetu kontrolnog toka

"Dostupnost velikog broja funkcijskih pokazivača u kernelu pomaže popularnosti ovog obrasca napada. Čak i ako napadači ne mogu ubaciti vlastiti izvršni kod, proizvoljni dijelovi postojećeg kernel koda mogu se izvršiti kako bi dovršili svoje iskorištavanje.

LLVMCFI pokušava ublažiti ove napade ograničavanjem valjanih ciljeva poziva i forsiranjem panike u jezgri pri otkrivanju kršenja CFI-ja. Provjera se dodaje prije svake neizravne grane kako bi se potvrdilo da ciljna adresa upućuje na valjanu funkciju s ispravnim potpisom. To sprječava neizravnu granu da skoči na mjesto proizvoljnog koda i čak ograničava funkcije koje se mogu pozvati. Napadač će i dalje moći promijeniti pokazivač funkcije, ako bug dopušta pristup. Ali LLVM-ov CFI ograničava 55% neizravnih poziva na najviše 5 mogućih ciljeva i 80% na najviše 20 ciljeva. Kako bi odredio sve valjane ciljeve poziva za svaku neizravnu granu, prevodilac mora vidjeti sav kod kernela odjednom.

Korištenje LTO (

Optimizacija vremena veze) to omogućuje. LLVM-ov CFI zahtijeva korištenje LTO-a, pri čemu kompajler proizvodi bit kod specifičan za LLVM za sve C jedinice kompilacije, a LTO-svjestan povezivač koristi LLVM backend za kombiniranje bitnog koda i njegovo prevođenje u izvorni kod.

Dodatno dopuštanju korištenja CFI-ja, LTO postiže bolju izvedbu kroz analizu cijelog programa i optimizaciju između modula.

ThinLTO je gotovo dostigao poboljšanje performansi LTO-a. U načinu ThinLTO, kao i kod običnog LTO-a, zveket emitira LLVM bitcode nakon faze prevođenja. Bitkod ThinLTO je proširen kompaktnim sažetkom modula. Tijekom koraka povezivanja samo se sažeci čitaju i spajaju u kombinirani indeks sažetka, koji uključuje indeks lokacija funkcija za kasniji uvoz funkcija iz više modula. Nakon toga se provodi brza i učinkovita analiza cijelog programa na kombiniranom sumarnom indeksu. ThinLTO omogućuje proces povezivanja s više niti, što rezultira smanjenim vremenom kompilacije.

Budući da CFI prekida izvršavanje programa kada se otkriju određene klase bugova, također se klasificira kao alat za pronalaženje bugova, kao što je prethodno spomenuto, kada se koristi u dopuštenom načinu rada. Permisivni CFI će prikazati kršenja CFI-ja u dnevniku kernela, bez prisiljavanja na paniku kernela. Jezgrene jezgre 4.9 (uređaji generacije 3 Pixel) i 4.14 (uređaji generacije 4 Pixel) imale su nekoliko vrsta funkcija neusklađenosti koje rezultiraju kršenjem CFI-ja, a koje je Google riješio u setovima zakrpa dostupnim na kernelu/common repos.

Međutim, zbog prirode ekosustava Androida, te se neusklađenosti vjerojatno mogu pronaći i kod proizvođača SoC-a (u ovom slučaju Qualcomm) ili OEM-a (OnePlus). Nekoliko kršenja CFI-ja u Qualcommovom kodu različitom od jezgre 4.19 popravljeno je na jezgri Kirisakura za OnePlus 8 Pro (primjer: 1, 2, 3).

Pokretanje kernela u permisivnom CFI-ju otkrilo je kršenja CFI-ja u kodu koji se odnosi i na OnePlus upravljačke programe (mogu se pronaći relevantna predanja ovdje i ovdje). Kirisakura kernel za OnePlus 8 Pro radi s nametnutim CFI-jem, štiteći svoje korisnike od ove vrste napada ponovnim korištenjem koda."

Čitaj više

DIY entuzijast (tj. spašavač starih dijelova računala). Strastveni korisnik Androida još od vremena Eclaira, Skanda također voli pratiti nedavne trendove razvoja u svijetu jednopločnog računarstva.