Vanja Švajcer - Kompleksne su stvari složene

Ranjivosti u Intelovim procesorima posljedica su nemogućnosti razumijevanja okruženja u kojem živimo

Vanja Švajcer četvrtak, 1. veljače 2018. u 00:00
Vanja Švajcer
Vanja Švajcer

Kad su se krajem devetnaestog stoljeća pojavili prvi motori s unutarnjim sagorijevanjem reakcija javnosti bila je prilično suzdržana. Smatralo se da su takvi složeni i skupi uređaji iskoristivi samo u vojne svrhe, i većina ljudi nije slutila da će gotovo svaka obitelj posjedovati jedan takav motor za samo nekoliko desetaka godina.

Kako su godine odmicale, princip rada motora s unutarnjim sagorijevanjem pokazao se lako razumljivim u odnosu na novije tehnologije, poput elektroničkih i poluvodičkih sklopova. Motore i automobile počeli su polako popravljati mehaničari koji nisu imali znanja potrebna za stjecanje doktorata, a danas se Otto motori relativno lako mogu objasniti i starijim osnovnoškolcima.

U svakodnevici i nije previše bitno kakav motor imamo u automobilu. Kad vozimo, kao korisnici automobila koristimo automobilsko sučelje i nije nam bitno što se događa pod poklopcem motora, dok god se vozilo ponaša prema očekivanjima, odnosno specifikacijama sučelja.

Pritisnemo li tako papučicu gasa, ili kako god se ona danas zove, vozilo mora ubrzavati, a pritisnemo li kočnicu, vozilo mora usporiti. Okrećemo li volan, vozilo će se kretati ulijevo ili udesno, pritisnemo li papučicu kvačila, moći ćemo promijeniti brzinu itd. Interni detalji rada motora, mjenjača, prijenosa snage, kočničkog i ostalih sustava za korisnika (vozača) potpuno su nebitni, dokle god se vozilo ponaša onako kako očekujemo.

Sučelja su te apstrakcije koje nam pomažu da prihvatimo i koristimo koncepte koji su u implementaciji na najnižoj razini previše složeni i imaju previše detalja da bismo ih u potpunosti razumjeli..

Nama najbliži primjer su računala, čije osnovne dijelove, s visoke razine apstrakcije, ne razvija više isti tim, pa niti ista kompanija. Umjesto da postanu jednostavnije, komponente su, kako bi se poboljšale njihova performanse i smanjile cijene, s godinama postajale sve kompleksnije.

Baš kao i kod automobila, računalni korisnici ne moraju znati kako se električni signali pretvaraju u binarne brojeve i kako oni upravljaju radom komponenata i njihovom međusobnom interakcijom, sve dok znaju kako se za uključivanje računala treba pritisnuti tipka Power, za početak korištenja upisati korisničko ime i lozinka, za otvaranje programa dvokliknuti na pripadajuću ikonu itd.

Povećanje složenosti hardverskih komponenata omogućilo je i povećanu složenost softvera. Tu je, naravno, i ogromna raspoloživa količina podataka rastuće složenosti, koja je dalje potakla razvoj i praktičnu primjenu poznatih tehnologija, kao što su umjetna inteligencija. Strojno učenje još je jedan dobar primjer koji pokazuje da ne moramo nužno razumjeti svu složenost implementacije da bismo ga mogli uspješno koristiti.

Baš kao i automobili, i računala za svoje korisnike, i procesori imaju svoje sučelje sa svojim ulaznim i izlaznim parametrima. Njihovi korisnici su programeri. S programerske strane, ulazni parametri su asemblerske instrukcije koje na procesorima iste arhitekture, s manjim varijacijama, garantiraju isti rezultat instrukcije u registrima koji su programerima i dostupni.

Skloni smo razmišljati da procesori izvršavaju asemblerski kôd i zaboravljamo da zapravo izvršavaju mikrokôd u kojem se asemblerska instrukcija dijeli na određeni broj internih procesorskih instrukcija. Svaki procesor izvršava asemblerske instrukcije na svoj način, kako bi iskoristio prednosti određene interne arhitekture.

I dok je asemblerski kôd uz dosta muke razumljiv, ono što se zaista događa nakon što se naš izvorni kôd prevede u strojni jezik i način kako procesori zaista izvršavaju asemblerske naredbe nije nam dostupno.

Sve u svemu, u današnjem računalstvu, a i općenito u tehnologiji, stvari su vrlo kompleksne, a sučelja su nas naučila da ne moramo poznavati sve pojedinosti. Nažalost, to dovodi i do negativnih pojava, a to je da naviknuti samo na poznavanje sučelja, ne razumijemo dovoljno dobro posljedice korištenja nekih tehnologija. Tako svi kupuju kriptovalute, iako su one daleko od jedine primjene blockchaina. Tako samo rijetki razmišljaju o sigurnosnim posljedicama sve složenijih interakcija među složenim komponentama i složenim sustavima.

Naravno, tu i tamo nađe se neki iznimno nadareni mladac ili dva, koji se iz ovog ili onog razloga zainteresiraju za nešto što je ranije bilo jedva razmatrano, baš kao što se početkom godine to dogodilo s ranjivostima koje su otkrili genijalci iz Google Project Zeroa, a istovremeno i dva druga istraživačka tima.

Meltdown i Spectre ranjivosti su u tzv. spekulativnom izvršavanju kôda, samo jednoj od metoda optimizacije izvršavanja instrukcija na procesorima. Tehničke pojedinosti ove ranjivosti premašuju razinu skromne tehničke razine vašeg kolumnista, ali su dobar pokazatelj problematike koju donosi konstantno povećavanje složenosti okruženja u kojem živimo.

Vjerojatno već znate, ove ranjivosti otkrivene u procesorima omogućuju potencijalnim napadačima čitanje memorijskih područja koji inače ne bi trebali biti dostupni običnim korisničkim procesima, poput jezgrene memorije ili memorije drugih virtualnih računala u cloudu, što je posebno opasna posljedica.

Isprva se mislilo kako su pogođeni samo Intelovi procesori, ali se pokazalo da slične probleme imaju i Appleovi, AMD-ovi, kao i procesori ARM arhitekture. Uzdah olakšanja Intelovih managera kad su saznali da slične probleme imaju i ostali proizvođači procesora, čuo se iz Silicijske doline sve do Hrvatske.

Spekulativno izvršavanje kôda postoji već dvadesetak godina pa se postavlja pitanje kako to da ti problemi nisu otkriveni ranije, pogotovo kad ih je istovremeno otkrilo više grupa istraživača računalne sigurnosti. Mislim da nitko nema dobar odgovor na to pitanje, jednostavno se ponekad stvore uvjeti za to, nešto je divlje u zraku. Ono što danas izgleda kompleksno, samo nekoliko godina u budućnosti izgledat će nam jednostavno i samorazumljivo. Ako smo mi dosegli svoj limit, to ne znači da ga neće probiti buduće generacije. Ne bismo mi bili ljudi da to nije tako.

NAPOMENA: Ovaj tekst je izvorno objavljen u časopisu Mreža.