Tehniskā informācija par kontroles plūsmas integritāti
"Lielā daudzuma funkciju rādītāju pieejamība kodolā veicina šī uzbrukuma modeļa popularitāti. Pat ja uzbrucēji nevar ievadīt savu izpildāmo kodu, var tikt izpildītas patvaļīgas esošā kodola koda daļas, lai pabeigtu to izmantošanu.
LLVMCFI mēģina mazināt šos uzbrukumus, ierobežojot derīgus zvanu mērķus un piespiežot kodola paniku, atklājot CFI pārkāpumu. Pirms katras netiešās filiāles tiek pievienota pārbaude, lai apstiprinātu, ka mērķa adrese norāda uz derīgu funkciju ar pareizu parakstu. Tas neļauj netiešai filiālei pāriet uz patvaļīgu koda atrašanās vietu un pat ierobežo funkcijas, kuras var izsaukt. Ja kļūda atļauj piekļuvi, uzbrucējs joprojām varēs mainīt funkcijas rādītāju. Taču LLVM CFI ierobežo 55% netiešo zvanu ne vairāk kā 5 iespējamiem mērķiem un 80% - ne vairāk kā 20 mērķus. Lai noteiktu visus derīgos izsaukuma mērķus katrai netiešajai filiālei, kompilatoram vienlaikus ir jāredz viss kodola kods.
LTO izmantošana (Saites laika optimizācija
) padara to iespējamu. LLVM CFI pieprasa izmantot LTO, kur kompilators rada LLVM specifisku bitkodu visiem C kompilācijas vienības, un LTO zinošs linkeris izmanto LLVM aizmugursistēmu, lai apvienotu bitkodu un kompilētu to vietējais kods.Papildus CFI izmantošanas atļaušanai LTO nodrošina labāku izpildlaika veiktspēju, izmantojot visas programmas analīzi un vairāku moduļu optimizāciju.
ThinLTO ir gandrīz panākusi LTO veiktspējas uzlabošanos. ThinLTO režīmā, tāpat kā parastajā LTO, zvana pēc kompilēšanas fāzes izstaro LLVM bitkodu. ThinLTO bitkods ir papildināts ar kompaktu moduļa kopsavilkumu. Saites darbības laikā tiek nolasīti tikai kopsavilkumi un apvienoti apvienotā kopsavilkuma indeksā, kas ietver funkciju atrašanās vietu indeksu vēlākai vairāku moduļu funkciju importēšanai. Pēc tam kombinētajam kopsavilkuma indeksam tiek veikta ātra un efektīva visas programmas analīze. ThinLTO nodrošina vairāku vītņu saistīšanas procesu, kā rezultātā tiek samazināts kompilācijas laiks.
Tā kā CFI pārtrauc programmas izpildi, kad tiek sasniegtas noteiktas kļūdu klases, tas tiek klasificēts arī kā kļūdu meklēšanas rīks, kā minēts iepriekš, ja tiek izmantots atļaujošā režīmā. Atļaujošais CFI parāda CFI pārkāpumus kodola žurnālā, neradot kodola paniku. Kodoliem 4.9 (Pixel 3 paaudzes ierīcēm) un 4.14 (Pixel 4 paaudzes ierīcēm) bija vairāki funkciju veidi neatbilstības, kuru rezultātā radās CFI pārkāpumi, kurus Google novērsa kodolā/kopējā pieejamās ielāpu kopās repo.
Tomēr Android ekosistēmas rakstura dēļ šīs neatbilstības, visticamāk, būs atrodamas arī SoC ražotāja (šajā gadījumā Qualcomm) vai OEM (OnePlus) specifiskajā kodā. Vairāki CFI pārkāpumi Qualcomm kodā, kas atšķiras no 4.19 kodola, tika novērsti Kirisakura kodolā OnePlus 8 Pro (piemērs: 1, 2, 3).
Kodola palaišana atļaujā CFI atklāja CFI pārkāpumus kodā, kas saistīts arī ar OnePlus draiveriem (var atrast attiecīgās saistības šeit un šeit). OnePlus 8 Pro Kirisakura kodols darbojas ar CFI, aizsargājot savus lietotājus pret šāda veida koda atkārtotas izmantošanas uzbrukumiem.
Lasīt vairāk
DIY entuziasts (t.i., veco datoru detaļu glābējs). Skanda, dedzīga Android lietotāja kopš Eclair laikiem, arī labprāt seko jaunākajām attīstības tendencēm vienas plates skaitļošanas pasaulē.