V sklopu raziskave so se osredotočili na različne tipe ranljivosti, ki omogočajo, da napadalec z nizkimi privilegiji nastavi (posadi) škodljivo izvršilno kodo (binarna koda) na po možnosti oddaljeno lokacijo, ki jo nato zažene ranljiva aplikacija nva uporabnikovem računalniku. Našli so 520 napak oz. hroščev v 200 aplikacijah za operacijske sisteme Windows. Tovrstne ranljivosti so povezane z uveljavljenimi načini pisanja aplikacij, drugače povedano, ne gre za napako v sistemu, temveč so posledica uveljavljenih načinov pisanja aplikacij.

Koda večine aplikacij je sestavljena iz dveh delov: iz lastne kode in kode, ki je v knjižničnih datotekah (datoteke s končnico .dll). Banalno povedano, ko aplikacija potrebuje kodo v knjižnici, jo tam poišče in izvede. Knjižnice so lahko na različnih mestih trdega diska, v lastni datoteki, v sistemskih mapah in celo v tako imenovanem delovnem imeniku. Mesto tega pa je lahko dobesedno kjerkoli, tudi v strežniku nekje v spletu. Če aplikacija knjižnico najde v mapah, kjer je logično, da je, potem je vse v redu, saj se izvede prava koda. Velikokrat pa knjižnice, ki jo aplikacija zahteva, ni nikjer, aplikacija pa jo išče po vseh mestih, ki so v sistemu predpisana. Čemu to? Zaradi prihodnjega razvoja aplikacij, kadar razvijalci pričakujejo, da bo naslednja različica določeno knjižnico potrebovala, zaradi delovanja iste aplikacije v različnih operacijskih sistemih, kjer aplikacija v novejšem sistemu lahko izkoristi določeno funkcijo, v starejših pa ne, in tako naprej. Bistvo je, da ni nič narobe, če knjižnice ni, dokler tega ne more nihče izkoristiti. Težave se pojavijo takrat, ko lahko napadalec aplikacijo prepriča, da knjižnico išče nekje v internetu.

Večina znanih ranljivosti je posledica tega, da operacijski sistem Windows išče knjižnice ali izvršljive datoteke (.exe) v trenutni delovni mapi, ta pa je zaradi narave sistema lahko kjerkoli. Za uspešen napad mora biti napadalec prepričan, da ima aplikacija, ki jo napada in je ranljiva, nastavljeno delovno mapo na lokacijo v internetu, na katero lahko postavi škodljivo kodo v obliki datoteke, ki jo aplikacija išče. To na najlažji način doseže tako, da žrtvi ponudi nekaj, recimo glasbeno datoteko, dokument ali kaj podobnega, ki jo potem on klikne in odpre z aplikacijo, ki je ranljiva. Ko to stori, se delovna mapa te aplikacije nastavi na to lokacijo in ko jo uporabnik ponovno zažene, lahko pride do izvršitve škodljive kode, ne da bi se uporabnik tega zavedal oziroma dovolil.

Na spletni strani www.binaryplanting.com/ najdete tudi uporaben test, s katerim, če ga natančno izvedete, ugotovite, ali je tudi vaš računalnik občutljiv na tovrstni napad. Ali imate nameščene aplikacije, ki so ranljive? Na naša vprašanja je odgovarjal Mitja Kolšek.

Zakaj ste se odločili, da začnete raziskati varnostno problematiko, ki se drugim ni zdela zanimiva?
Med varnostnimi pregledi aplikacij za svoje stranke smo redno odkrivali tudi to vrsto ranljivosti, kar nam je dalo misliti, da je problem bolj razširjen, kot je bilo videti v varnostnih forumih. Ko smo imeli nekaj časa med plačanimi projekti, smo začeli to raziskavo in se sistematično lotili iskanja tovrstnih lukenj v znani programski opremi. Pravzaprav smo opravili precej podobno pot, kot smo jo pred desetletjem s precej znano ranljivostjo »session fixation« (podtikanje seje), ki je danes del seznama OWASP TOP 10 najpogostejših spletnih ranljivostih v delu upravljanj s sejami.

Kako hitro ste ugotovili, da je stvar vroča? Koliko opozoril ste že izdali, na katera sta najponosnejši? Ali so se podjetja, ki ste jih obvestili, vedno odzvala?
Da je stvar vroča, se je izkazalo že po kakšnih dvajsetih aplikacijah, ko je naš detektor (orodje, ki smo ga razvili za ta namen) tako rekoč pri vsaki odkril vsaj eno luknjo. Nekaj opozoril smo dali proizvajalcem programske opreme brezplačno (npr. VMwaru, Googlu, Microsoftu in Applu), nekatere druge pa smo samo obvestili o prisotnosti tovrstnih ranljivosti v njihovih izdelkih. Kot vemo, ni še nihče v našem poslu objavil raziskave, v kateri bi odkril toliko dejanskih ranljivosti, ki jih je mogoče izrabiti na daleč in ki imajo izredno resne varnostne posledice – na to smo z razlogom ponosni.

V več kot desetih letih opozarjanja na ranljivosti smo »obhodili« že skoraj vse velike proizvajalce in vsi so prej ali slej odpravili napake. Skrbi pa me vedno počasnejše odpravljanje ranljivosti, trend, ki ga sicer opažamo že nekaj časa. Za primer: ranljivosti »binary planting«, ki so zdaj že skoraj dva meseca javno objavljene, je odpravila le peščica proizvajalcev (Microsoft, na primer, v dveh ciklih popravkov ni odpravil še niti ene izmed 121, ki smo jim jih sporočili že marca). Vsi proizvajalci sicer trdijo, da močno skrbijo za varnost svojih uporabnikov, a dejanja ne kažejo tako. To je sicer razumljivo: besede so poceni, varnost vse kompleksnejših izdelkov in okolij pa je vsako leto dražja, in dokler uporabniki ne začnejo groziti z odhodom h konkurenci, kakšne prave motivacije za vlaganje v varnost niti ni. Podjetja, ki jih opozarjamo, se sicer praviloma odzovejo, vendar so se večinoma vsa naučila »varnostne diplomacije«, torej prijazne zahvale in nekaj floskul o vrhunski varnosti njihovih izdelkov ter skrbi za uporabnike.

Kaj je podtikanje binarijev in kako lahko hipotetično poteka napad?
Pri napadu »binary planting« gre za preprosto idejo, da aplikaciji, ki poskuša zagnati izvršljivo datoteko ali naložiti programsko knjižnico, na poti, kjer slednji išče, podtaknemo svojo aplikacijo ali knjižnico. Ta se nato izvede namesto tiste, ki jo je aplikacija želela, in lahko v okolju te (napadene) aplikacije izvaja sovražne aktivnosti, npr. prisluškuje uporabnikovi tipkovnici, mu ukrade denar iz elektronske banke, zlorabi njegove skrbniške privilegije za prevzem celotnega omrežja ali še kaj hujšega. Za napad je ključna uporaba delovnega imenika (current working directory), ki je v iskalni poti izvršljivih datotek in programskih knjižnic. Če napadalcu uspe delovni imenik ranljive aplikacije nastaviti na svojo mapo v skupni rabi bodisi v krajevnem omrežju ali celo v internetu, bo ta aplikacija pobrala njegovo »sovražno« izvršljivo datoteko ali programsko knjižnico iz te mape ter zagnala njeno kodo.

Osnovna oblika napada je videti tako, da napadalec, recimo po elektronski pošti, uporabnika zvabi k obisku mape v skupni rabi in odpiranju datoteke (Microsoft Office, datoteke PDF ali podobno) iz te mape. Ob dvokliku datoteke se zažene aplikacija, ki je zadolžena za ta tip datotek, in če je ranljiva, iz mape v skupni rabi pobere in zažene še kakšno programsko knjižnico ali izvršljivo datoteko.

Seveda pa resnični napadi ne bodo tako očitni. Naši varnostni strokovnjaki so že razvili obliko napada, ki od uporabnika zahteva zgolj obisk spletne strani in dva posamična klika kjerkoli na strani (torej aktivnosti, ki jih vsi vsakodnevno izvajamo). Verjamem, da bo šel razvoj še dlje in verjetno bomo prej ali slej prišli do samodejnega izvajanja kode ob obisku spletne strani, kar je za varnostne raziskovalce nekakšen »sveti gral«.

Kako lahko napadalec ranljivo aplikacijo prepriča, da išče manjkajoče datoteko na lokaciji v internetu?
Spletni brskalnik Internet Explorer in številne druge aplikacije ob kliku povezave, ki kaže na mapo v skupni rabi, odprejo to mapo v Windows Explorerju (Raziskovalcu) ne glede na to, ali je ta mapa v krajevnem omrežju ali v internetu. Pri slednjem je zanimivo predvsem to, da v nasprotju s prepričanjem mnogih skrbnikov omrežij operacijski sistem Windows samodejno omogoča dostop do map v skupni rabi v internetu tudi skozi požarne pregrade, ki blokirajo »Windows networking« oziroma t. i. protokol SMB, saj pri neuspehu s tem protokolom poskusijo še s protokolom HTTP oziroma z njegovo razširitvijo WebDAV. Drugače rečeno: kdor lahko iz omrežja brska po internetu, lahko skoraj gotovo tudi odpre internetno mapo v skupni rabi. To potrjujejo tudi dnevniki naše omenjene testne spletne strani.

So te ranljivosti le posledica uveljavljene prakse pisanja aplikacij, zahtev združljivosti s prejšnjimi različicami ali gre pri vsem tudi za posledico potrošništva, ko morajo podjetja čim pogosteje na trg pošiljati novo različice?
Menim, da gre za vrsto dejavnikov, predvsem pa za to, da varnost v ekonomiki proizvodnje programske opreme še nima pomembne vloge. Z vidika proizvajalca je varnost samo nepotreben strošek, ki ga kupec ne zazna in zanjo tudi ni pripravljen dodatno plačati; to se sicer lahko ob vedno večjih uporabnikovih težavah zaradi lukenj kmalu tudi spremeni. Danes kaže, da je mogoče prodati le funkcionalnosti, ki jih kupec vidi, razume in ki rešujejo njegove neposredne probleme. Razvijalci so v takšnih okoliščinah optimirali svoje delo: hitreje je napisati LoadLibrary(abc.dll) kot ročno sestaviti polno pot do knjižnice; lažje je preveriti prisotnost nekaterih funkcionalnosti kar s poskusom nalaganja njihovih knjižnic kot z brskanjem po registru. S funkcionalnega vidika so te možnosti enakovredne (izdelek v normalnih okoliščinah deluje enako), z varnostnega pa pomenijo razliko med varno in ranljivo kodo (ranljivosti se najbolje počutijo v nenormalnih okoliščinah).

Potrošništvu tukaj ne bi pripisoval krivde. Mislim, da smo vsi, ki želimo predvsem učinkovito opravljati svoje delo, že siti novih in novih različic s premešanimi meniji in novimi funkcijami, ki nam prihranijo nekaj sekund za ceno časa učenja in iskanja, ki teh sekund nikoli ne odtehta. Microsoftu smo uporabniki z očitnim odporom do Viste pokazali, da ne želimo vsakih nekaj let popolnoma spremeniti svojih delovnih okolij, še posebej če smo z njimi povsem zadovoljni. Z vidika proizvajalcev programske opreme pa je razumljiva potreba po stalno novih različicah – če jim ne uspe, se bodo morali začeti krčiti. V času, ko je večina pomembnih računalniških problemov »za mase« že rešenih (kdo pa potrebuje še boljši urejevalnik besedil?), je težko napisati ubijalsko aplikacijo, za katero se bodo uporabniki kar gnetli v vrsti. In ne ostane drugega kot razvijati nove in nove različice, vse večje in vse bolj kompleksne – ter vse bolj luknjaste.

Zgolj hipotetično, ali pričakujete, da bo v bodoče prišlo do kakšnega odmevnega tovrstnega napada? Pa ne kraje podatkov, temveč sesutja katerega od javnih sistemov (na primer elektrodistribucije), kar bi imelo močan odziv v javnosti?
Podtikanje binarij je samo (še) ena v vrsti ranljivosti, ki jih lahko zlonamerna programska oprema uporabi za doseganje svojih ciljev. To, da je zdaj njena razširjenost v aplikacijah Windows javno znana, bo morda spodbudilo nepridiprave, da jo bodo pogosteje uporabljali (poznajo jo že dolgo), vendar bodo, upam, tudi razvijalci pozornejši nanjo in bodo tu in tam kakšno počistili ali kakšno manj vgradili v svojo kodo. Zanimivo je, da je to vrsto ranljivosti uporabljal že črv Nimda leta 2001, letos pa tudi famozni črv Stuxnet, ki je, kot kaže, specifično ciljal pomembna produkcijska okolja s tehnologijo SCADA. Sesutja javnih infrastrukturnih sistemov so za usposobljenega in motiviranega napadalca danes možna bolj kot kdaj prej, osebno pa upam, da se to ne bo zgodilo in da se bo celotna industrija začela obnašati bolj zdravo, ker bo sicer družbena škoda v primeru tovrstnih napadov katastrofalna.

Kako se lahko uporabnik brani, razen seveda, da se zaveda ranljivosti in vse take aplikacije, če ni popravkov, izbriše iz računalnika?
Ne poznam veliko uporabnikov Windows, ki bi bili pripravljeni izbrisati pol operacijskega sistema, da bi se izognili ranljivostim podtikanja binarij v njem. Vendar resno, glede na naša zadnja odkritja in razvoj neopaznega napada (ne dvomim, da to ta trenutek razvijajo tudi resnični napadalci) lahko uporabnik ta trenutek samo delno omeji določene poti napadov. Verjetno še največ koristi prinese Microsoftov »hotfix«, ki omejuje vsaj napade s podtikanjem knjižnic, četudi ne ustavlja podtaknjenih izvršljivih datotek. Nekaj zaščite priskrbi tudi zaustavitev sistemske storitve Web Client, ki omogoča napade iz interneta, vendar to v marsikaterem okolju ni mogoče, ker je ta storitev potrebna za delovanje nekaterih aplikacij. Določene napade lahko zaustavita tudi dobro nastavljena omrežna ali osebna požarna pregrada, vendar potem ostanejo še USB-ključki, cedeji in številne druge poti napada.

Moj mikro, november 2010 | Marjan Kodelja