Ranljivost v implementaciji ASLR v Haswellu

Matej Huš

19. okt 2016 ob 18:22:12

ASLR je ena izmed pomembnih tehnologij za omejevanje škode, ki jo lahko napadalci povzročijo s prekoračitvijo predpomnilnika. Operacijski sistem namreč različne dele programov v pomnilnik nalaga naključno, tako da ni mogoče zanesljivo predvideti, kaj se v pomnilniku nahaja za koncem bloka, ki pripada nekemu programu. Na ta način s prekoračitvijo predpomnilnika ni mogoče skočiti na želeno mesto. Raziskovalci z Univerze v Kaliforniji pa so sedaj ugotovili, da imajo Intellovi procesorji iz serije Haswell ranljivost, ki omogoča poznavanje lokacije, kam sistem naloži posamezne programe.

Ranljivost tiči v delu procesorja, ki se ukvarja z napovedovanjem, po kateri poti po IF-stavku se bo koda izvedla, še preden se pogoj dejansko preveri (branch predictor), kar je nujno za učinkovito delovanje modernih cevovodov. Raziskovalci so pokazali, kako lahko izkoristijo tabelo naslovov zadnjih operacij, ki jo ima branch predictor. S primerno napisanim programom, ki povzroči kolizijo v v tabeli (BTB, branch target buffer), ki jo ima branch predictor za lastne potrebe, lahko ugotovijo ASLR.

V članku so pokazali, kako lahko napadejo Intel Core i7-4800MQ, na katerem teče Linux. Ranljivi so seveda Windows, Mac OS X in Linux, saj je težava strojna. Ena izmed rešitev za omiljenje posledic je uporaba dovolj velikega vira entropije, ki vsebuje vsaj 17 bitov - recimo Windows 8 jih že uporablja 24 bitov, zato bi moral biti načeloma odporen na novi napad.