From: manu@cs.tut.fi (Set{l{ Manu)
Newsgroups: sfnet.atk
Subject: Ongelmanratkaisua (Re: Virusten torjunta)
Date: 13 Apr 92 06:48:31 GMT
Distribution: sfnet
Organization: Tampere University of Technology (tut)


Puhun siis puucee ymp{rist|st{:

Jos minun pit{isi tehd{ (voisin tehd{, jos olisi aikaa) virusten
(_kaikkien_) etsint{ohjelma niin jakaisin ongelman osiin:

	- ohjelman itsens{ verifiointi (1)
	- k{yttistason ajurien verifiointi (2)
	- k{ytt|j{rjestelm{n verifiointi (3)
	- kovalevyll{ (tms. olevien ohjelmien verifiointi) (4)

Kaupallinen (tietty) softa manvirus toimitettaisi tietysti
kirjoitussuojatulla korpulla/lerpulla (eiv{t luuserit
sit{ kuitenkaan kirjoitussuojaisi). 
Levykkeell{ voisi olla viruksia valmiina (kaukomaiden 
monistuskeskukset), siihen on varauduttava.

(mv = virussofta)
Kone k{ynnistet{{n buuttaamalla se mv-levykkeelt{.
Buutin j{lkeen levykkeelt{ k{ynnistyisi (automaagisesti
esim. autoexec.batista) ver1.com. Ver1 kielt{isi keskeytykset,
ja alkaisi ajaa koodiaan. DMA luvulla luettaisi _levykkeelt{_
ver1.com, jolle lasketaan tarkistussummat (v.maisia algoritmeja
on joka oksalla, ja niit{ on helppo muuttaa). _Levykkeen_ 
k{sittelyn dma on varsin suoraviivainen homma (ei triviaali,
mutta teht{viss{), eik{ erilaisia dma-ohjaimia pc-koneissa
juurikaan ole (tiet{{kseni ainakaan kovin montaa tyyppi{).
(Lukemalla ohjelma vain levykkeelt{ voitetaan usean eri-
tyyppisen kovalevyn ongelmat.) Lis{ksi tutkitaan, ett{ koodi 
levyll{ on sama kuin keskusmuistissa (siksi ohjelma .com).
(osatavoite 1)

Ver1.comin tarkistuksen j{lkeen tutkittaisi koko levykkeen
tarkistussummat (edelleen ne kyps{t algoritmit). T{m{kin
teht{isi keskeytykset kiellettyn{ ja dma-lukuna. 
(osatavoitteet 2, 3 osittain)

Seuraavaksi voisi tutkia sen, ett{ toimitaan "oikeassa"
koneessa, eik{ virtuaalisessa. Tutkintaa voisi kokeilla
esim. pinon tutkinnalla yhdistettyn{ suoraan prosan
tyypin tutkintaan (pinon pit{{ olla 8086 pino, jos 
prosa v{itt{{ olevansa sellainen). T{ss{ on fiksun viruksen
paikka, mutta sen on edelleen ollut oltava minun koneessa
tai monistamossa, joten riski on pieni.

Jos n{m{ testit on l{p{isty on levyke varmasti virukseton.
Sill{ ainoa paikka, jossa virus olisi voinut oleskella
on ver1.com, mutta silloin viruksen olisi pit{nyt tiet{{
tarkistussumman laskentamenetelm{, mik{ voidaan olettaa
mahdottomaksi (kukaan ei tied{ mink{laisen algoritmin
olisin koodannut, joten sille spesialisoitunutta virusta
on jokseenkin mahdotonta olla olemassa ennen ohjelman markki-
noilletuloa (eli omassa koneessani tai monistuskeskuksessa)).

N{iden testien j{lkeen tyhjennet{{n keskusmuisti, kaikilta
mahdollisilta osilta (mahdollinen virus lakkaa olemasta,
eik{ keskeytysten kiellon takia sill{ ole mahdollisuutta
edes puolustautua (raukka parka)). Com tyyppisen ohjelman
sijainti on tiedossa jo konekoodia naputellessa. Rommissa
oleville viruksille ei voida mit{{n toistaiseksi (eik{
stealth-viruksille koskaan), mutta rommien vaihto onkin jo
rautatason juttu, eik{ sille voi mik{{n softa mit{{n.
(osatavoitteet 2, 3 lopullisesti)

Koska keskusmuisti ja levyke ovat puhtaat voidaan keskey-
tykset sallia, ja k{ynnistet{{n normaali fprot tai scan
tyyppinen ohjelma (ver2.exe), joka tarkistaa kovalevyn. 
Pc koneissa eiv{t virukset onneksi tartu pelk{n luku-
tapahtuman yhteydess{ muuten puhtaaseen keskusmuistiin.
(osatavoite 4)

Jos muuten levyke on puhdas niin my|hemmin siihen ei 
virukset iske (kirjoitussuojaus).

Jos virus l|ytyy (miss{ tahansa vaiheessa) niin siit{
annetaan k{ytt{j{lle ilmoitus, ja toiminnot keskeytet{{n.


Kommentteja, kiitos. No kaikkia viruksia ohjelma ei v{ltt{-
m{tt{ l|yd{, riippuen hieman ver2.exen toiminnasta, mutta
varsin turvallinen selusta etsinn{lle on saatu.

Kellon k{yntiongelma poistuu buuttaamalla kone uudelleen
(reaaliaikakello k{y useimmissa koneissa keskeytyksist{
riippumatta).

Jos t{m{ on hyv{, niin sit{ saa k{ytt{{, kunhan mahdollisesta
voitosta muistaa minua k|yh{{ opiskelijaakin.
Patenttia sille ei ainakaan en{{ saa (julkisuus) hah hah.


	manu
--
Arvatkaapa koettaisivatko virusten tekij{t murtaa tuota systeemi{