Virológia 3.

 

 

Murphy elsõ törvénye a számítógépes vírusokra:

"Ha egy számítógépes vírust meg lehet írni, akkor azt meg is írják."

 

Murphy második törvénye a számítógépes vírusokra:

"Ha egy számítógépes vírust NEM lehet megírni, akkor is megírják. Csak egy kicsit tovább tart...."

 

 

Az elõzõekben megismerkedtünk a számítógépes vírusok fõbb csoportjaival és azok aktiválódásának lehetõségeivel. Most lépjünk tovább és vizsgájuk meg közelebbrõl, hogy a rendszerbe jutott vírusok, hogyan terjednek tovább és hogyan védik meg magukat a víruskeresõ programokkal szemben.

 

 

A vírusok fertõzési mechanizmusai

 

A rendszerbejutás után a vírusok több módon terjedhetnek tovább. Az egyszerûbb vírusok az azonnali fertõzés technikáját alkalmazzák, amennyiben aktiválásuk pillanatában azonnal egy vagy több új gazdaprogramot keresnek, ami(ke)t megpróbálnak megfertõzni. Ezek a vírusok általában nem is maradnak rezidensek a memóriában, hanem a fertõzési kísérlet(ek) után "kitakarodnak" a rendszerbõl. Elõnyük egyszerû mûködésükbõl fakadó kis méretük, valamint memóriában/rendszerben hagyott "árulkodó nyomok" híján nehezebb detektálásuk.

A mai vírusok legtöbbje azonban a rezidens vírusok csoportjába tartozik, melyek aktiválódásuk után a memóriába "fészkelik" magukat, ahol bizonyos megszakításokat magukra irányítanak és/vagy megfelelõ rendszerfunkciók feletti ellenõrzést átveszik, hogy aztán alkalmas pillanat(ok)ban fertõzéseket eszközölhessenek. E tulajdonságaik komoly álcázási funkciók (lásd késõbb) megvalósítását is lehetõvé teszik, ami felismerésüket és eltávolításukat nagy mértékben megnehezíti. Ezen terjedési módszert - a mechanizmus lényegébõl adódóan - általában kizárólag link- ill. boot-vírusok alkalmazzák. A rezidens vírusokat további csoportokra lehet bontani memóriabeli feltalálási helyük alapján. Ez egyik legõsibb technikát alkalmazzák az ún. TOM-vírusok (Top Of Memory - a memória teteje), melyek a konvencionális (elsõ 640KB) memória végére másolják magukat, majd a memória méretét leíró rendszerváltozót saját méretüknek megfelelõen csökkentik. (Bár hasonló módszerrel nyernek maguknak plusz adat-területet egyes régebbi BIOS-ok, valamint SCSI-vezérlõk is, ha a MEM parancs 640KB-nál kevesebb hagyományos memóriát jelez ki, mindenképp' érdemes a rendszert alaposabban megvizsgálni.) Más rezidens vírusok a HMA-ba, vagy esetleg az UMB-be fészkelik be magukat, ahol egyes régebbi antivírus programok nem is keresik õket. Jóval trükkösebbek az MCB-be ill. rendszer-lyukakban "rejtõzködõ" vírusok. Elõbbiek "legálisan", MCB-k foglalásával nyernek maguknak tárterületet, amelyet azonban késõbb "kézzel" rendszerterületté "nyilvánítanak", ami így nem jelenik meg a MEM /C hatására kapott listában, míg utóbbiak az általában csak egy-egy DOS verzióra jellemzõ, a DOS-kernelben vagy annak adatterületén kihasználatlanul hagyott területekre másolják magukat, minden plusz memória-foglalás nélkül. (Bár mindezen módszerek alapvetõen a vírus detektálását hivatottak megnehezíteni, nem tekinthetõk igazi "álcázó"-funkcióknak, hiszen jóval inkább az egyszerû felhasználók, mintsem akár egy átlagos antivírus-program "átverésére" alkalmasak.)

 

Jelentõs különbségek ismerhetõk fel a vírusok azon tulajdonságaiban is, hogy mennyire "hajlamosok" a terjedésre, hiszen nyilvánvaló összefüggés ismerhetõ fel a vírusok fertõzési kísérleteinek száma, valamint a megfertõzött programok és a vírus-aktivitás felismerésének valószínûsége között. E szempontból a vírusokat általában négy csoportba szokták sorolni. A normális fertõzési sebességû vírusok általában csak a potenciális gazdaprogram futtatásakor vagy annak megnyitásakor próbálják azt megfertõzni. A gyorsan-fertõzõ vírusok ezzel szemben akár könyvtár-váltáskor vagy katalógus-keresés (DIR) során is fertõznek meg véletlenszerûen kiválasztott állományokat. (Ezen vírusok azért is különösen veszélyesek, mert például egy, a kérdéses - a tárban éppen aktív - vírust fel nem ismerõ a teljes lemezt átvizsgáló scanner futtatása során minden egyes állomány fertõzötté tehetõ.) Alapvetõen más stratégiát alkalmaznak a lassan fertõzõ vírusok, melyek egy, a felhasználó részérõl kezdeményezett, de potenciális gazdaprogramba irányuló írási kísérletig teljesen inaktívak maradnak, amikor is azonban megpróbálják megfertõzni azt. Mivel ezt az írási mûveletet közvetlenül vagy közvetetten, de mindenképpen maga a felhasználó kezdeményezi, ezért azt egyetlen "víruspajzs" sem minõsítheti illegálisnak, következésképp' e módszerrel gyakorlatilag minden megengedõ (a felhasználó részérõl védelmi felülbírálást elfogadó) vírusvédelem kikerülhetõ. Hasonlóan lassan terjednek az ún. ritkán/szelektíven aktiválódó vírusok, melyek a potenciális fertõzési lehetõségek igen kis részében, csak bizonyos speciális feltételek megléte esetén - pl. csak minden hónap második hetében v. csak 17h után, stb. - hajtanak végre fertõzési kísérletet.

 

 

Álcázási technikák

 

Mi történik azonban, ha a vírus által megtámadott rendszer a támadás pillanatában már valamilyen aktív vírusvédelemi rendszerrel van ellátva? Ez esetben az észrevétlen és/vagy "legális" fertõzés érdekében a vírusoknak különbözõ trükköket kell alkalmazniuk.

A mai antivírus programok "pajzs"-programjai elsõsorban az írási/módosítási ill. a rendszerterületekkel kapcsolatos mûveleteket felügyelik és/vagy korlátozzák a felhasználó által meghatározott módon. Ezeket általában a standard lemez-vezérlõ megszakítások átirányításával látják el. Az ún. tunneling (alagút) technikát alkalmazó vírusok ezt a védelmet az eredeti, a vírusvédelem aktiválása elõtti megszakítás-vektor megkeresésével próbálják megkerülni. Az ilyen módon megkaparintott címen elhelyezkedõ megszakítás-kezelõ közvetlen hívásával a vírusvédelem "bástyája" alatt fúrt "alagúton" keresztül annak tudta nélkül, gyakorlatilag a "háta mögött" végezhet illegális mûveleteket.

Teljesen logikusan a csak olvasásra megnyitható/megnyitott állományokat a legtöbb vírusvédelem megfertõzhetõség szempontjából figyelmen kívül hagyja, hiszen - elvileg - abba nem történhet írás (e helyett inkább az ezen írásvédelem eltávolítására tett kísérleteket figyelik). Ezt a feltételezést használják ki az ún. SFT-vírusok (System File Table - rendszer fájl-táblázat), melyek a DOS által a nyitott fájlokról és az azokkal végezhetõ mûveletekrõl vezetett nyilvántartásába - az SFT-be - "kézzel" belepiszkálva lehetõvé teszik az eredetileg csak olvasható fájlok írását is.

 

Az imént felsorolt álcázási módszerek elsõsorban egy új vírus a már aktív vírusvédelemmel ellátott rendszerbe jutását segítik elõ. A vírus sikeres terjedéséhez azonban nem elég a vírus rendszerbejutását és terjedését biztosítani, hanem a fertõzés tényének - és ennélfogva maga a vírus - minél késõbbi felismerésérõl is gondoskodni kell. Ennek biztosítására a számítógép-vírusok evolúciója során több módszer is kialakult.

Az álcázás legegyszerûbb technikáját alkalmazzák az ún. DIR-stealth vírusok (DIR-lopakodó vírusok), melyek arra a speciális tényre építenek, hogy a DOS a fájlok méretét azok listázásakor nem a FAT tábla (és ezen keresztül a ténylegesen elfoglalt hely), hanem a katalógusbejegyzésben eltárolt érték alapján állapítja meg. Ezen vírusok a katalógusbejegyzés megfelelõ "kozmetikázásával" az amúgy méretnövelõ fertõzés tényét próbálják meg "eltakargatni" az egyszerûbb víruskeresési metódusok elõl.

Hasonló, de jóval érzékenyebb elven mûködnek az ún. slack-vírusok. A DOS a lemez egységeken a fájlok számára logikai blokkokban ún. clusterekben foglalja le (lásd Rendszerprogramozás régebbi számai). A clusterméret a teljes logikai kötet méretétõl függõen a szektormérettõl 64KB-ig terjedhet. Ha azonban egy fájl hossza nem a cluster-méret egész számú többszöröse, úgy a fájl részére lefoglalt utolsó cluster végén ún. slack terület keletkezik. A slack vírusok ezt a tény kihasználva úgy "fészkelik be" magukat a gazdaprogramba, hogy annak kódjuk által felülírt részén eredetileg található tartalmát erre a slack-területre mentik el, majd aktiválásuk után onnan azt visszatöltve indítják el az eredeti gazdaprogramot. Így tulajdonképpen semmilyen plusz területet nem foglalnak le, ami jelentõsen megnehezíti felismerésüket. Ez utóbbi módszer elõnye a DIR-stealth technikával szemben az, hogy ez esetben a fájl végigolvasásával megállapítható mérete teljesen meg fog egyezni a katalógusbeli és természetesen az eredeti fájl méretével is. Hátránya azonban, hogy a fájl másolásakor az utolsó clusterben található nem terület nem kerül átmásolásra, a gazdaprogram eredeti kódjának helyreállítását és ezáltal futtatását lehetetlenné téve.

A álcázási technikák közül talán technikailag a legtökéletesebb védelmet nyújtó és ennél fogva a legveszélyesebb módszert az ún. lopakodó vírusok (stealth virus) alkalmazzák, amelyek megfelelõ rendszerfunkciók felügyeletének átvételével a fertõzött fájlok elérése esetén is - a víruskód kiszûrésével - a fertõzés nélküli állapotot tükrözik vissza. Ebbõl kifolyólag a fertõzés - az elõbb említett technikákkal szemben - még az amúgy meglehetõsen hatásos CRC ellenõrzés (lásd következõ szám) alkalmazásával sem szûrhetõ ki. Az ilyen képességekkel felruházott vírusok aktivált állapotukban - programkódjuk esetleges hibáiból kifolyólag hagyott áruló nyomok híján - gyakorlatilag NEM ismerhetõk fel.

Gyakorlatilag megfoghatatlan és általam is - szigorúan szakmailag - zseniálisnak tartott technikát alkalmaz a MegaStealth nevû vírus. Az AT-kben a mágneslemezes egységek megfelelõ hardver-megszakítások segítségével jelzik az utolsó parancs végrehajtását, azaz hogy készek újabb lemezes mûveletek végrehajtására. A szóban forgó vírus - minden általam ismert vírusvédelmet kicselezve - erre a megszakításra ül rá, hogy a beolvasott - esetlegesen vírusfertõzés nyomait tartalmazó - adatpuffert saját céljainak megfelelõen manipulálhassa. A módszer azért fantasztikus, mert - mivel a legalacsonyabb, a hardver-szinten mûködik -a megszakításvektor átirányításától eltekintve teljesen észrevehetetlen marad a vírusvédelmek számára és így képes magát az álcázási metódust is elrejteni.

 

Bár nem nevezhetõ kifejezetten álcázási metódusnak, közvetett célját tekintve mindenképpen ide sorolható az ún. fake floppy-boot (hamis floppy-boot) technika. A modern rendszer-BIOS-ok setup programjában általában lehetõség nyílik a boot-sorrend meghatározására, azaz, hogy a BIOS az operációs rendszert elõször a floppyn, vagy mindjárt a merevlemezen keresse. A kérdéses technikát alkalmazó programok a megfelelõ setup-beállítás módosításával vagy az esetleges hajlékonylemezes meghajtó setup-beli törlésével és újbóli "felvételével" manipulálva érik el, hogy mindig - az általuk már elõzõleg megfertõzött - merevlemez MBR-je kerüljön betöltésre, ami után - már aktív vírusfunkciók mellett - az eredeti beállításnak megfelelõen esetleg egy lemezes bootot is emulálnak.

 

 

Kódolt és polimorf vírusok

 

De mit tehet akkor a vírus, ha jelenléte már nyilvánvalóvá vált, esetleg már sikerült is lokalizálni? Nos, ebben az esetben már csak egyet: megnehezítheti visszafejtését, hatásmechanizmusának és mûködési elvének megállapítását beépített önkódolással, valamint elõzõleg gondoskodhat létrehozott másolatai felismerhetetlenségérõl hasonlóságaik minimalizálásával.

A kódolás olyan folyamat, melynek során egy adott adathalmazból egy másikat képzünk oly módon, hogy az magában semmilyen utalást ne tartalmazzon az eredeti adathalmaz jelentésére. Az eredeti adathalmazt csak a kódolási algoritmus valamint a kódoláshoz használt ún. kódolási kulcs ismeretében lehet visszaállítani.

A vírus kódolása két okból is elõnyõs számára: egyrészt nehezebben fejthetõ vissza, így felfedezése után akár hetekkel is elhúzhatja a megfelelõ vakcina (értsd:antivírus program) elkészítését, másrészt a kódolási kulcs változtatásával (ami ugye megváltoztatja a kódolt adathalmazt megjelenését is) lehetetlenné teheti másolatainak felismerését hagyományos szignatúra-kereséssel (lásd következõ szám).

 

A kódolás legegyszerûbb esetében a kódolási kulcsot maga a vírus írója határozza meg és azt a vírus a másolatokban sem változtatja meg. E módszer legnagyobb hátránya, hogy bár a vírus közvetlen felismerését (pl. Norton F3-mal) pl. árulkodó - esetenként megjelenített - üzenetek révén lehetetlenné teszi, a vírus egyetlen példányának felfedezése után semmi védelmet sem nyújt már a legegyszerûbb, hagyományos szignatúra-keresõkkel szemben sem.

Kézenfekvõ a következõ fejlõdési szint: a kódolási kulcs dinamikus változtatása. Csakhogy maga a kódoló algoritmus még ekkor is ugyanaz marad minden példányban és ha nem is a víruskód, de maga a kódoló algoritmus alapján ugyanúgy felismerhetõvé válik.

 

A polimorf vírusok kódolt vírusok. Azonban a hagyományos kódolt vírussokkal szemben - melyek fix kódoló és dekódoló algoritmust alkalmaznak - a polimorf vírusok esetén a kódolási algoritmus is minden egyes példány esetén eltérõ. A legegyszerûbb polimorf vírusok a tényleges - mindössze néhány gépi utasításból álló - dekódoló algoritmus utasításai közt véletlenszerû, magát a dekódolási algoritmust nem befolyásoló "szemét" utasításokat helyeznek el. Ennél fejlettebb módszernek tekinthetõ, amikor magát a kódoló algoritmust is egy elõre meghatározott "arzenálból" véletlenszerûen választja ki a vírus új példányok létrehozásakor. Az ilyen, gyakorlatilag egymásra egyetlen bájtban sem hasonlító másolatokat létrehozó vírusokat ún. Mutation Engine-nel (mutációs motor) felvértezett vírusokat gyakorlatilag hagyományos módon már nem lehet felismerni. De ez már a következõ szám témája...

 

A cikk Winword DOC formátumban

- STING -
eMail:PC-XUser@IDG.HU, Subject: "RProg rovat"


Vissza a PC-X User 10 fôoldalához