Az első vírus, az első könyv, és egy elfelejtett megoldás A kezdetekről 1988 őszét írtuk, amikor az első „potyogós”, azaz a „Cascade 1701” vírus a kezünkbe került. Hihetetlen volt nézni, ahogy a hardver szempontból hibátlan gép egyszer csak elkezd értelmetlen dolgokat csinálni, „potyognak a betűk”! Akkor a Magyar Néphadsereg informatikai intézetének szervizében dolgoztam, és – akkori értelemben –, „rengeteg” PC-‐t üzemeltettünk. Nem kellet sok idő, és kiderült: ez bizony egy vírus! Hallottunk már ilyesmiről, de egyikőnk sem találkozott még vele. Talán ismerősen hangzik a COCOM lista, amely egy csúcstechnológiai termékeket tartalmazó feketelista volt. Természetesen a PC is szerepelt ezen, így eredeti IBM gép nemigen kerülhetett a kelet Európai országokba, így a „potyi” minden gépen aktiválódott, amelyiket megfertőzött. Fiatalok voltunk, lelkesek, és szerencsénkre az akkori katonai vezetők kellően „megrémültek”, így szinte korlátlan lehetőségeket biztosítottak, hogy megfejthessük, megérthessük ezt a kódot, és megtaláljuk a megoldást, ugyanakkor igen jól jött a „sereg” presztízsének a hírverés: van megoldás, mi több katonák készítették. Természetesen szabadon adhattuk mindenkinek. Nem kellet soká várni ezután, és „dőltek” a vírusok. 1988 év végén három élő példányunk volt, egy évvel később már közel száz. Ekkor jött 1989 februárjában a rendszer folyamatos újraindítását okozó „Reboot”, majd 1989. október 13.-‐a, a pánik napja. Születésének dátuma a szakirodalmi adatok szerint 1987 decembere, ekkor fedezték fel a Jeruzsálemi Héber Egyetem (Hebrew University of Jerusalem, Israel) számítógépes hálózatában. A fertőzést szerencsére nem sokkal annak megtörténte után diagnosztizálták, és viszonylag rövid idő alatt sikerült elhárítani. Akkor a legközelebbi Péntek 13-‐a éppen arra az évfordulóra esett, amikor a palesztinok elkezdtek harcolni az izraeliek ellen, így a vírusakció valószínűleg a kor technikai színvonalának megfelelő merényletkísérlet volt.1
Rejtélyek, az ismeretek, a tapasztalat és a tudás hiánya A kezdetekkor a PC hardvere, a BIOS, az általánosan alterjedt MS-‐DOS számunkra szinte csak rejtélyeket, nem dokumentált, ismeretlen funkciókat tartalmazott. Elképzelhető, mi volt a helyzet a felhasználókkal! Ilyen körülmények között megmagyarázni, hogy a gépeket meg lehet fertőzni, a 1
Víruslélektan [29]
Az első vírus, az első könyv, és egy elfelejtett megoldás
1
fertőzés terjed, és kárt okoz, rombol..., szinte lehetetlennek tűnt! Rengetegen kételkedtek, hitetlenkedtek, és sokszor csalással vádoltak mindenkit, aki állította: márpedig létezik számítógép vírus! Nos, 89-‐90 fordulója meggyőzött mindenkit: vírus márpedig van!
Az első kelet Európában megjelent könyv A „Víruslélektan”2. 1990 év elejét írjuk, és ezen előadás első fejezetétől alig telt el másfél év! Úgy gondoltuk, megérett az idő arra, hogy bővebb, részletesebb ismereteket közöljünk a már annyiszor emlegetett vírus témáról. Szerettünk volna szakembereknek és kezdőknek is olyan elméleti és gyakorlati ismereteket adni, melyek az elmúlt időben szerzett tapasztalatunk eredményeként szerintünk elengedhetetlen volt ahhoz, hogy sikeresen küzdhessünk a számítógépek betegségei, a beteges számítógép programozók őrült agyszüleményei ellen. Sajnos, – különböző külső hatások miatt –, nem írhattuk le e könyvben mindazt, amit szerettünk volna, nem publikálhattunk – még részleteiben sem olyan kódot, amely alapján bárki elkezdhette volna egy újabb vírus kód fejlesztését. Így a könyv, – ugyan úttörő módon elsőként adott átfogó képet a számítógépes vírusokról, azok lélektanáról, ismertetve több mint nyolcvan általunk ismert vírus működését és hatását –, mégis inkább tekinthető ismeretterjesztő műnek, mintsem szakkönyvnek. Ugyanakkor elsőként jelent meg nyomtatásban „vírushatározó”, tipológia, és természetesen a vírusok bemutatása mellet a hazai és külföldi fejlesztésű felismerő és eltávolító programok ismertetése, használatuk az egyes vírusok ellen. A szerzők szándékosan nem saját munkájukat helyezték előtérbe, hanem a célt: ismeretterjesztés, küzdelem a számítógépes vírusok ellen.
Kollégák, és a „konkurencia” Megtisztelő számomra, hogy én beszélhetek a hőskorról, ám kötelességem megemlíteni kollégáimat, barátaimat, és természetesen mindazokat, akik velünk közel egy időben, – vagy tán kicsit később – hazánkban ezzel a témával foglalkoztak, és elvitathatatlan érdemeket szereztek e téren. Elsőként Endrédi Gábort, Kis Jánost, és Szegedi Imrét kell említenem, akik a kezdetektől vettek részt a vírusok elleni programok fejlesztésében, a megszerzett tudás publikálásában. A kilencvenes évek elejétől aztán többen is komoly hírnévre tettek szert, többek között dr. Leitold Ferenc (Checkvir), Szappanos Gábor (VirusBuster), vagy Szőr Péter, aki ma a Symantec vezető fejlesztője.
2
Farmosi István, Kis János, Szegedi Imre [1990, Alaplap könyvek]
Az első vírus, az első könyv, és egy elfelejtett megoldás
2
A „vírus”- védelmi filozófiánk változása A fejlődés, – ha szabad ezt a szót az ismert vírusok számának hihetetlen növekedésére használni –, óriási volt, azonban feltűnt, hogy az ismert vírusok nagy többsége nem eredeti „alkotás”, azaz a szerző csak egy, vagy több már létező vírus programkódjának átírásával „készít” egy újat, azaz egy új mutációt, lehetőleg úgy, hogy azt az ismert kereső programok ne ismerjék fel. Az eredendően új vírusok száma alig érte el a 20-‐25%-‐ot, mégis 1991-‐re az felderített vírusok száma már közel 1500 volt! Nyilvánvalóvá vált számunkra, hogy ha ilyen ütemben szaporodnak a vírusok rövidesen képtelenség lesz egyenként őket megfejteni, megérteni, ellenszert (felismerő, és eltávolító) készíteni, és azt időben eljuttatni a felhasználókhoz, ügyfelekhez. Ebből következően az is nyilvánvalóvá vált, hogy más utat kell keresni, ha problémát meg akarjuk oldani. Hittük, hogy meg tudjuk oldani! Felmerült a következő kérdés:
Van hasonlóság a biológia és számítógép vírusai között? „Az egészségügyi járványtani számításokkal foglalkozók már a múlt század ötvenes éveiben felfigyeltek arra, hogy egy fertőző gócból kiinduló járvány terjedése nagyon jól modellezhető. Amennyiben ráadásul egy gyógyíthatatlan kórról van szó, akkor a megfertőzhető népesség mintegy kétharmadának kihalása után a fertőzés önmagától már nem terjed tovább, majd teljesen megszűnik. Ezt a teóriát a középkor nagy pestisjárványai a gyakorlatban igazolták. S lám: hasonló törvényszerűségek vonatkoznak a vírusprogramok terjedésére is. A számítógépvírus az élő anyag működőképes modellje! E tárgyban az első komoly publikáció egy ilyen járványmatematikával foglalkozó szakember tollából látott napvilágot még 1957-‐ben! (N. T. J. Baih The Mathematical Theory of Epydemics. Ed.: Hafner 1957.)” 3 A fenti idézet megalapozza a választ: Igen, van hasonlóság! A következőkben kíséreljük meg összevetni a biológia és a számítógépes vírusok tulajdonságait annak érdekében, hogy érthetővé tegyük miért változott filozófiánk, miért vetettük el a „víruskeresést” és fordultunk inkább a „biztonság”, az informatikai biztonság felé. Természetesen az alábbi összevetést a teljesség, és a teljes azonosság igénye nélkül tesszük, célunk mindössze rávilágítani arra, hogy ha sikerrel járunk, és kellő számú tulajdonságot tudunk megalapozottan felsorolni, melyben a két vírusfajta hasonlít, talán van esélyünk arra, hogy a sokkal nagyobb virológiai tapasztalatokkal rendelkező biológia megoldásait alkalmazzuk a számítógépes vírus elleni küzdelemben is. 3
Víruslélektan [12]
Az első vírus, az első könyv, és egy elfelejtett megoldás
3
Nézzük hát: •
„kicsi” Gondoljunk arra, hogy az emberi szervezethez képest milyen apró például egy influenza vírus. Ez természetes is, hiszen ha a vírus az emberi szervezetben a fertőzést követően jelentős, az érzékszerveink által érzékelhető változást okozna, akkor jelenléte, – és ezzel együtt a fertőzés ténye –, azonnal észlelhető lenne, így a vírus lappangási ideje nagyon lerövidülne. Így volt ez a számítógép esetén is. Átlagos méretük néhány száztól néhány ezer bájtig terjedt, míg például az MS-‐DOS 5.0 operációs rendszer programjainak átlag mérete 24 ezer bájt körüli volt, ugyanakkor egyes magas szintű nyelven íródott program (pl.: Clipper) 150 ezer bájt alatt nem igen keletkezett.
•
„csak adott fizikai környezetben képes létezni” Vegyük a hepatitisz vírus példáját, amely házi állatainkra teljesen veszélytelen. Csak az emberi szervezetben képes létezni, csak annak „szerkezete” alkalmas arra, hogy a vírust hordozza, szaporítsa. Így érthető, hogy miért nem terjedhet PC/MS-‐DOS környezetre szán vírus például Apple gépeken. Alapvető eltérések vannak a gépek hardvereiben és operációs rendszereiben, mint ahogy jelentős eltérés van a kutya és az ember genetikai szerkezetében.
•
„felhasználja környezete erőforrásait” A vírus nem rendelkezik például „emberi” értelemben vett anyagcsere folyamatokkal, nem tud önállóan „lélegezni”, helyet változtatni, azaz hordozó közegét önállóan elhagyni. Ez természetes is, hiszen ha rendelkezne ilyen tulajdonságokkal, fizikai méreteinek is nőnie kellene, ami az előzőek szerint megengedhetetlen. A fentieket a számítógép vírusokra úgy értelmezhetjük, hogy azok is felhasználják BIOS-‐ának, operációs rendszerének funkcióit, erőforrásait. Gondoljunk például a gépek órájára, amitől a péntek 13.-‐a az lesz ami, vagy a diszkek kezelésére szolgáló funkciókra (fájl műveletek, lemezek formázása). Ugyanakkor a számítógép vírus sem képes elhagyni azt a gépet, amelynek nincs kapcsolata a külvilággal, és nem használ cserélhető adathordozót.
•
„a fertőzés észrevehetetlen a szervezet érzékszervei által” Hiszen az ember sem érzékeli tudatosan azt a pillanatot, amikor elkapja az influenzát. Érzékszervei erre alkalmatlanok, ráadásul még környezete, életritmusa sem teszi azt lehetővé, hogy tomboló járvány idején ne menjen dolgozni, ne találkozzon másokkal, akik, ha nem is tudnak róla, már hordozzák a fertőzést.
Az első vírus, az első könyv, és egy elfelejtett megoldás
4
Ehhez hasonlóan a számítógépekben sem volt érzékelhető az a pillanat, amikor egy fertőzött program elindítása után az egyes programok megfertőződtek, hiszen mindez a másodperc töredéke alatt zajlott le. •
„lappang” Azaz „elbújik” és csendben arra készteti a szervezetet, hogy annak élete, léte alatt őt (is) szaporítsa. Gondoljunk arra, hogy a biológiai vírus önreprodukcióra képtelen, egyszerű „szervezet”, amely csupán arra képes, hogy megváltoztassa a megfertőzött szervezet sejtjeit oly módon, hogy azok szaporodás – ami természetes folyamat –, őt is reprodukálják! Hasonlóan használja fel a számítógép vírus is a programjainkat, – melyeket tekinthetünk ez esetben a szervezet sejtjeinek is –, hogy azok „léte”, azaz futásuk elsősorban őt szaporítsa. Mit is jelent ez a lappangási idő? Azt az időszakot, ami a fertőzés pillanatától addig tart, amíg az adott szervezet tudatosan nem érzékeli a fertőzésből következő betegség jeleit.
Természetesen folytathatnánk tovább a tulajdonságok összevetést, azonban úgy vélem elegendő ennyi ahhoz, hogy belássuk: van hasonlóság! Így tehát nézzük, hol avatkozhatna be az emberi társadalom a biológiai vírusok szaporodásába, hol tudná azokat megfékezni, azaz hogyan érhetnénk el azt, hogy ne alakuljon ki járvány? Úgy tűnhet, hogy nincs rá esélyünk, azaz nem tehetünk semmit, pedig két tulajdonságot – az előbbiek alapján mégis csak kihasználhatunk, ezek pedig a szervezet önvédelmi rendszere, illetve a vírus lappangási ideje.
A szervezet önvédelmi rendszere A tulajdonságok összevetésénél szándékosan hagytuk figyelmen kívül ezt, hiszen ennek léte, ismeretei, a korábbi fertőzések tapasztalata alapvetően befolyásolja az élő szervezet viselkedését egy újabb fertőzés esetén. Ezt úgy is fogalmazhatjuk, hogy az élő szervezet „tanul”, emlékszik egyes korábbi fertőzésekre, sőt a mutációkat is képes – bizonyos korlátok között – felismerni, és a nélkül leküzdeni a fertőzést, hogy annak tényét a szervezettel tudatosítaná. Ugyanakkor az élő szervezet önvédelmi rendszere – gondolok itt például a „T” sejtekre –, nem rendelkezik a szervezet egyes sejtjeinek genetikai mintájával, így nem képes a fertőzött sejtek helyett új, „tiszta” sejteket előállítani. Leegyszerűsítve a dolgot, mit tesz az élő szervezet? Elpusztítja azokat a sejteket, melyekben az általa felismert fertőzést azonosítja! Honnan tudja önvédelmi rendszerünk, hogy melyik a fertőzött sejt, és melyik nem? Megtanulta!
Az első vírus, az első könyv, és egy elfelejtett megoldás
5
Ezt hívhatjuk a számítógépes vírus esetén „víruskeresőnek”. Egy ember visszafejtette, majd megértette a működését, készített egy programot – kvalitásaitól, tudásától függően jót, vagy kevésbé jót, és ezt – mint a gép önvédelmi rendszerének részét felhasználva – meggyógyította a szervezetet. Menyivel egyszerűbb lenne a helyzet, ha az ember sejtjei önmagukról tudnák, hogy milyennek is kell lenniük! Az önvédelmi rendszer mechanizmusa egzakt információkra támaszkodhatna, nem pedig a múltban megtanult ismeretekre. Ez a felismerés vezetett a 90-‐es évek elején oda, hogy olyan önvédelmi rendszerrel láttuk el programjainkat, melyek megvalósításához éppen a vírusok kódja vezetett! Készült egy „immunizáló” program, amely a DOS környezetben használt felhasználói és rendszer programokban megkereste azok belépési pontját, majd a program mögé fűzött egy olyan kódot, amely a program indításakor ellenőrizte „önmagát”, és abban az esetben, ha megváltozott, ha a program nem „önmagával” (azaz az immunkóddal) kezdődött riasztás küldött a kezelőnek! Természetesen ez nem akadályozta meg a vírus kód életre kelését, de a lappangási időt gyakorlatilag nullára csökkentette, lehetőséget adva a felhasználónak arra, hogy beavatkozzon. A kérdés csupán az, hogyan? Az immunkód képes volt „visszaállítani” az eredeti, – a fertőzés előtti állapotot, ám egy „rezidens” részt tartalmazó vírus esetén ez már hatástalannak bizonyult. Maradt ilyen esetekre ismét csak a tudás alapú víruskereső, amely vagy felismerte, vagy sem az adott fertőzést. Természetesen az is gondot okozott, hogy ha nem ismertük fel az immunizálás előtt, hogy a kód már fertőzött, bizony a vírust (a kóddal együtt) immunizáltuk. Sajnos ez a megoldás sem vezetett egyértelműen jó eredményre, mégpedig azért nem, mert a programok egy része „nem tűrte” az immunizálást. Márpedig, ha csak egy olyan program is maradt, amelyet nem tudtunk önvédelemmel ellátni, a megoldás mit sem ért. Arról nem is beszélve, hogy „placebo” hatást váltott ki a felhasználókban, sőt hazánkban és a környező országokban is keletkeztek olyan víruskódok, amelyek „kiiktatták” ezt az önvédelmi részt. Volt azonban ennek haszna is, mivel igen komoly tapasztalatokat szereztünk a tekintetben, hogyan is lehet egy programot vírus ismeret nélkül helyesnek, tisztának minősíteni: Akkoriban egyre több magas szintű programnyelvet kezdtek használni a fejlesztők. Ezek a fordítók minden esetben tartalmaznak olyan „segéd” eszközöket, amelyekkel egyszerűbbé, gyorsabbá teszik a fejlesztést, gondolok itt például a random generátorokra, fájl, illetve képernyő műveletekre, stb. Rájöttünk, hogy az egyes fordítók (Borland Pascal; Microsoft, Lattice, Watcom C, Clipper, stb.) által generált kód mindig a fordítóra jellemző utasítás sorozattal kezdődik. Nyilván való, hogy egy programnak minden esetben csak egy belépési pontja van (ott, ahol az operációs rendszer elkezdi annak végrehajtását), ellenben kilépési pontja számtalan lehet.
Az első vírus, az első könyv, és egy elfelejtett megoldás
6
Ugyanakkor az is nyilvánvaló, hogy egy vírus nem képes a kilépési pontok felkutatására, erre sem ideje, sem pedig tudása nem lehet (lásd: „kicsi”). Összegezve tehát az önvédelem nem jó megoldás, azonban a lappangási idő csökkentése, megszüntetése eredményre vezethet. Elérkeztünk 1993-‐hoz, és minden erőnkkel azon voltunk, hogy megoldást adjunk a problémára. Magyarázatul ehhez még annyit, hogy akkoriban több ezer vírusról beszéltünk már, és a napi szaporulat is elkésztő számosságot mutatott. Majdnem teljesen elvetettük a „víruskeresést”, és egyre inkább a biztonsági kérdések felé fordultunk. Természetesen, ha biztonságról beszélünk, már nem tűnik olyan „ördögtől való” dolognak szabályokról is beszélni. Márpedig, ha szabályokat hozhatunk – az üzemeltetést, a használható programokat tekintve –, biztonsági szempontból lényegesen jobb helyzetben vagyunk, és lényegesen jobb eredményeket érhetünk el, mint ha „csak” vírust keresnénk!
Az „elfelejtett megoldás” A következőkben egy megvalósult, ám csak rövid életet megélt biztonsági, vírus – védelmi megoldás elméleti hátterét fogom bemutatni, melyhez az előzőekben leírt történetek sikerei, kudarcai és tapasztalatai vezettek. Feltételeztük, hogy egy vállalati informatikai rendszer elemei (gépei) – hasonlóan a vállalat más erőforrásaihoz és eszközeihez –, csak szabályozott módon, előre meghatározott célra használhatók, és nem okozunk azzal jelentős hátrányt, ha megakadályozzuk olyan programok használatát, amelyek eredete és állapota a vállalat számára ismeretlen, vagy nem engedélyezett. Tudtuk, és megtapasztaltuk, hogy nincs – és nem készíthető –, olyan szoftveres megoldás, amelyet ne lehet kijátszani, amelyet ne lehetne kikapcsolni. Erre több, – rezidens résszel rendelkező vírusvédelmi szoftver is kísérletet tett (viszonylag csekély sikerrel), és természetesen rögtön előkerültek olyan kódok, amelyek célzottan ennek megszüntetésére készültek. Nem maradt más, csak egy hardverrel támogatott eszköz! Hasonló következtetésre természetesen mások is eljutottak, ám ők még mindig vírust akartak keresni, mintha az lenne a legfontosabb, hogy felismerjük a fertőzést, nem pedig az, hogy egészségesen tartsuk a szervezetet! Az eljárás lényege a következő: •
A telepítés előtt kíséreljük meg minden rendelkezésre álló eszközzel megállapítani, hogy van e fertőzött program a gépen. Erre felhasználhatjuk saját kódelemző egységünket (pl.: fordítók
Az első vírus, az első könyv, és egy elfelejtett megoldás
7
által generált kezdő kódok), saját elemző és vírus ismereten alapuló programunkat, illetve más gyártók által készített víruskereső programokat is. Egyértelmű: minél több módszerrel, minél több eszközzel ellenőrizzük a rendszert, annál nagyobb biztonsággal állíthatjuk, hogy „tiszta”, de ezt soha nem jelenthetjük ki teljes biztonsággal! Sebaj. •
Következő lépésként készítsünk egy kellően védett „adatbázist”, amely tartalmazza az előzőekben ellenőrzött minden kód belépési pontjának környezetéből nyert információkat. Ezeket természetesen úgy kell megválasztani, hogy kellő biztonsággal megállapítható legyen, ha a programnak ez a része megváltozik, ugyanakkor nem cél, hogy ezek alapján az eredeti kód helyreállítható legyen. Nem gyógyítani akarunk, hanem elkerülni a járványt!
•
Telepítsünk a rendszer minden gépre egy olyan alacsony szintű modult, amely kézben tartja a BIOS lemezműveleteit, rendszertöltő funkcióit, ugyanakkor a DOS indulása után annak fájl műveleteit, és természetesen a programok indítását is. Ezen BIOS kiterjesztés feladata az, hogy csak és kizárólag azokat a kódokat engedje futni, amelyek pillanatnyi állapota megegyezik az „adatbázisban” tárolt adatokkal.
Ezzel elértük a következőket: 1. Nem kerülhet idegen program a rendszerbe a „rendszer gazdájának” tudta, és engedélye nélkül; 2. Nem indulhat el olyan program, amely nem esett át egy megelőző minőség ellenőrzésen, függetlenül attól, hogy az alatt felismertük-‐e a benne rejtőző vírust; Természetesen rögtön felvetődik a kérdés: mi történik abban az esetben, ha nem ismertük fel a fertőzést, így engedünk egy fertőzött programot futni? A válasz igen egyszerű: semmi! (sőt, adott esetben akár előnyünkre is fordulhat ez a szituáció.) Gondoljuk meg: bármilyen módon is fertőződik meg egy olyan kód, amelyről mintát vettünk, az többé nem indulhat el, mi több azonnal érzékelhetővé válik. Az ilyen kód kiesik a „szaporító szerepből”, tovább fertőzni nem tud. Ugyanakkor az is egyértelmű, hogy a megváltozott és ezért nem futtatható kód pillanatnyi (fertőzött) jellemzői éppen a vírus jellemezői lesznek, és ami talán a legfontosabb, jó esélyünk van arra, hogy megkeressük azt az egy programot, amely pillanatnyi jellemzői alapján jónak látszik (tehát futtatható), ám azok a jellemzők kellő hasonlóságot mutatnak azzal, amelyik nem indul el! Nyilván az a kérdés is felmerül, melyen drága egy hardver eszköz beszerzése minden gépbe! Igen, más hardvert (is) tartalmazó vírusvédelmi rendszer ára bizony komoly költségeket jelentett, ám mi máshogyan oldottuk meg. Akkoriban, szinte minden hálózati kártyán volt egy úgynevezett „remote boot EPROM” foglalat, amely arra szolgált, hogy egy központi szerverről lehessen operációs rendszert Az első vírus, az első könyv, és egy elfelejtett megoldás
8
tölteni az adott munkaállomásra. Mi erre a helyre beültethető eszközt készítettünk, így a költségek minimálisak voltak, ugyanakkor a funkcionalitás megmaradt. Ez a rendszer 1994-‐95 között üzembe állt több hazai vállalatnál, középiskolában és kórházban. Sajnos rövid életű megoldás volt, mert fejlődött a PC hardvere, jött a Windows, és felváltotta a DOS-‐t, ám addig egyetlen olyan cégnél sem szenvedtek semmiféle vírus okozta kárt, ahol ez működött! Tudom, nyilvánvaló, hogy tökéletes megoldást adni erre a problémára nem tudunk, egyszerűen csak azért, mert nincs olyan! Farmosi István Hacktivity konferencia, 2010
Az első vírus, az első könyv, és egy elfelejtett megoldás
9