Jedro po meri Kirisakura za OnePlus 8 Pro omogoča Integrity Control Flow (CFI) za večjo varnost

Tehnične podrobnosti o celovitosti nadzornega toka

"Razpoložljivost ogromnega števila funkcijskih kazalcev v jedru prispeva k priljubljenosti tega vzorca napada. Tudi če napadalci ne morejo vnesti lastne izvršljive kode, se lahko izvedejo poljubni deli obstoječe kode jedra, da se dokonča njihovo izkoriščanje.

LLVMCFI poskuša omiliti te napade z omejevanjem veljavnih ciljev klicev in vsiljevanjem panike jedra, ko zazna kršitev CFI. Pred vsako posredno vejo je dodano preverjanje za potrditev, da ciljni naslov kaže na veljavno funkcijo s pravilnim podpisom. To prepreči, da bi posredna veja skočila na poljubno lokacijo kode, in celo omeji funkcije, ki jih je mogoče poklicati. Napadalec bo še vedno lahko spremenil funkcijski kazalec, če hrošč omogoča dostop. Toda CFI LLVM omejuje 55 % posrednih klicev na največ 5 možnih ciljev in 80 % na največ 20 ciljev. Da bi določil vse veljavne cilje klicev za vsako posredno vejo, mora prevajalnik videti vso kodo jedra hkrati.

Uporaba LTO (Optimizacija časa povezave

) to omogoča. CFI LLVM zahteva uporabo LTO, kjer prevajalnik izdela bitno kodo, specifično za LLVM, za vse C prevajalske enote in povezovalnik, ki podpira LTO, uporablja zaledje LLVM za združevanje bitne kode in njeno prevajanje v domača koda.

Poleg tega, da dovoljuje uporabo CFI, LTO dosega boljšo zmogljivost izvajanja z analizo celotnega programa in optimizacijo med moduli.

ThinLTO je skoraj dohitela izboljšanje zmogljivosti LTO. V načinu ThinLTO, kot pri običajnem LTO, Clang odda bitno kodo LLVM po fazi prevajanja. Bitna koda ThinLTO je razširjena s kompaktnim povzetkom modula. Med korakom povezovanja se preberejo samo povzetki in združijo v kombinirani indeks povzetka, ki vključuje indeks funkcijskih lokacij za poznejši uvoz funkcij med moduli. Nato se na kombiniranem sumarnem indeksu izvede hitra in učinkovita analiza celotnega programa. ThinLTO omogoča večniten postopek povezovanja, kar ima za posledico krajši čas prevajanja.

Ker CFI prekine izvajanje programa, ko zadene določene razrede hroščev, se prav tako uvršča med orodje za iskanje hroščev, kot je bilo že omenjeno, če se uporablja v dovoljenem načinu. Permisivni CFI bo prikazal kršitve CFI v dnevniku jedra, ne da bi povzročil paniko jedra. Jedra jedra 4.9 (naprave generacije 3 Pixel) in 4.14 (naprave generacije 4 Pixel) sta imela več tipov funkcij. neujemanja, ki so povzročila kršitve CFI, ki jih je Google obravnaval v kompletih popravkov, ki so na voljo v jedru/skupnem repos.

Vendar pa je zaradi narave ekosistema Android ta neujemanja verjetno mogoče najti tudi v specifični kodi proizvajalca SoC (v tem primeru Qualcomm) ali OEM (OnePlus). V jedru Kirisakura za OnePlus 8 Pro je bilo odpravljenih več kršitev CFI v kodi Qualcomm, ki se razlikuje od jedra 4.19 (primer: 1, 2, 3).

Zagon jedra v dovoljenem CFI je razkril kršitve CFI tudi v kodi, povezani z gonilniki OnePlus (najdete lahko ustrezne objave tukaj in tukaj). Jedro Kirisakura za OnePlus 8 Pro deluje z uveljavljenim CFI, kar uporabnike ščiti pred tovrstnimi napadi s ponovno uporabo kode."

Preberi več

DIY navdušenec (t.j. reševalec starih delov računalnika). Skanda, ki je navdušen uporabnik Androida že iz časov Eclaira, rad sledi tudi nedavnim razvojnim trendom v svetu enoploščnega računalništva.