April 1, 1997

Kuri mĂŒstiline viirus

Algajate arvutikasutajate seas vĂ”ib tihti kohata mĂŒĂŒti viirusest kui millestki mĂ”istuslikult pĂ”hjendamatust, mingist apokalĂŒptilisest fluidumist, mis ei allu fĂŒĂŒsika ega loogika seadustele. Sellisest suhtumisest on nakatunud paljud erialaspetsidki, kuigi nad seda endale ise mitte mingi hinna eest tunnistada ei taha. Õnneks teab siiski iga programmist, kes arvuti madalama taseme hingeeluga veidikenegi tuttav, et viirus on tĂ€iesti harilik programmijupp, mis erinevalt tavalisest programmist kirjutatud nii, et ta end ise levitaks.

Kuidas siis kĂ”lab viiruse definitsioon? Paljud defineerivad ta parasiitprogrammina mis on kirjutatud tahtlikult sisenema kasutaja teadmata vĂ”i nĂ”usolekuta tema arvutisse. Sellele definitsioonile vastavaid viirusi on mitmeid liike. Suurimad viiruste alajotused oleks ilmselt alglaadimissektoriviirused ja programmifaile nakatavad viirused. Neid iseloomustavad omakorda veel viiruse residentsus, vĂ”ime end krĂŒpteerida, polĂŒmorfsus ja tegevuse varjatus (stealth). Viirus vĂ”ib vastata ka kĂ”igile neile iseloomujoontele korraga, sellisel juhul on tegemist vĂ€ga kavala ja elujĂ”ulise isendiga. Sellest tulenevalt saab viirusi veel liigitada nende elujĂ”ulisuse jĂ€rgi ja ka nende aktiveerumisrutiinide jĂ€rgi. Arvutikasutaja slĂ€ngis on elujĂ”ulisuse mĂ€rkimiseks vĂ€ga tabavad metafoorid: kui viirus on kasutajate seas ĂŒldlevinud, siis nimetatakse teda metsikuks, kui aga viirus on vaid korra kuskilt leitud, kahjutuks tehtud ning informatsioon tema kohta mĂ”nda viirusetĂ”rjeprogrammi kaasatud, siis kutsutakse teda kodustatud viiruseks.

Aktiveerumisrutiinide jĂ€rgi liigitatakse viirusi ohututeks (tegelikult on kĂ”ik viirused ohtlikud, aga see on lihtsalt tinglik nimetus, mis tĂ€hendab sisuliselt mittedestruktiivsust) ja destruktiivseteks. Ohutu viiruse sĂŒmptomiks on harilikult mingi tobe teade, pilt, meloodia vĂ”i mis iganes — peaasi, et see kasutajale silma torkaks, et see teda hĂ€iriks. MĂ”ned ohutud viirused teevad arvuti kasutamise lausa vĂ”imatuks, nĂ€iteks ajavad klaviatuuri laotuse segamini. On levinud ka mĂŒĂŒdid isendeist, mis arvuti riistvara hĂ€vitavad, kuid need töötavad reeglina vaid teoreetiliselt ja on vĂ€ga harvaesinevad. Destruktiivsed viirused aga hĂ€vitavad vĂ”i ka krĂŒpteerivad kettal olevat informatsiooni, mistĂ”ttu on viimased pelgalt levivatest viirustest mĂ€rksa ohtlikumad. Lohutuseks vĂ”ib öelda, et ohutute viiruste osakaal viiruste hulgas on mĂ€rksa suurem kui destruktiivsete viiruste oma, nii et juhuslikult mĂ”ne elektroonilise eluvormiga kokku puutudes on tĂ”enĂ€osus, et tegemist on ohutu isendiga, kĂŒllaltki suur. Selle peale ei saa aga loomulikult kindel olla — isegi Murphy seadus teab öelda, et teoreetiliselt kĂ”ige ebatĂ”enĂ€olisema sĂŒndmuse tĂ”enĂ€osus on tegelikult praktikas kĂ”ige suurem.

Omaette viiruste klass on mitmesuguste kasutajaliideste makrode kaudu levivad viirused. Need viirused levivad ainult vastavate liideste salvestiste kaudu ja kasutavad selleks rakenduse sisemisi kĂ€ske, mistĂ”ttu pole nad alati nii elujĂ”ulised kui teised viirused, kuigi mĂ”nedes situatsioonides on nad siiski ÀÀrmiselt ratsionaalsed: tegevusalal, mis nĂ”uab pidevalt dokumentide ĂŒlekandmist ĂŒhest arvutist teise (nĂ€iteks ajakirjanduses), on makroviirustel vĂ€ga helge pĂ”li. Samas on makroviirused ka praktiliselt ainukesed, mis suudavad levida erinevate operatsioonisĂŒsteemide vahel: Parim rohi nende vastu on arvatavasti makrode kasutamise keelamine liidese enda konfiguratsioonis.

Mis juhul teised viirused levivad? Failiviirused levivad vaid juhul, kui kĂ€ivitada nakkusega fail, kopeerimisel mitte mingit nakatumisohtu pole. Alglaadimissektoriviirused levivad sel juhul, kui keegi nakatunud disketilt eksikombel operatsioonisĂŒsteemi kĂ€ivitada pĂŒĂŒab. Ent kui alglaadimissektoriviirus end juba nakatunud kĂ”vakettalt mĂ€llu on lugenud, vĂ”ib viirus nakatada ka kĂ”iki arvutisse sisestatud diskette. Ei maksa paaniliselt karta disketti, millel arvatakse olevat viirus, arvutisse sisestada, sest seni, kuni kettalt pole ĂŒhtki programmi kĂ€ivitatud ega alglaadimist tehtud, ei levi ĂŒkski viirus mitte kuskile. Kui on kindel, et kettal on ainult alglaadimissektori viirus, siis vĂ”ib ka ĂŒpris julgelt kettal olevaid programme kĂ€itada. On levinud ka naeruvÀÀrne kartus, et Ă€kki viirus pÀÀseb kuidagi kirjutamiskaitsega disketile. Kui arvuti riistvara on komplektne ja garanteeritud korralikult töötama, siis on viiruse kopeerumine kirjutuskaitsega disketile tĂ€iesti vĂ€listatud.

Kuidas saab aga kasutaja aru, et arvutis on viirus? KĂ”ige parem viiruste otsimise vahend on loomulikult selleks mĂ”eldud programm (tuntuimad ja parimad on hetkel F- Prot ja TBAV), kuid alati pole seda kĂ€epĂ€rast vĂ”i on ta vĂ”imetu viirust avastama. Sel juhul saab viiruse olemasolu kindlaks teha ka mĂ”ningate vĂ€liste sĂŒmptomite abil. Kui arvutis on viirus, siis kĂ”ige levinumateks sĂŒmptomiteks on nĂ€iteks:

  • Programmide sisselugemine vĂ”tab rohkem aega kui peaks;
  • Programmifailide suurus kasvab kogu aeg;
  • KĂ”vakettalt kaob vaba ruumi, kuigi kettale midagi ei kirjutata;
  • Ilmuvad igasugused ebaharilikud veateated;
  • DOS-i CHKDSK ei nĂ€ita mĂ€lumahuks 655360 baiti;
  • Aeg-ajalt kirjutatakse ilma mingi pĂ”hjuseta midagi kettale;
  • Tehes alglaadimise disketilt, ei pÀÀse ligi kĂ”vakettale;
  • Ketastele tekivad mingid kahtlased kahtlaste nimedega failid;
  • Failid kettal kaovad ilma mingi pĂ”hjuseta;
  • Arvuti CMOS tĂŒhjeneb pidevalt.

Enne vastuabinÔude lahkamist rÀÀgiksin veidi viiruste hingeelust. Missugust liiki viirused on siis kÔige kavalamad ja missuguseid trikke nad enda avastamise vÀltimiseks teevad?

KÔige suurem osa metsikuist viirustest on alglaadimissektoriviirused. Kuna viimasel ajal on disketid oma otstarbekuse ja populaarsuse praktiliselt minetanud, siis hakkavad ka alglaadimissektoriviirused oma tÀhtsust tasapisi kaotama. Alglaadimissektoriviiruse tööpÔhimÔte seisneb originaalse alglaadimissektori salvestamises (nÀiteks salvestavad paljud viiruse selle suvalisse kasutamata kohta ketta lÔpus) ja selle asendamises viiruselise koodiga, mis kÀivitab pÀrast ka algse alglaadimisprogrammi, nii et mingit muutust arvuti töös pole mÀrgata. Edasi nakatab viirus juba kÔik arvutisse sisestatud disketid, juhul kui neil muidugi kopeerimiskaitset peal pole.

Residentsed failiviirused nakatavad programmifaile kolmel erineval moel. Esimene viis on kirjutada programmidfaili algus viiruselise koodiga ĂŒle, jĂ€ttes originaalse faili sisu salvestamata. Niisugused viirused on oma ehituselt vĂ€ga labased ja pole elujĂ”ulised. Nende pĂ”hjustatud kahju pole ka reeglina vĂ”imalik hĂŒvitada, kuna originaalne fail rikutakse. Aitab vaid varukoopiate tegemine. Ülekirjutavate viiruste olemasolu on vĂ€ga kergelt avastatav — programmifailid ei lĂ€he lihtsalt kĂ€ima vĂ”i ei tee enam seda, mida nad peaksid tegema. Faili alguses on mingi vÔÔras programmilĂ”ik. Teine nakatamise viis, mis töötab COM-failide puhul, on pĂ”himĂ”tteliselt sama alglaadimissektori viiruste tööpĂ”himĂ”ttega. Viirus salvestab originaalse faili alguse ja asendab selle viiruselise koodiga. Igal kĂ€ivitusel kutsutakse seetĂ”ttu originaali asemel vĂ€lja viiruseline kood, mis kontrollib, ega viirust juba mĂ€lus pole: kui on, siis kĂ€ivitab kohe salvestatud originaalse programmi; kui pole, siis esmalt loeb end mĂ€llu ja kĂ€ivitab alles seejĂ€rel algse programmi. Kolmandaks, EXE-faile nakatatakse programmi algusaadressi ĂŒmbersuunamisega viiruselisele koodile, mis on harilikult lisatud programmifaili lĂ”ppu. ÜlejÀÀnud tööpĂ”himĂ”tted on tal samad, mis COM-faili viirustel.

Kui viirus on mÀlus, siis seal haaratakse tavaliselt enda kÀtte mÔni failidega opereerimisega tegelev katkestus, mis asendatakse faile nakatava programmilÔiguga. Algne katkestus muidugi salvestatakse ja kutsutakse peale naka-tamist vahelejÀÀmise vÀltimiseks vÀlja. Nagu nÀha, tegutsevad viirused suhteliselt mÀrkamatult, tehes kÔik Àra kasutaja selja taga; ideaalse viiruse puhul vÔib tÀheldada vaid fakti, et mÔnede programmide sisselugemine vÔtab rohkem aega, kui ta vÔtma peaks.

Mitteresidentsed failiviirused on peaaegu sama tööpÔhimÔttega nagu residentsed failiviirused, ainuke vahe seisneb selles, et nakatav kood ei asetse mÔnel katkestusel arvuti mÀlus, vaid kÀivitub ainult nakatunud programmifaili kÀivitamisel, otsides viiruse algtekstis mÀÀratud algoritmiga kettalt nakatamata faile ja nakatades neid.

Kui vaadata viirusega nakatunud faili, siis hakkab seal kohe silma, et programmi alguses on pikk hĂŒpe kuskile faili lĂ”ppu. Üldse vĂ”ib programmilfaili tegevuse kĂ”ige elementaarsemal sammhaaval jĂ€lgimisel viiruselise koodi kergelt avastada — lihtsamatel juhtudel saab viiruse elimineerimisega hakkama isegi kĂ”ige vĂ€hemate assemblerkeele alaste teadmistega kasutaja. Selle vastu on viirusekirjanikud aga vĂ€lja nuputanud stealth-viirused. Stealth-viirus haarab enda kĂ€tte lisaks failide kĂ€ivitamise katkestusele ka teisi kettaoperatsioone teostavaid katkestusi: tema tööpĂ”himĂ”te seisneb BIOS-i rutiinide saboteerimises nii, et nad annaks ketta kohta valeinformatsiooni. Lihtsamad stealth-viirused nĂ€itavad nakatunud faili suuruse asemel algse faili suurust, pĂ”hjalikumad aga vĂ”ltsivad lausa failide sisu, nĂ€idates viiruse asemel algset sisu.

Teine viirusetĂ”rjujate petmise vĂ”imalus seisneb krĂŒptimises. Et failide sirvimisel poleks niivĂ”rd lihtne aru saada, et tegemist on viirusega, siis viiruse kood krĂŒptitakse. Enne kĂ€ivitamist peab aga viirus end ise lahti krĂŒptima, seega on krĂŒptivail viirustel mingi iseloomulik pĂ€is, mis viiruse koodi krĂŒptimisega tegeleb ja mille otsimise abil krĂŒptivaid viirusi ka avastatakse. KĂ”ige kavalamad viirused aga genereerivad igal kĂ€ivitusel vĂ”i nakatumisel erineva pĂ€ise vĂ”i koguni terve uue viiruse, mille tĂ”ttu on viirusetĂ”rjeprogrammidel neid kaunikesti keeruline avastada. Niisuguseid viirusi nimetatakse polĂŒmorfseteks, neil on lugematu arv erinevaid esinemisvorme — nad on seetĂ”ttu ka pĂ€ris tĂ”sine vĂ€ljakutse viiruste otsimise meetoditele ja viirusetĂ”rjeprogrammide vĂ€ljatöötajatele; pelgast viiruste otsimisstringide andmebaasist nende puhul abi pole.

Mida aga teha, kui teatakse, viirus on arvutis? KĂ”ige lihtsam on muretseda endale kĂ”ige uuem viirusetĂ”rjepakett ja lasta sellel töö Ă€ra teha, kuigi ka selle tegevuse juures on mĂ”ningaid nĂŒansse, millega on ÀÀrmiselt soovitav arvestada. Et avastada nĂ€iteks mĂ”nda kĂ”rgema klassi stealth-viirust, tuleb igal juhul teha alglaadimine puhtalt disketilt (kusjuures alglaadimisdiskette tuleks hoida kogu aeg kirjutamiskaitse all) ja seejĂ€rel kĂ€ivitada viirusetĂ”rjeprogramm, mis viiruse ĂŒles leiab ja selle loodetavasti ka eemaldab. Kui sĂŒsteemi nakatanud viirus aga pole stealth-viirus, siis aitab tema eemaldamiseks viirusetĂ”rjeprogrammi kĂ€ivitamisest ilma mĂ€lu kontrollimata (f-prot /nomem), viiruse eemaldamisest kettalt tĂ”rjeprogrammi abiga ja sellele jĂ€rgnev kohene algkĂ€ivitus (mitte Ctrl-Alt-Del, vaid reset, kuna mĂ”ned viirused on vĂ”imelised ka nupukombinatsiooni ĂŒle elama). Algajal aga on sellegipoolest soovitav teha alati viiruse avastamisel alglaadimine puhtalt disketilt, sel juhul on risk midagi Ă€ra vussida kĂ”ige vĂ€iksem.

Mida teha, kui viirusetĂ”rjeprogramm leiab arvutist tundmatu viiruse? Siis ei aita muu, kui kutsuda kohale mĂ”ni programmeerijast spetsialist vĂ”i teha vajalikest andmefailidest (kuid mitte kĂ€ivitatavatest programmifailidest) varukoopiad ja kogu ketas vormindamise teel tĂŒhjendada. Uue viiruse leidmisel oleks eetiline sellest teatada ka mĂ”nele viirusetĂ”rjega tegelevale organisatsioonile ning saata neile tundmatu viirusega nakatunud fail, et keegi teine sama viiruse pĂ€rast enam kannatama ei peaks.

Artikkel ilmus ajakirja Arvutimaailm 1997. aasta aprillikuu numbris.