Virusas (programa)

Virusas – save platinti sugebanti kompiuterio programa. Griežtai apibrėžiant, – kompiuterio programa, kuri dauginasi, prikabindama savo kodą prie kitų kompiuterio programų arba dokumentų. Iš to kilęs ir šių programų pavadinimas, nes biologijoje virusai plinta įsiskverbdami į organizmų ląsteles. Bendresniu požiūriu virusams priskiriami ir kirminai – kompiuterių tinkluose besidauginančios programos.

Kai kurie iš virusų atlieka kenksmingus veiksmus – naudoja kompiuterio resursus kriminaliniams tikslams, trina ar persiunčia vartotojo dokumentus, mokėjimo kortelių duomenis ir pan., todėl dažnai painiojami su Trojos arkliais (trojanais).

Istorija 

Pirmą kartą (1949 m.) programos – viruso, t. y. kompiuterinės programos, galinčios pasidauginti, modelį pateikė ir Džonas fon Noimanas (John fon Neumann). Pirma programa, kuri turėjo kompiuterinio viruso bruožų, buvo žaidimas „Darwin“, kurį 6-ajame dešimtmetyje sukūrė kompanijos Bell Laboratories darbuotojas M. Duglas Makilroi.

Yra žinoma, kad pirmosios virusų pobūdžio programos buvo kuriamos (kaip įdomus uždavinys) dar XX a. 7-ajame dešimtmetyje. Pirmas virusas, plitęs per diskų įkrovos sektorius buvo 8-ojo dešimtmečio viduryje sukurtas „Hipboot“. Šis virusas plito Data General „Nova“ kompiuteriuose ir buvo skirtas programinės įrangos atnaujinimui. Pirmoji nekontroliuojamai besidauginusi žalinga programa (kirminas) buvo sukurta Xerox Palo Alto laboratorijose 1980 m. Ši programa buvo skirta naudingam kompiuterių panaudojimui prastovų metu, tačiau nebuvo įvertinta galima jos žala.

Pirmas žinomas „laukinis“ virusas (plitęs tarp paprastų kompiuterių) buvo Apple II kompiuterių virusas „Elk cloner“. Jį 1982 m. parašė Rich Skrenta. Šis virusas plito lanksčiais diskeliais. Virusas užkrėsdavo Apple DOS 3.3 operacinę sistemą ir kiekvieną kartą užkraunant kompiuterį iš diskelio virusas pasileisdavo. Jis netrukdė dirbti su kompiuteriu, tik stebėdavo sistemos darbą su diskais užkrėsdamas kiekvieną, dar neužkrėstą, diskelį. Virusas nepadarydavo didesnės žalos (nors manoma, jog jis galėjo gadinti diskelius, kuriuose būdavo kita operacinė sistema), tik kas penkiasdešimtą sistemos įkrovą pateikdavo tokį eilėraštį:
Elk Cloner: The program with a personality
 
It will get on all your disks
    It will infiltrate your chips
        Yes it's Cloner! 

It will stick to you like glue
    It will modify ram too

Virusas nebuvo labai sudėtingas, tačiau jis sėkmingai plito, nes daugelis žmonių tuo metu net neįsivaizdavo apie tokią grėsmę, nebuvo būdų kaip patikrinti diskelius ar pašalinti virusą. Pašalinti būdavo galima tik rankiniu būdu, tačiau tai galėdavo atlikti tik atitinkamos specializacijos kompiuterių specialistai.

Didelis susidomėjimas virusais (užkrečiančiais kitas programas) kilo, sukūrus virtualių mašinų programavimo žaidimą, 1983 metais išspausdintą Scientific American žurnale. Įvairios šio žaidimo versijos programuotojų tarpe gana populiarios iki šiol. Pirmas įprastus kompiuterius užkrečiantis ir smarkiai paplitęs virusas „Brain“ buvo sukurtas 1986 Pakistane. Šio viruso kūrėjai apkrėstų kompiuterių savininkams siūlė komercines viruso išnaikinimo paslaugas. Vėliau virusus ėmė kurti programuotojai, susidomėję uždavinio sudėtingumu bei netrivialiu programavimu. 1999 metais, Internete pasirodžius Melissa kirminui (dar žinomam, kaip „lamerių virusas“), buvo įsitikinta, kad besidauginančias programas gali rašyti net labai prastos kvalifikacijos programuotojai, virusų kūrimas tapo neprestižiniu uždaviniu. Šiuo metu pilnaverčiai virusai yra gana menkai paplitę, dažniausiai pasitaiko paprastesni kirminai.

Be ginčų apie pirmąjį kompiuterinį virusą netyla diskusijos ir dėl pirmo termino „kompiuterinis virusas“ pavartojimo. Dar 1970 m. viduryje Deivid Gerrold mokslinės fantastikos romane „When H.A.R.L.I.E was One“ (Kai H.A.R.L.I.E buvo išrinktuoju) buvo išgalvotos kompiuterinės programos aprašymas, pavadintos VIRUS, kuri veikė taip, kaip tikrasis virusas. Džonas Braneris (John Brunner) 1975 m. romane „Shockwave riders“ aprašė programas, kurios sklido tinklais trindamos duomenis. Terminas „kompiuterinis virusas“ 1982 m. buvo naudojamas ir komikse „Uncanny X-Men“ (Šiurpieji X-Men‘ai). Vis dėlto pirmą kartą terminas „kompiuterinis virusas“ moksliniame leidinyje buvo panaudotas Fred Cohen straipsnyje „Experiments with Computer Viruses“ (Eksperimentai su kompiuteriniais virusais).

Programavimas 
Dauguma pilnaverčių virusų yra rašomi asembleriu, nors kai kada naudojamos ir kitos kalbos – Paskalis, C, Forth. Tipiškais atvejais virusas yra gana nesudėtingą logiką turinti programa, kuri nukopijuoja savo pačios vykdomąjį kodą į kitos programos vykdomąjį failą bei pakeičia tos programos kodą taip, kad prieš vykdant programą, būtų įvykdytas virusas.

Dėl vykdymo specifikos daugeliui virusų būdinga tipiška instrukcijų seka:
 CALL NEXT       ; procedūros iškvietimas, steke atsiduria sekančios instrukcijos adresas
 NEXT: POP DX    ; DX registre atsiduria einamasis adresas
 ...             ; pagal DX esantį adresą tolimesnis kodas gali būti kopijuojamas

Sudėtingesniais atvejais, virusuose būna panaudojamas ir save modifikuojantis kodas, priemonės, skirtos viruso maskavimui ir pan. Kai kuriems virusų kūrimo aspektams reikalingas itin gilus specifinės OS ir procesoriaus funkcijų išmanymas. Sudėtingų virusų kūrimas yra laikomas vienu iš netrivialiausių programavimo uždavinių.

Apsaugos būdai 
Siekiant apsaugoti kompiuterį nuo virusų, taikomi du pagrindiniai metodai:
 prevencinis – saugi operacinė sistema, leidžianti vykdyti efektyvią programų/vartotojų teisių kontrolę (pvz., įvairios UNIX, Linux rūšys), saugios el. pašto programos ir t. t.;
 virusų naikinimo – antivirusai, el. pašto filtrai, OS failų ir programų perrašymas patikrintomis versijomis ir pan.

Tiriant kompiuterių virusų bei kirminų plitimą, buvo įsitikinta, kad jiems galioja daugelis plitimo dėsnių, galiojančių ir bakterijų, augalų bei gyvūnų populiacijoms.

Taip pat skaitykite 
 Paskirstyta paslaugos trikdymo ataka
 Petya

Šaltiniai

Nuorodos 
 Kaip atsirado pirmasis kompiuterinis virusas – Ar žinai? portalo straipsnis 

Kenkėjiškos programos