Detekce a dezinfekce virů pomocí antivirových programů

Skener (Scanner)

Na počátku technologie skenování programů (zkráceně skenerů) byl geniální nápad: Vybrat z těla virů nějaké charakteristické skupiny instrukcí a takto získané sekvence použít pro hledání napadených programů. Tato koncepce sice vyžaduje pravidelnou aktualizaci (skener umí najít pouze viry, které zná), ale nabízí za to jedinečnou schopnost rozpoznat napadený program ještě před tím, než ho začneme používat.
Pokud je uživatel zvyklý prohlížet přicházející programy a diskety aktuální verzí nějakého kvalitního skeneru, snižuje tak výrazným způsobem pravděpodobnost napadení svého systému.
Dobré skenery jsou sice do jisté míry schopné rozpoznat i nové varianty starších virů, ale na tuto vlastnost není možné příliš spoléhat. Autor viru je zde ve výhodě a má možnost si vyzkoušet, zda aktuální verze používaných skenerů jeho dílko odhalí, či nikoliv.
Skenery zvyšují své šance na zachycení nové varianty tak, že používají více různých sekvencí pro jeden virus. To také umožňuje přesnější rozpoznání konkrétního viru a snižuje pravděpodobnost falešného poplachu.
Ani více sekvencí však nedovoluje dostatečně přesně rozlišit jednotlivé varianty virů tak, jak to vyžaduje třeba CARO konvence pojmenování virů (nejblíže k ní je F-PROT antivirus). Některé skenery se proto snaží o tzv. exaktní identifikaci, kdy po nalezení sekvence ještě spočítají kontrolní součty konstantních oblastí v těle viru a pak teprve mohou s jistotou tvrdit, že se jmenuje třeba Vienna.648.Reboot.A. Pro praktické použití sice není takto detailní rozlišení nezbytně nutné, ale nějaká forma přesnější identifikace snižuje pravděpodobnost, že se antivirový systém pokusí léčit napadený soubor nevhodným postupem a zníčí ho.
Výběr spolehlivé sekvence býval relativně snadnou záležitostí. Autoři virů se proto pokoušeli znesnadnit detekci svých dílek tím, že začali psát zakódované viry. V takovém případě je možné sekvenci vybrat pouze z velmi malé části kódu - dekryptovací smyčky. Zbytek těla viru je v každém exempláři jiný.
Opravdová legrace ovšem začíná až s příchodem polymorfních virů, které umí generovat různé tvary dekryptovacích smyček. Pro některé z nich je sice možné stvořit sekvence (nebo několik sekvencí), která vir zachytí, ale ta už obsahuje tolik variabilních částí, že se často najdou i zdravé programy, ve kterých nějaký fragment kódu nebo dat takové sekvenci vyhovuje. Většina polymorfních virů ale generuje takové dekryptory, že nelze hledání podle sekvencí použít. Skenery se nějaký čas snažily o rozpoznávání polymorfních virů pomocí jednoúčelových funkcí, ale to byl vlastně krok zpět k vyhledávacím programům se všemi jejich nevýhodami. Moderní skenery proto obsahují emulátor strojového kódu, kterým se pokouší emulovat provedení smyčky, a pak mohou hledat sekvence až v dekryptovaném těle viru.
Kódování viru není jedinou metodou, jak skenerům znepříjemnit život. Skenery totiž obvykle nehledají sekvence v celém souboru, ale pouze v jeho vybraných částech. Stačí tedy umístit tělo viru na náhodně vybrané místo uprostřed napadeného programu a vytvořit k němu "cestičku". Kvalitní skener se s tím vypořádá, ale jeho tupější bratříčci mají smůlu.
Kvalitní skenery obsahují tzv. anti-stealth techniky, které dokážou obcházet aktivní stealth viry. Pokud je totiž takový virus rezidentní v paměti, a antivirus nemá anti-stealth techniky, bude se nám systém jevit jako čistý - nezavirovaný. V takovém případě musí skener spoléhat pouze na test operační paměti, který může (ale nemusí virus) prozradit.
Lepší skenery dokážou prohlížet i komprimované soubory (PKLITE, LZEXE, ARJ, ZIP, RAR…). Ukázkovým antivirem je v tomto směru například Kaspersky Anti-Virus.
Skenery jsou celkově zřejmě nejdůležitejší částí většiny antivirů. Pokud jsou doplněny heuristickou analýzou dokážou detekovat i neznámé viry. Skenery dokážou prohlížet na výskyt virů: operační pamět, soubory, dokumenty Wordu, sešity Excelu…, systémové oblasti disku (boot sektor, MBR…). Skenery mohou být navíc ve dvou provedeních:

Bližší informace o moderních skenerech lze najít v článku "Skenery - detaily".

Kontrola integrity (integrity checker, CRC checker…)

Kontrola integrity je založena na porovnávání aktuálního stavu důležitých programů a oblastí na disku s informacemi, které si o nich kontrolní program uložil při jejich příchodu do systému nebo při své instalaci.
Jestliže se do takto chráněného počítače dostane vir, tak na sebe zdvořile upozorní změnou některého z kontrolovaných objektů a je záhy detekován. Takto je možné spolehlivě zachytit i nové viry, o kterých zatím nic neví skenery a které nemusí odhalit ani heuristická analýza.
Aby se tato idylka proměnila v realitu je nutné kontrolu integrity správně nainstalovat. To především znamená zahrnout do seznamu kontrolovaných objektů pokud možno všechny důležité a často používané programy.
Existují ovšem i soubory, jejichž kontrola nemá smysl. Sem patří některé starší programy, které si svou konfiguraci zapisují přímo do svého EXE-souboru (například TC.EXE - kompilátor Turbo C od firmy Borland). Jejich kontrola je samozřejmě také možná, ale při změně nastavení spustí falešný poplach. Pak už záleží je na znalostech uživatele, jestli dokáže rozpoznat, o co se jedná.
To ovšem není jediný problém. Snadno může dojít k této situaci: Na počítač napadený boot virem, je nainstalována kontrola integrity, která si mimo jiné uschová i kopii boot sektoru. Po čase je vir nalezen a odstraněn nějakým jiným antivirovým programem. Při svém dalším spuštění kontrola zjistí, že obsah boot sektoru už není, co býval. Oznámí to uživateli a dotáže se, zda je vhodné obnovit správný stav. Pravděpodobně dostane souhlas a s pocitem dobře vykonané práce vrátí vir do boot sektoru.
Tato situace jistě není příliš milá. Proto jsou většinou i antivirové systémy založené na kontrole integrity obvykle vybaveny nějakým skenerem. I tak se ovšem před jejich instalací vyplatí zkontrolovat i disk nějakým jiným, kvalitním, skenerem.
Viry většinou napadají soubory tak, že modifikují jejich začátek a za konec se připojí. Na základě odložených informací o souboru se tak se ho může program pro kontrolu integrity pokusit odstranit, aniž by o něm cokoliv věděl. A protože si musí už kvůli detekci pamatovat kontrolní součty celého souboru, může snadno kontrolovat, zda byl jeho pokus o léčení úspěšný.
Díky tomu patří odstraňování viru programem pro kontrolu integrity k relativně bezpečným postupům. (Tedy ne že by bylo tak úspěšné, ale program pro kontrolu integrity je schopen zkontrolovat, jestli se soubor skutečně podařilo uvést do korektního stavu).

Klasických programů pro kontrolu integrity pomalu ale jistě ubývá. Většinou se vyskytují ve spojení s on-demand skenerem, což značně snižuje nároky na uživatele. Uživatel v tomto případě totiž nemusí ručně analyzovat změny v souborech, místo toho takto postižené soubory automaticky otestuje on-demand skener, který je často obohacen i o heuristickou analýzou pro detekci neznámých virů.

Heuristická analýza (Heuristic Analyzer - Code Analyzer)

Heuristická analýza je další z mnoha kouzelných termínů, které věrně doprovázejí moderní antivirové programy. V podstatě jde o rozbor kódu hledající postupy pro činnost virů typické nebo nějak podezřelé. Tímto způsobem lze odhalit i dosud neznámé viry. Z propagačních materiálů a článků v populárních počítačových časopisech je snadno možné získat dojem, že heuristická analýza navždy vyřešila všechny problémy se současnými i budoucími viry.
Není tomu tak. Stále se ještě objevuje mnoho virů, které heuristická analýza nepozná a snahy o zvýšení její "citlivosti" jsou doprovázeny nárůstem počtu falešných poplachů. Právě falešné poplachy patří k velmi nepříjemným průvodním jevům heuristické analýzy. Obtěžují uživatele a ti pak provádějí totéž výrobcům antivirového systému.
Jestliže program dovoluje určení typů souborů, kterým se má analýza týkat, nebo jakékoliv nastavení její citlivosti, je dobré mít na paměti, že tvůrce systému zřejmě věděl jaké hodnoty (a proč) použít. Jejich změnu by měl provádět pouze někdo, kdo ví, co dělá. V opačném případě se vaše heuristická analýza může stát zcela flegmatickou a ignorovat i zcela zjevné viry, nebo propadne hysterii a začne za podezřelé označovat vše, co uvidí.
Kromě heuristické detekce virů existují i pokusy o jejich heuristické odstraňování. Vir se totiž po svém spuštění dříve nebo později pokusí předat řízení původnímu programu. Pokud se podaří odsimulovat jeho běh až k tomuto bodu, stačí napadený soubor správně zkrátit a všechno je v nejlepším pořádku.
Heuristická analýza bývá většinou součástí skenerů (on-access i on-demand), samostatně ji provozovat nelze (většinou).

Monitorovací program (Behavior Blocker)

Monitorovací programy obecně hlídají změny v nastavení systému a chrání systém před replikací viru (i před provedením oněch nežádoucích akcí trojských koní), a to na základě neustále kontroly a posléze aktivního zastavení takové ilegální akce.
Monitorovací programy jsou tedy aktivními nástroji pro detekci virů na základě změn v chování systému, a to v reálném čase. Tyto programy zabraňují nelegálním akcím a signalizují, kdykoliv se cokoliv v systému pokouší o nějakou podezřelou akci, která má charakteristiky chování viru, popř. jinak škodlivého, ilegálního chování, např. pokus o zápis do chráněných souborů, změna tabulky vektorů přerušení… Protože však virus není ničím jiným než sekvencí příkazů, je zde značná pravděpodobnost, že i legitimní programy mohou provádět stejné akce, a povedou tedy ve svém důsledku k signalizaci stejně jako virus (např. sebemodifikující programy). Při tvorbě takového systému se začíná s modelem "ilegálního" chování, pak se staví moduly, které zachycují a zastavují pokus o provedení takových akcí. Tyto moduly pak pracují jako součást operačního systému.
Monitorovací program předpokládá, že viry provádějí akce, které jsou svou povahou podezřelé, a proto mohou být detekovány. To však nemusí být vždy platné tvrzení. Nové viry mohou využívat nové metody, které moho být mimo působnost naprogramovaných modulů. Takový virus pak nebude monitorovacím programem detekován.
Techniky, které se využívají u monitorovacích prostředků pro detekci chování podobného chování viru, rovněž nejsou neselhávající. Osobní počítače mají většinou slabinu v nedostatečné ochraně paměti, takže virový program může obvykle obejít většinu pokusů operačního systému o kontrolu. Navíc jako součást operačního systému jsou monitorovací programy rovněž napadnutelné. Existují totiž viry, které obejdou nebo zcela vypnou celý monitorovací systém, např. virus Tremor a tunelující viry.
Na rozdíl od skenerů není tak snadné používat monitorovací programy. Dost totiž záleží na jejich nastavení. Obecně řečeno, je-li nastavení příliš jemné, bude program neustále hlásit poplach (a uživatele zákonitě otráví a sníží jeho důvěru v software). Je-li naopak nastavení příliš hrubé, program nebude detekovat téměř nic (tedy ani některé viry).
V případě, že monitorovací program ohlásí pokus o nějakou z jeho pohledu podezřelou akci, je na uživateli, aby byl schopen posoudit, zda se jedná o falešný poplach (zda daný program provádí legitimní činnost), nebo o pokus viru. Tím je kladen na uživatele značný nárok. Také instalace (a již zmíněné nastavení) monitorovacího programu není snadné.
Na druhé straně jsou tu však i výhody monitorovacích programů: