Viiruse koodvaade assembleris
Stoned Code
**Arvutiviirus** ehk **viirus** on programm, mis on võimeline end iseseisvalt kopeerima ja arvutit nakatama. 

Mõistet "viirus" kasutatakse ekslikult ka muud tüüpi, näiteks isepaljunemisvõimeta pahavaraprogrammide (reklaami, nuhkvara, ussviiruste ja Trooja hobuste) korral. Ehtne viirus levib ühest arvutist teise nakatunud peremeesprogrammi ümbertõstmisel. Selline levimine toimub näiteks failide saatmisel võrgu/interneti kaudu või nende transportimisel andmekandjatega, näiteks disketi, CD, DVD ja USB-mälupulgaga.

Viirused suudavad suurendada oma levimisefektiivsust, nakatades võrgus paiknevaid või teise arvuti sagedasti kasutatavaid failisüsteeme.

Eelmainitult mõistetakse termini "viirus" all ekslikult kõiki pahavaraprogrammide tüüpe: näiteks ussviirusi ja Trooja hobuseid, mis on toimeloogikalt täiesti erinevad. Ussviirused kasutavad ära süsteemis leiduvaid turvaauke, et end võrgu kaudu, võrku lülitatud arvutist uutesse arvutitesse levitada. Trooja hobune on aga ohutuna näiv programm, kuid sellesse on peidetud pahatahtlikke funktsioone. Selline pahavara kahjustab arvutis asuvaid andmefaile ja vähendab arvuti jõudlust. Kui ühtede pahavaraprogrammide tegevusel tekivad kasutajale märgatavad sümptomid, siis teised tegutsevad süsteemis kahtlust äratamata.

Ajalugu
-------

### Viirusprogrammid

1970ndatel avastati ARPANET-is (interneti eelkäija) viirus Creeper. Tegemist oli Bob Thomase eksperimentaalse isepaljuneva programmiga. Creeper kasutas ARPANET-i võrku TENEX-i operatsioonisüsteemiga DEC PDP-10 arvutite nakatamiseks. 
Olles saanud arvutile ligipääsu, kopeeris programm end teistesse süsteemidesse, kus kuvati sõnum "I'm the creeper, catch me if you can!" ("Mina olen Creeper, püüa mind kinni, kui suudad!"). Viiruse eemaldamiseks loodi programm Reaper.

Elk Cloner oli esimene arvutiviirus, mis ilmus väljaspool selle loomiskeskkonda (arvutit või laborit). Kirjutatud 1981. aastal Richard Skrenta poolt, kinnitas programm end operatsioonisüsteemile Apple DOS 3.3 ja levis diskettide abiga. See pahavara, mis loodi ilma tõsisemate eesmärkideta veel R. Skrenta keskkoolis õppimise ajal, levis koos andmekandjal oleva mänguga. Pärast 50 kasutuskorda viirus aktiveeriti ja kuvati lühike luuletus algusega: "Elk Cloner: iseloomuga programm".

Enne arvutivõrkude ulatuslikku kasutama hakkamist levis enamik viirustest irdkandjate abil, peamiselt diskettidel ehk flopiketastel. Viimased olid personaalarvutite algusaegadel peamisteks vahenditeks informatsiooni ja programmide vahendamisel. Osad viirused levisid andmekandjal olevaid programme nakatades ning teised kirjutasid end ketta alglaadimissektorisse, et viiruse aktiveerimine toimuks arvuti vahendilt käivitamisel automaatselt, seega kasutati ära tolle aja arvutite omadust käivitumisel diskette lugeda. Kuni selliste andmekandjate kasutusaja lõpuni olid alglaadesektorit kasutavad pahavaralised failid teiste arvutite nakatamisel kõige tavalisemad ja edukamad.

Traditsioonilised arvutiviirused tekkisid 1980. aastatel tänu personaalarvutite, BBS-i (hiljem FidoNet) ja modemite populaarsuse kasvule. Bulletin Boardil (BBS) põhinenud tarkvara jagamine aitas otseselt kaasa Trooja hobuse tüüpi viiruste levikule ning viirusi hakati kirjutama enamkasutatavate programmide jaoks.

Makroviirused muutusid tavaliseks 1990. aastate keskpaigast. Enamik sellistest viirustest olid kirjutatud sellistele Microsofti programmidele nagu Word ja Excel ning levisid Microsoft Office’i kaudu, nakatades dokumente ja arvutustabeleid. Macintoshi arvutid olid samuti haavatavad, sest mainitud programmid olid saadaval ka Mac OS-ile.

Mõned Microsoft Wordi vanemad versioonid lubavad makrodel imiteerida end tühjade ridadega. Kui kaks makroviirust nakatavad dokumendi samaaegselt, võib nende kombinatsioon olla tuvastatav täiesti uue pahalasena.

Viirused on ka võimelised saatma arvutikasutaja nimekirjas olevatele kontaktidele linke veebisaitidele, mille eesmärgiks on külastajate tehnika nakatamine.

2002. aastal teatati viirustest, mis kasutavad murdskirptimist (XSS). Selliste pahavaraliste failidega on seotud mitmeid juhtumeid MySpace’i ja Yahoo saitidel.

Tuntuim Eestist pärit arvutiviirus on 1997. aastal koostatud ning käiku lastud "Raadioga.1000", mis on pühendatud Eesti grafitipioneer Ülo Kiple "haiguste ravi" sõnumile. Autor avaldas 1999. aastal viiruse lähtekoodi, mille kommentaarides selgitab ka oma motivatsiooni viiruste kirjutajana.

Viiruste tüübid ja nakatamisstrateegiad
---------------------------------------

Et viirus saaks paljuneda, peab arvutis olema võimaldatud programmijuppide käitamine ja arvuti mälusse kirjutamine. Selle tõttu kinnitavad paljud viirused end täitmisfailide külge, mis võivad olla kasutaja installitud tarkvara osaks. Strateegia abil aktiveeritakse viirusi tavaprogrammidega samaaegselt. Aktiivsusperioodi järgi jagatakse viirused kaheks: mitteresidentsed ja residentsed.

Mitteresidentsed viirused otsivad uusi nakatatavaid peremeesfaile kohe pärast käivitamist, sobivaid leides paljundavad end ning annavad seejärel kontrolli üle protsessi esile kutsunud põhiprogrammile. Residentsed viirused laadivad end arvuti mälusse ja jäävad taustal aktiivseks. Uus faile nakatavad nende kasutamisel programmid või operatsioonisüsteem ise.

### Mitteresidentsed viirused

Need viirused koosnevad leidja- ja replikatsioonimoodulist. Esimene otsib uusi faile, sobivate leidmisel nakatab teine moodul need failid.

### Residentsed viirused

Residentsed viirused sisaldavad mitteresidentsetega sarnast replikatsioonimoodulit, mis laaditakse aktiveerumisel arvuti mälusse. Moodulit kasutatakse iga kord, mil operatsioonisüsteem täidab kindlat ülesannet. Näiteks võib toimuda pahavara paljunemine iga täitmisfaili käitamisel, mille tulemusena nakatatakse kõik leitud sobivad programmid.

Residentsed viirused jagunevad kaheks: kiiresti ja aeglaselt levivateks. Kiiresti paljunevad residentsed viirused on kavandatud nakatama võimalikult paljusid süsteemi kasutatavaid faile ja nende efektiivsus sõltub suuresti levimiskiirusest. Kiiresti paljunev pahavara kujutab endast erilist probleemi viirusetõrjeprogrammidele, sest süsteemi mälus märkamata jäänud aktiivne viirus võib nakatada üldkontrolli käigus igat kontrollitud faili. Sellist meetodit kasutades suureneb pahavara avastamise tõenäosus, kuna võib langeda nakatunud arvuti töökiirus ja esineda muidki kahtlust äratavaid sümptomeid. Aeglased residentsed viirused paljunevad aga harva, näiteks ainult failide kopeerimisel. Selliste programmide eesmärgiks on jääda madalat profiili hoides tabamatuks: arvuti aeglustumise võimalus on väiksem ja halvimal tuvastavad tõrjeprogrammid väheseid viiruse jälgi.

### Nakatamise sihtmärgid

Viirused on suunatud eri tüüpi failidele ja meediumitele, näiteks:

* binaarsed täitmisfailid (nt COM- ja EXE-failid MS-DOS-is, kaasaskantavad täitmisfailid Microsoft Windowsis, Mach-O vorming OSX-is ja ELF-failid Linuxis);
* sektsiooni alglaadekirjed diskettidel ja kõvaketastel.

Kõvaketaste peabuutsektorid.
– Üldotstarbelised skript-failid nagu batch-failid MS-DOS- ja ka Microsoft Windowsis, VBScript-failid ja kest-skript (*shell script*) failid Unixi platvormides.

* Programmipõhised skriptfailid (nt Telix-skriptid).
* Süsteemipõhised automaatse käivitamise failid (nt Autorun.inf-fail Windowsi opsüsteemis, mida vajatakse tarkvara automaatseks käitamiseks USB-andmekandjatelt).
* Dokumendid, mis võivad sisaldada makrosid (nt Microsoft Wordi dokumendid, Microsoft Exceli tabelid ja Microsoft Accessi andmebaasifailid).
* Cross-site skriptimise turvaaugud veebirakendustes (nt XSS Uss).
* Programmides esinevad ärakasutatavad vead nagu puhvri ületäitumine, formaat string ja võidu-olek (*race condition*), mille puhul on võimalik tarkvarasse peidetud pahavaralise koodi käivitamine. Sellise pahavara tööd on võimalik raskendada sisseehitatud kaitsefunktsioonidega nagu täitmist blokeeriv bitt (*execute disable bit*) ja/või aadressiruumi suvaline paigutus (aadress space layout randomization).

PDF-ides, nagu HTML-failideski, on võimalik viitamine kuritahtlikule koodile. PDF-failid võivad ka ise olla pahavaraga nakatunud.

Operatsioonisüsteemides, kus kasutatakse failinimelaiendeid failide sidumiseks programmidega (nt Microsoft Windows), võivad laiendid olla vaikeseadmena kasutaja eest peidetud. Selle tõttu on võimalik luua faile, mille näiv tüüp ei vasta tegelikkusele (nt täitmisfail "pilt.png.exe", millest kasutajale kuvatakse "pilt.png").

Teiseks meetodiks on tsükkelkoodkontrolli CRC16/CRC32 kasutades genereerida erinevate operatsioonisüsteemi failide osadest viiruse koodi. Moodust kasutades on võimalik lahti pakkida üsna mahukat pahavara. Selline rünnak on väga kergesti leitav traditsioonilise viiruse signatuuri tuvastamismeetodi poolt ning tänaseni pole seda avalikkuses leitud.

Avastamise vältimise meetodid
-----------------------------

Kasutaja eest varjatuks jäämiseks kasutas osa viirustest, eriti MS-DOS-i platvormil, "viimati muudetud" kuupäevaga manipuleerimist. Nimelt välditi nakatamisel selle faili kirje uuendamist. Meetod on viirusetõrjeprogrammide vastu ebaefektiivne.

Osad viirused (süvendviirused, inglise *cavity viruses*) on võimelised nakatama operatsioonisüsteemi osi muutmata suurusi ning kahjustamata nende sisu. Selleks kasutatakse failide poolt hõivamata jäänud alasid. Näiteks CIH viirus nakatab täitmisfaile, milles esinevate tühimike tõttu saab 1 kB suurune pahavara levida märkamatult.

Leidub ka pahavara, mis üritab tuvastamise vältimiseks katkestada tõrjeprogrammidega seotud protsesse.

Kuna arvutid ja operatsioonisüsteemid muutuvad üha suuremaks ja keerukamas, tuleb viiruste peitmistehnikaid pidevalt uuendada. Tulevikus võib arvuti pahavara eest kaitsmine nõuda failisüsteemidelt üksikasjalikuma ja rangema failide ligipääsupoliitika rakendamist.

### Tahtmatud peremeesfailid

Arvutiviirus peab edasi levimiseks nakatama uusi faile, mille seas võib leiduda ka viirusetõrjeprogramme. Kuna paljud neist viivad iseenda peal läbi regulaarset kontrolli, suureneb vale faili nakatades viiruse tuvastamise tõenäosus. Sel põhjusel on teatud pahalased programmeeritud ignoreerima kindlate tunnustega faile: näiteks väikseid, kindlat sisu omavaid. Viimaste seas võib leiduda ka nn söötefaile, mis on spetsiaalselt viirusetõrjetarkvara poolt nakatamiseks loodud.

* Viirusetõrje spetsialistid saavad söötefaile kasutada viiruselt proovi võtmiseks. Selline väikse failiga opereerimine on palju praktilisem kui töödelda kogu nakatunud programmi.
* Söötefaile kasutatakse viiruse käitumismudeli õppimiseks ning tõrjeprogrammi efektiivsuse hindamiseks. See on eriti kasulik mitmekujuliste viiruste puhul, mil pahavara on suuteline nakatama suurt hulka söötefaile, sest viimaste abiga saab kontrollida kõikide viiruse variantide tuvastamist tõrje poolt.
* Teatud viirusetõrjeprogrammid kontrollivad loodud söötefaile regulaarselt. Kui neid on muudetud, hoiatatakse kasutajat võimalikust pahavara olemasolust.

Et söötefailide kasutamist raskendada, on mõned viirustest programmeeritud ignoreerima kindla käitumismudeli järgi muidu nakatamiseks sobivaid faile. Näiteks võib levik toimuda kindlatel nädalapäevadel või lihtsalt pisteliselt.

### Varjatud viirused

Mõned pahavaralised programmid jälgivad tõrjeprogrammide tegevust ning aktiveeruvad, kui operatsioonisüsteemile esitatakse nende poolt päring faili avamiseks. Niimoodi on võimalik viirusetõrjetarkvarale tagastada nakatatud faili terve versioon ja programmile tundub, et fail on muutmata. Tänapäevased tõrjeprogrammid kasutavad sellega võitlemiseks erinevaid tehnikaid. Ainuke täielikult usaldusväärne meetod on arvuti nakatamata meediumilt käivitamine ja selle skannimine.

### Moondumine

Enamik viirusetõrjeprogrammidest kasutab pahavara leidmiseks signatuuridel põhinevat kontrollimist. Selle käigus võrreldakse andmebaasis olevaid baidimustreid kontrollitava faili sisuga. Kui selline muster leitakse, teavitatakse kasutajat pahavarast ning vastavalt tarkvarale lastakse valida järgmine toiming (nt faili kustutamine/parandamine, arvuti puhastamine). Et sellist tuvastamist vältida, kasutab osa viirustest igal nakatamisel erinevat koodi ja tulemuseks on uus signatuur.

### Krüpteeritud viirused

Üheks viiruste kaitsemeetodiks on enese krüpteerimine. Selline pahavara koosneb väikesest dekrüptijast ja krüpteeritud viiruskoodist. Kui iga uue faili nakatamisel kasutatakse krüpteerimiseks erinevat võtit, püsib muutumatuna vaid dekrüptimismoodul. Nendel juhtudel ei suuda tõrjeprogrammid otseselt pahavara signatuuri skannimisega leida, kuid sellest hoolimata jääb dekrüptija osa tuvastatavaks. Kasutatavad võtmed on sümmeetrilised ning neid hoitakse nakatunud peremees-failis. Tänu sellele on võimalik krüpteeritud viirusi lahti kodeerida. Tihti pole aga viirusetõrjeprogrammidel selleks vajadust, kuna isemuutuv kood on piisavalt haruldane, et lugeda fail halvimal juhul kahtlaseks.

### Mitmekujuline kood

Polümorfne kood oli esimene tehnika, mis kujutas endast viirusetõrjeprogrammidele tõsist ohtu. Selline pahavara nakatab uusi faile oma krüpteeritud koopiaga, mille lahtikodeerimine toimub dekrüptimisprogrammi abiga. Lisaks toimub igal uuel nakatamisel dekrüptimismooduli muutmine, mille tõttu puuduvad hästi kirjutatud polümorfsel viirusel peremeesfailides korduvad osad. Tõrjeprogrammidel on keeruline sellist pahavara signatuuride võrdlemisega leida, sest arvatav viirus tuleb enne lahti krüptida või analüüsida selle struktuuri. Polümorfse koodi kasutamiseks peab viirusel olema oma krüpteeritud kehas vastav mootor.

Osa pahavarast rakendab polümorfset koodi viisil, mis vähendab oluliselt viiruse muteerumissagedust. Näiteks võib muutumine toimuda pikemate ajaperioodide vahel. Samuti saab selliseid viirusi programmeerida hoiduma muteerumisest, kui toimub faili nakatamine, mis juba sisaldab sama viiruse krüpteeritud koopiaid. Selliste võimaluste kasutamine raskendab oluliselt viirusetõrjeprogrammide tööd pahavarale kindlate tunnuste leidmisel, sest nende loodud söötefailid sisaldavad tüüpiliselt identseid viiruse koopiaid. Nii suureneb tõenäosus, et viiruste otsimisel jäävad viiruse osakesed leidmata.

Haavatavus ja vastumeetmed
--------------------------

### Operatsioonisüsteemide haavatavus viirustele

Tarkvarasüsteemide mitmekesisus vähendab viiruste hävitavat potentsiaali. Vastupidine olukord leidis aset 1990. aastatel, mil kasvas Microsofti operatsioonisüsteemi Windows ja kontoriprogrammide (Microsoft Office) turuosa. Firma tarkvara populaarsuse tõttu on selle kliendid kõige rohkem viirustest ohustatud. Kriitikat on põhjustanud vead ja turvaaugud, mida pahavara kirjutajad saavad ära kasutada.

Kuigi Windows on populaarseim viirusekirjutajate sihtmärk, leidub sarnast tarkvara teistelgi platvormidel. Iga operatsioonisüsteem, mis lubab kolmandate osapoolte programme, võib kanda aktiivseid viirusi. Mõned opsüsteemid on turvalisemad kui teised. UNIXi-põhised keskkonnad lubavad kasutajatel käivitatavaid programme käitada vaid neile etteantud kaitstud mälupiirkonnas.

Internetipõhine uuring näitas, et leidub inimesi, kes vajutaks võimalusel tahtlikult viiruse allalaadimiseks vastavat nuppu. Turbeanalüütik Didier Stevens viis Google AdWordsi kaudu läbi reklaamikampaania loosungiga: "Kas sinu arvuti on viiruseta? Hangi nakkus siit!". Klõpsude koguarvuks saadi 6 kuu jooksul 409. Inimeste arvuteid siiski ei nakatatud, sest tegemist oli eksperimendiga.

2006. aastast peale on leitud üsna vähe Mac OS X-ile suunatud pahavara. Apple’i vanematele operatsioonisüsteemidele valmistatud viiruste koguarv varieerub eri allikate väitel suuresti. Apple'i sõnul on neid vaid 4, sõltumatu allika väitel aga koguni 63. Windowsi ja Maci pahavarale haavatavus on ka nende müüginumbrite suurimaks mõjutajaks. 2009. aasta jaanuaris avastas Symantec Apple'i opsüsteemidele suunatud Trooja hobuse.

Erinevalt Windowsist on Linuxi opsüsteemis kasutajal blokeeritud süsteemifailide muutmine. See erinevus on jätkunud tänapäevalgi peamiselt tänu laialdasele administraatorkontode kasutamisele Microsofti nüüdisaegsetes operatsioonisüsteemides. Unixi süsteemides on viirusel võimalik nakatada ainult neid faile, millele aktiivsel kasutajal on ligipääs. Kuna erinevalt Windowsist ei logita sellistes opsüsteemides vaikimisi sisse administraatorina, ei saa viirus pärast käivitamist failisüsteemi kahjustada.

### Tarkvaraarenduse roll

Kuna tarkvarasse lisatakse omavolilise süsteemiressursside kasutamise vastu erinevaid turvaelemente, peavad edasi levivad viirused kasutama ära programmides leiduvaid vigu. Vigased tarkvara arendusstrateegiad suurendavad tavaliselt ka nende ärakasutamise tõenäosust pahavara poolt.

### Viirusetõrje

Paljud kasutajad kasutavad arvutis viirusetõrjetarkvara, mis on võimeline viirusi tuvastama ja eemaldama. Lisaks signatuuride võrdlemisele on levinud veel sellise heuristilise algoritmi kasutamine, mille abil otsitakse pahavarale omaseid käitumismudeleid. Selline tehnika on võimeline leidma viirusi, mille baidimustrid veel andmebaasides puuduvad.

Osad tõrjeprogrammid kontrollivad faile nende kasutamisel n-ö lennult. Sellest hoolimata ei muutu vastuvõtlikkus pahavarale, mistõttu turvaaukude parandamiseks on oluline programmide regulaarne uuendamine. Samuti vajab värskendamist viirusetõrjetarkvara, et selle abil viiruste avastamise efektiivsus suureneks.

Viiruste tehtava kahju vähendamiseks võib kasutaja teha tähtsamatest failidest regulaarseid koopiaid meediumitele, mis pole süsteemiga pidevalt ühendatud või selle poolt korduvalt kasutatavad. Näiteks kui teisaldada failid optilisele andmekandjale, nt CD või DVD, muutuvad need pahavarale immuunseks (kui just viirus kopeerimisega kaasa ei tulnud).

Taastemeetodid
--------------

Kui arvuti on juba viirusega nakatunud, pole reeglina turvaline jätkata selle kasutamist ilma operatsioonisüsteemi uuesti installimata. Siiski leidub taastevõimalusi, mille valimisel tuleb lähtuda nakkuse tüübist ja ulatusest.

### Viiruse eemaldamine

Opsüsteemides Windows Me, Windows XP, Windows Vista ja Windows 7 on võimalik kasutada süsteemitaastet (inglise *System Restore*), mis taastab registri ja kriitilised süsteemifailid valitud kuupäeval olnud seisu. Teatud pahalased keelavad aga selle abivahendi kasutamise või teiste tähtsamate programmide nagu tegumihalduri ja käsurea käivitamise. Olukord saavutatakse administraatoriõigusi kuritarvitades.

Microsofti operatsioonisüsteemi kasutajatele on firma veebilehel ligipääs tasuta viirusekontrollile. Külastajalt nõutakse 20-kohalise registreerimiskoodi sisestamist. Leidub teisigi saite, kus on tavaliselt võimalik kasutada ainult piiratud puhastamisvõimalusi. Nii mõjutatakse inimesi oma tarkvara ostma. Internetis pakutakse ka ühe faili kontrollimist korraga mitme tõrjeprogrammiga.

### Operatsioonisüsteemi uuesti installimine

Teine võimalus viiruste eemaldamiseks on operatsioonisüsteemi uuesti installimine. See tähendab arvuti kõvaketta vormindamist ning platvormi ja programmide installimist või partitsiooni taastamist puhtalt varutõmmiselt. Sel viisil toimides on garanteeritud pahavara täielik eemaldamine. Tuleb arvestada, et kogu operatsioonisüsteemi ja programmide uuesti installimisel kulub palju pingutust ja aega. Seevastu varutõmmise kasutamine on kiire, täiesti turvaline ja taastab probleemideta kõik koopia loomise seisuga kehtinud seaded.

Vaata ka
--------

* Viirusetõrjetarkvara

Viited
------

1. ↑  "What is a Computer Virus?" Actlab.utexas.edu
2. ↑  "Virus list"
3. ↑  Computer Security Basics by Deborah Russell and G. T. Gangemi (lk 68) O'Reilly, 1991. ISBN 0937175714
4. ↑  Vesselin Bontchev. "Macro Virus Identification Problems" FRISK Software International
5. ↑  Berend-Jan Wever. "XSS bug in hotmail login page"
6. ↑  "Need a computer virus?- download now" Infoniac.com.
7. ↑  "Is your PC virus-free? Get it infected here!" « Didier Stevens" Blog.didierstevens.com
8. ↑  "Apple – Get a Mac".

Välislingid
-----------

### Vabavaralised viirusetõrjeprogrammid

* AVG Free (arvutiviiruste tõrje)
* Dasient (veebilehe kontroll ja viiruse tuvastamine)
* Virus Total (kahtlaste failide otsimine)
* Avast Free (vabavaraline viirusetõrjetarkvara)

### Artiklid

* Mees maksis kätte arvutiviirusega
* Riigi infosüsteem: petukiri sisaldab ohtlikku arvutiviirust. tarbija24.ee 7. detsember 2012
* Netsec.ee: Mis on arvutiviirused ja kuidas nad töötavad
* Viirus Kriimsilma üheksa ametit, Postimees, 11. mai 2018