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:
Podobně jako paměťově rezidentní viry hlídá on-acces skener systém z operační paměti. Kontroluje veškerou
činnost uživatele se soubory (kopírování, spouštění souborů) a pokud zjistí, že manipuluje s infikovaným
programem, okamžitě ho na tuto skutečnost upozorní. Hlavní výhodou je, že uživatel je upozorněn
na tuto skutečnost těsně před nejhorším (před aktivací samotného viru). On-access skenery jsou tak v dnešní
době velice důležitou a oblíbenou součástí většiny antivirových programů. Použití on-access skeneru pro DOS
sice viditelně spomalovalo chod počítače, ale to už prakticky neplatí v době rychlých počítaču s operačním systémem MS Windows.
Windows je totiž sám o sobě velice "náladový" produkt, a tak i bez on-access skeneru běhá někdy rychleji a někdy pomaleji :)
Některé viry mohou paměťově rezidentní skenery ovlivnit, či dokonce vypnout (viz. tunelující viry).
Manuální typ skeneru. Uživatel obvykle definuje oblasti (pevný disk, adresář, disketa) které chce on-demand skenerem prohlédnout
a stiskne tlačítko pro zahájení testu. On-demand skener pak hromadně prohlédne všechny vybrané oblasti na výskyt virů.
On-demand skener lze obvykle spojit s kalendářem úloh (scheduler) a kontrolu provádět automaticky v předem definovaných časech.
Bližší informace o moderních skenerech lze najít v článku "Skenery - detaily".
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 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).