Skenery uvnit°
Na poΦßtku Θry skener∙ byla vyu₧φvßna metoda, vyhledßvajφcφ viry na zßklad∞ skupiny (sekvence, °et∞zec) instrukcφ, kterΘ byly pro dan² virus typickΘ. JednoduÜe °eΦeno, virovß databßze byla napln∞na sekvencemi znßm²ch vir∙ a skener tyto sekvence vyhledßval v jednotliv²ch souborech, pop°φpad∞ systΘmov²ch oblastech disku. Pokud byla sekvence z virovΘ databßze toto₧nß se sekvencφ v souboru, skener ho pova₧oval za infikovan², co₧ oznßmil i u₧ivateli. Pro spolehliv∞jÜφ detekci s minimem faleÜn²ch poplach∙ pou₧φvaly n∞kterΘ antivirovΘ programy vφce sekvencφ pro detekci jednoho viru. VedlejÜφm efektem je v tomto p°φpad∞ i vyÜÜφ schopnost rozpoznat novou, dosud neznßmou variantu existujφcφho viru. Rychlost stoupla od chvφle, kdy antiviry vyhledßvaly tyto sekvence pouze v mφstech souboru, kde se daly oΦekßvat (na konci, na zaΦßtku). Na druhΘ stran∞ toho vyu₧φvali i auto°i vir∙, kte°φ se sna₧ili umφstit t∞lo viru n∞kam, kde by ho antivirus nenaÜel (obvykle do st°edu souboru). V²znamnΘ snφ₧enφ mno₧stvφ faleÜn²ch poplach∙ p°inesla tzv. exaktnφ identifikace, kdy po nalezenφ sekvence jeÜt∞ skener spoΦφtß kontrolnφ souΦty konstantnφch oblastφ v t∞le viru, porovnß je s informacemi ve virovΘ databßzi a pak teprve upozornφ u₧ivatele na tΘm∞° jistou p°φtomnost viru. Exaktnφ identifikace umo₧≥uje i jemnΘ rozliÜovßnφ variant jednotliv²ch vir∙, o tomto v Φßsti v∞novanΘ pojmenovßnφ vir∙.
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ß virus 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. 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. DneÜnφ emulßtor k≤du b²vß natolik propracovan²m systΘmem, ₧e za jeho asistence nenφ v∞tÜφm problΘmem detekovat jak²koliv, nap°φklad i ten nejslo₧it∞jÜφ polymorfnφ virus. Emulßtor k≤du znamenal i p°φchod kvalitn∞jÜφ heuristickΘ anal²zy.
Heuristickß anal²za
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.
Heuristickß anal²za m∞la odjak₧iva svΘ zastßnce i odp∙rce. Zatφmco zastßnce t∞Üila mo₧nost detekce neznßm²ch vir∙, odp∙rce straÜila zv²Üenß hladina faleÜn²ch poplach∙. DneÜnφ heuristickß anal²za b²vß Φasto natolik propracovanß, ₧e v²skyt faleÜnΘho poplachu je spφÜe nßhodou. To vÜak nic nezm∞nilo na tom, ₧e odp∙rci existujφ i nadßle...
StarÜφ heuristickΘ anal²zy by bylo mo₧nΘ oznaΦit za "pasivnφ". Prvnφ z nich byla pou₧ita v antivirech F-PROT a TBAV. Pasivnφ heuristika prohledßvala soubory a hledala v nich typickΘ p°φznaky (sekvence znak∙) pro virus. Pokud bylo takov²ch p°φznak∙ (Φasto oznaΦovßny jako flags) nalezeno dostateΦnΘ mno₧stvφ, byl takov² soubor pova₧ovßn za napaden². P°φznakem mohlo byt nap°. volßnφ n∞jakΘ slu₧by INT 21h apod. Nev²hodou bylo, ₧e pasivnφ heuristika nedokßzala proniknout pod "povrch" k≤dovan²ch Φi polymorfnφch vir∙ a tak slo₧it∞jÜφ nedokßzala detekovat. Neaktivnφ heuristiku mohly viry snadno oklamat. Pokud nap°φklad heuristickß anal²za vyu₧φvala sekvenci v hexadecimßlnφm tvaru: B440CD21 (vyjad°uje souhrn instrukcφ mov ah,40; int 21h), mohl virus stejnou Φinnost vyvolat jinou sekvencφ: B43FFEC4CD21 (mov ah,3f; inc ah; int 21h).
V dneÜnφ dob∞ je ve vÜech znßm²ch p°φpadech vyu₧ita "aktivnφ" heuristickß anal²za. Zßkladem je emulßtor k≤du a s nφm spojenß existence virtußlnφho prost°edφ poΦφtaΦe. Emulßtor k≤du dokß₧e spustit soubor a jeho Φßst "odemulovat" podobn∞, jako by ho spustil sßm u₧ivatel. Emulßtor k≤du ovÜem veÜkerou Φinnost provßdφ ve virtußlnφm prost°edφ a skuteΦn² poΦφtaΦ u₧ivatele tak v p°φpad∞ "spuÜt∞nφ" infikovanΘho souboru nem∙₧e ohrozit. Pokud by byl zpracovßvan² soubor infikovßn, emulßtor v podstat∞ vykonß i Φinnost viru, proemuluje dek≤dovacφ smyΦku (dekryptor) a dostane se tak p°φmo na povrch viru. Emulßtor vykonß i Φinnost p°φpadnΘho viru - proemuluje dek≤dovacφ smyΦku (decryptor) a dostane se tak p°φmo k "vnit°nostem" viru, kde u₧ m∙₧e skener pokojn∞ vyhledßvat podle sekvencφ. Pokud jsou b∞hem emulace sbφrßny informace o aktivitßch programu (nap°. proces p°esm∞rovßnφ vektor∙ p°eruÜenφ...), m∙₧e b²t do akce zapojena i aktivnφ heuristickß anal²za, kterß na zßklad∞ zφskan²ch informacφ vyhodnotφ, zda se ne/jednß o virus. Jeliko₧ emulace programu probφhß pomaleji ne₧ p°i skuteΦnΘm spuÜt∞nφ programu, mß emulßtor nastaven tzv. timeout - tj. Φas (Φi poΦet instrukcφ), po kterΘm se chod emulßtoru na aktußlnφm souboru zastavφ. Tohoto ΦasovΘho limitu n∞kterΘ viry dokß₧ou vyu₧φt pro sv∙j prosp∞ch, viz. techniky vir∙ - EPO.
Poznßmka: Heuristickß anal²za dokß₧e detekovat pouze takovΘ typy vir∙, pro kterΘ je navr₧ena (makroviry, souborovΘ viry pro Windows, viry pro DOS apod.). Pokud sv∞tlo sv∞ta spat°φ nov² typ viru (Üφ°φcφ se v jinΘm prost°edφ), je podle toho nutnΘ upravit i stßvajφcφ heuristickou anal²zu.