|
Specißlnφ techniky vir∙ (obecn² p°ehled) Retro viry - odvetnΘ viry
Hlavnφm heslem t∞chto vir∙ je: nejlepÜφ obrana je ·tok. A to taky dodr₧ujφ. Sna₧φ se obejφt
a jeÜt∞ lΘpe znemo₧nit prßci antivirov²m program∙m. Proto je ma₧ou, vypφnajφ rezidentnφ ochrany
apod. Pozornost si zaslou₧φ virus Tequila, kter² odstra≥uje kontrolnφ souΦty p°idanΘ
pomocφ Viruscanu p°φmo ze soubor∙.
NeviditelnΘ viry - Stealth viruses (Sub-Stealth viruses)
Stealth virus je rezidentnφ virus, kter² se pokouÜφ vyhnout detekci skrytφm projev∙ svΘ p°φtomnosti
v infikovan²ch souborech. Aby toto dosßhl, virus zachycuje systΘmovß volßnφ, kterß prov∞°ujφ obsah
nebo atributy infikovan²ch soubor∙. V²sledky t∞chto volßnφ musφ b²t zm∞n∞ny tak, aby odpovφdaly p∙vodnφmu
stavu souboru. Toho je schopen pouze tehdy, je-li rezidentnφ v pam∞ti.
Nßzev t∞chto vir∙ je odvozen od anglickΘho slova stealth, co₧ znamenß lstivou Φinnost, vykonßvanou potajmu,
kradmo apod. Lze tedy ji₧ z tohoto nßzvu leccos soudit o povaze t∞chto vir∙. Tφmto slovem lze toti₧
odznaΦit ony specißlnφ techniky, kterΘ t∞mto vir∙m zaruΦujφ velmi obtφ₧nou detekci jak u₧ivatelem,
tak i antivirov²mi programy. V∞tÜina v²zkumnφk∙ na poli boje proti vir∙m souhlasφ s tφm, ₧e viry typu
stealth majφ nßsledujφcφ charakteristiky:
- Virus skr²vß jakoukoliv zm∞nu provediteln²ch komponent v systΘmu, jako je nap°. zm∞na dΘlky souboru, nebo
zm∞na boot sektoru, nebo tabulky rozd∞lenφ disku, jednß-li se o virus rezidentnφ v pam∞ti nebo o zm∞nu velikosti
pam∞ti.
- Virus je schopen dezinfikovat programy "za letu". Nap°. kdy₧ je naka₧en² program naΦφtßn do pam∞ti, je tento
program dezinfikovßn. Tato technika umo₧≥uje, ₧e i po pou₧itφ antivirovΘho software nenφ znßmo nic o
p°φtomnosti viru.
- Viry typu stealth ve v∞tÜin∞ p°φpad∙ (ale nenφ to pravidlem) infikujφ programy v okam₧iku,
kdy jsou otevφrßny, krom∞ klasickΘ mo₧nosti infekce v okam₧iku, kdy jsou spuÜt∞ny. V²sledkem toho, ₧e proveditelnΘ
programy jsou rovn∞₧ infikovßny p°i otev°enφ, je velmi rychlΘ rozÜφ°enφ viru po celΘm systΘmu.
Prvnφ charakteristika, ₧e virus skr²vß jakoukoliv zm∞nu provediteln²ch systΘmov²ch komponent, jej Φinφ velmi
t∞₧ko detekovateln²m pro u₧ivatele poΦφtaΦe. Jestli₧e mßte d∙vod domnφvat se, ₧e se ve vaÜem poΦφtaΦi vyskytuje
virus typu stealth nebo sub-stealth, vypn∞te cel² systΘm a nov∞ jej zave∩te z nenaka₧enΘ, proti zßpisu chrßn∞nΘ,
systΘmovΘ diskety. Potom se pokuste spustit Φistou kopii vaÜeho antivirovΘho software z diskety, chrßn∞nΘ proti
zßpisu. Proto₧e virus u₧ nenφ v pam∞ti, nenφ u₧ zde ₧ßdnΘ nebezpeΦφ rozÜφ°enφ nßkazy. Navφc je nynφ mo₧nΘ rozeznat
na systΘmovΘm pevnΘm disku jakoukoliv zm∞nu v dΘlce souboru Φi jinou zm∞nu provediteln²ch systΘmov²ch komponent,
signalizujφcφ infekci virem.
Viry typu sub-stealth pak nazφvßme ty viry, kterΘ vykazujφ t°eba jen jednu z v²Üe uveden²ch vlastnostφ. P°esto je t°eba
z hlediska ·plnosti je ji₧ °adit do tΘto skupiny, nebo¥ stejn∞ jako typickΘ viry typu stealth p°edstavujφ pro antivirovΘ
programy v₧dy urΦit² problΘm.
K≤dovanΘ viry - Crypted viruses
Prvotnφm ·Φelem k≤dovßnφ bylo znep°ehlednit vlastnφ k≤d viru a ztφ₧it tak jeho anal²zu
(kterß je nutnß k vytvo°enφ antivirovΘho programu). Navφc je tφmto postupem zkomplikovßno
uzdravenφ napadenΘho programu, proto₧e obsah zaΦßtku programu je takΘ zak≤dovßn.
TakovΘ k≤dovßnφ b²vß Φasto realizovßno tak, ₧e vlastnφ k≤d viru je v programu ulo₧en -
zak≤dovßn n∞jak²m jednoduch²m algoritmem (oblφbenΘ je provedenφ operace XOR s ka₧d²m bajtem
k≤du viru) a p°ed vlastnφm virem se nachßzφ krßtkß dek≤dovacφ smyΦka, kterß zajistφ jeho
transformaci do p∙vodnφ podoby.
Takto zak≤dovan² vir mß tΘm∞r konstantnφ podobu (TΘm∞r proto, ₧e stejn∞ jako b∞₧nΘ viry si
pot°ebuje do svΘho t∞la zapsat n∞kolik prom∞nn²ch hodnot, kterΘ mohou b²t v ka₧dΘ generaci
jinΘ; p°evß₧nß Φßst viru vÜak z∙stßvß nem∞nnß.)
Nov∞jÜφ viry zaΦaly vyu₧φvat k≤dovßnφ s prom∞nnou hodnotou k dosa₧enφ toto, aby ka₧d²
exemplß° viru byl z velkΘ Φßsti odliÜn²; shodnß z∙stßvß pouze dek≤dovacφ smyΦka na zaΦßtku
programu. To sice znaΦn∞ zkomplikovalo vyhledßvßnφ n∞kter²m antivirov²m program∙m
pou₧φvajφcφm charakteristickΘ sekvence, ale neustßle je relativn∞ snadnΘ urΦit k≤dovacφ
hodnoty a program dek≤dovat. Navφc lze stßle pou₧φt v₧dy stejn∞ vypadajφcφ dek≤dovacφ smyΦku
k identifikaci viru.
Nßstupce tΘto technologie p°edstavujφ polymorfnφ viry (viz. nφ₧e), kterΘ pou₧φvajφ pom∞rn∞
komplikovan²ch metod k tomu, aby i dek≤dovacφ smyΦka mohla mφt prom∞nlivou podobu.
Polymorfnφ (mutaΦnφ) viry - Polymorphic viruses
Polymorfnφ viry jsou v jistΘm pohledu podobnΘ stealth vir∙m. Toti₧ v tom, ₧e je velmi obtφ₧nΘ je detekovat
antivirov²mi prost°edky. TΘto stejnΘ skuteΦnosti vÜak polymorfnφ viry dosahujφ jin²mi prost°edky ne₧ viry typu stealth.
Polymorfnφ virus vytvß°φ b∞hem replikace kopie, kterΘ jsou funkΦn∞ ekvivalentnφ, ale jednotlivΘ replikace se od sebe
tΘm∞° ·pln∞ liÜi - majφ podstatn∞ odliÜnΘ °etezce byte.
Aby toho virus dosßhl, musφ nßhodn∞ vklßdat p°ebyteΦnΘ instrukce, zam∞≥ovat po°adφ nezßvisl²ch
instrukcφ a nebo volit z mnoha r∙zn²ch k≤dovacφch schΘmat. Tato prom∞nlivost (polymorfnost) viru jej Φinφ obtφ₧n∞ detekovateln²m,
identifikovateln²m a odstraniteln²m, p°edevÜφm skenovacφmi metodami.
DalÜφ metoda, kterß je velmi Φasto pou₧φvßna polymofnφmi viry (ale i jin²mi viry) je metoda
komplexnφho zak≤dovßnφ. Komplikovan∞jÜφ polymorfnφ viry pou₧φvajφ metodu komplexnφho zak≤dovßnφ kombinovanou s vklßdßnφm NOP instrukcφ
(No Operation), instrukcφ pro zavedenφ nepou₧φvan²ch registr∙, r∙zn²ch instrukcφ se stejn²m ·Φinkem atd.
Zak≤dovan² virus mß v₧dy dv∞ Φßsti: dek≤dovaΦ, malou Φßst, kterß rozk≤dovßvß virus a pak t∞lo zak≤dovanΘho viru.
Kdy₧ je virus spuÜt∞n, nejprve se spustφ dek≤dovaΦ, kter² rozk≤duje t∞lo viru. Pak m∙₧e b²t spuÜt∞no t∞lo viru, to se replikuje
nebo stßvß rezidentnφm. Toto t∞lo viru bude zahrnovat k≤dovaΦ, kter² pracuje b∞hem replikace. Prom∞nnΘ zak≤dovßvacφ viry jsou pro
studium mnohem obtφ₧n∞jÜφ, proto₧e programßtor musφ nejprve dek≤dovat jejich k≤d.
Navφc, je-li toti₧ virus zak≤dovßn, nenφ mo₧no jej vyhledat b∞₧nou skupinou antivirov²ch program∙, kterΘ naz²vßme kontrolnφ (nebo skenovacφ),
a kterΘ pro detekci vir∙ pou₧φvajφ metodu porovnßvßnφ vir∙ s urΦitou databankou tak zvan²ch charakteristick²ch
°et∞zc∙ (signatur) vir∙. Samoz°ejm∞, ₧e Φφm je zak≤dovßnφ slo₧it∞jÜφ a komplexn∞jÜφ, tφm je detekce viru obtφ₧n∞jÜφ i ostatnφmi
typy antivirov²ch prost°edk∙.
|
P°φklad souboru p°ed zavirovßnφm... |
|
...a po zavirovßnφ virem OneHalf.3544. VÜimn∞te si deseti krßtk²ch
programk∙, kterΘ jsou nßhodn∞ rozneseny p°ed samotn²m virem. Tyto progrßmky
jsou navzßjem propojeny skoky, a dohromady tvo°φ dek≤dovacφ rutinu. Na zmatenφ
antivir∙ jsou tyto krßtkΘ progrßmky plnΘ nic ned∞lajφcφch instrukcφ jako:
nop, stc, clc, sti, cs:, ss:, ds:, cld, std, cmc. |
V praxi probφhß zak≤dovßvßnφ nejr∙zn∞jÜφmi zp∙soby. Jednφm z nich je vzφt prost∞ "nßhodnΘ" Φφslo, jako je t°eba hodnota
sekundovΘho pole v systΘmovΘm Φasu, kdy dojde k infekci, a provΘst jednoduchΘ zak≤dovßnφ hodnoty ka₧dΘho byte ve virovΘm k≤du.
Pouze krßtk² kousek na zaΦßtku (rovn∞₧ polymorfnφ) je ponechßn pro dek≤dovßnφ zbytku viru, kdy₧ p°ijde Φas, aby se virus
aktivoval. Zak≤dovßnφ se m∙₧e ale takΘ dφt jin²mi zp∙soby: zak≤dovßnφ pravidelnΘho poΦtu, ale libovoln²ch byte, nebo zak≤dovßnφ k≤du jako celku,
a nikoliv byte po byte.
To znamenß, ₧e je tu v₧dy alespo≥ p∙l tuctu mo₧nostφ, jak dojφt ke stejnΘmu konci. Tomu napomßhß skuteΦnost, ₧e mnohΘ programovacφ
funkce jsou komutativnφ, tedy nezßle₧φ na po°adφ, ve kterΘm jsou tyto funkce uvedeny. To znamenß, ₧e jen velmi malΘ kousky k≤du,
kousky p°φliÜ malΘ na to, aby mohly b²t pou₧ity jako signaturov² °et∞zec, mohou b²t znovu obnoveny r∙zn²mi zp∙soby po ka₧dΘ, kdy₧ virus infikuje
nov² soubor.
P°edch∙dcem t∞chto vir∙ byly tzv. sebezak≤dovßvßcφ virovΘ programy. Existujφ i starÜφ a omezenΘ "sebezak≤dovßvacφ" virovΘ programy, kterΘ jsou °azeny
do skupiny vir∙ polymorfnφch. Tyto sebezak≤dovßvacφ viry m∞ly omezen² poΦet "variant" i kdy₧ nap°. z tΘto skupiny nejlepÜφ virus
Whale dosßhl a₧ 40 r∙zn²ch forem.
Technikou vyu₧φvanou t∞mito viry byla volba mezi r∙zn²mi zak≤dovßvacφmi schΘmaty, kterΘ vy₧adujφ r∙znΘ dek≤dovacφ programy: pouze jeden z t∞chto program∙
mohl b²t jasn∞ viditeln² v danΘ replikace viru. Virov² skener by tedy pro detekci takovΘho viru pot°eboval mnoho charakteristick²ch °∞tezc∙
(jede pro ka₧dou mo₧nou metodu dek≤dovßnφ).
Podrobn∞jÜφ informace lze zφskat v kapitole "konstrukce polymorfnφch vir∙".
Metamorfnφ viry
Velmi zajφmavß skupina... V napadnutΘm souboru se toti₧ nenachßzφ virus v klasickΘm smyslu.
Napaden² soubor toti₧ obsahuje jen kompilßtor, spoleΦn∞ se zdrojov²m pseudok≤dem viru. P°i spuÜt∞nφ infikovanΘho souboru vytvo°φ
kompilßtor v pam∞ti novou, poka₧dΘ odliÜnou kopii viru. Kompilßtor neobsahuje ₧ßdnΘ podez°elΘ instrukce a virus je proto
nedetekovateln² heuristickou anal²zou. Statick² zdrojov² pseudok≤d viru je v infikovanΘm souboru zak≤dovßn a odk≤dovßvß
se pr∙b∞₧n∞ b∞hem kompilace. Po kompilaci se op∞t zak≤duje, ale s jin²m klφΦem.
Tato skupina je p°edevÜφm zastoupena rodinou slovensk²ch vir∙ TMC.
Pro sestavenφ jsem vyu₧il Φlßnek od Miroslava Trnky z ESETu (NOD Antivirus). O sestavenφ se zaslou₧il MGL.
Tunelujφcφ viry
Nejznßm∞jÜφ technikou, kterou se virus brßnφ je znßmß pod pojmem tunelovßnφ. To spoΦφvß ve schopnosti vyhledßvat
p∙vodnφ adresy systΘmov²ch, nejΦast∞ji diskov²ch slu₧eb a ty pak pou₧φvat p°i prßci s disky ve snaze obejφt p°φpadn²
antivirov² software. Ten toti₧ m∙₧e, obdobn∞ jako viry, obsahovat rezidentnφ Φßst, kterß je nainstalovßna v pam∞ti,
mß p°evzaty adresy systΘmov²ch slu₧eb a monitoruje d∞nφ v systΘmu a sna₧φ se zabrßnit neoprßvn∞n²m nebo podez°el²m akcφm.
Jin² zp∙sob aktivnφho boje proti antivirov²m program∙m spoΦφvß p°φmo v manipulaci s jeho rezidentnφ Φßstφ. N∞kterΘ antiviry
toti₧ komunikujφ se sv²mi rezidentnφmi hlφdaΦi pomocφ n∞kolika snadno p°φstupn²ch slu₧eb (kterΘ jsou nadto v mnoha pramenech
dokumentovßny) a obsahujφ i funkci "doΦasnΘ deaktivace" hlφdaΦe. Pro vir tedy nenφ nic sna₧Üφho, ne₧ se dotßzat (jak jinak,
ne₧ pomocφ zmφn∞n²ch slu₧eb) na p°φtomnost takov²chto rezidentnφch hlφdaΦ∙ v pam∞ti, a pakli₧e tyto ·slu₧n∞ odpovφ "ano, jsem tady",
pomocφ znßmΘ slu₧by je deaktivovat.
Vir m∙₧e takΘ obsahovat Φßst k≤du, kterß manipuluje s datov²mi soubory antivir∙ (to vÜak jsou spφÜe retroviry), nejΦast∞ji s databßzφ
sekvencφ vir∙ nebo kontrolnφch souΦt∙. Jejich zm∞nou nebo smazßnφm m∙₧e dosßhnout toho, ₧e z∙stane p°i antivirovΘ kontrole neodhalen.
RychlΘ / PomalΘ infektory (Fast / Slow Infectors)
- Fast infector
Tφmto termφnem jsou oznaΦovßny ty rezidentnφ viry, kterΘ neinfikujφ pouze soubory, kterΘ jsou
spouÜt∞ny, ale i ty programy, se kter²mi je manipulovßno jin²m zp∙sobem (jsou kopφrovßny,
pohlφ₧eny, archivovßny apod.). Existuje mnoho variant, kterΘ se liÜφ tφm, p°i jak²ch
Φinnostech jsou programy infikovßny, avÜak v podstat∞ vÜechny jsou stejn∞ nebezpeΦnΘ, jak
jednoduchß byla p∙vodnφ myÜlenka. Mimo jinΘ toti₧ tento mechanismus zp∙sobφ, ₧e nap°φklad
antivirov² program, kter² neznß dan² vir a kter² p°i kontrole prohlΘdne vÜechny spustitelnΘ
soubory na disku, roznese infekci do vÜech t∞chto soubor∙ !
- Slow infector
Je do jistΘ mφry opakem p°edchozφho. Tento mechanismus vybere k napadenφ pouze takov²
program, do kterΘho je prßv∞ zapisovßno. Tφm se sice radikßln∞ omezφ pole p∙sobnosti, na
druhΘ stran∞ je obtφ₧n∞jÜφ takov² vir odhalit, nebo¥ modifikuje programy, u kter²ch
modifikaci oΦekßvßme (proto₧e jsme do nich sami zapisovali).
Obrana viru proti krokovßnφ k≤du
╚ast²m jevem, se kter²m se lze v t∞le viru setkat, je pou₧φvßnφ technik, kterΘ zt∞₧ujφ trasovßnφ a anal²zu k≤du. K tomu jsou
vyu₧φvßny mΘn∞ znßmΘ vlastnosti poΦφtaΦe a procesoru a takovΘ programovΘ konstrukce, kterΘ kolidujφ s pou₧itφm ladφcφch prost°edk∙,
pou₧φvan²ch p°i anal²ze viru.
T∞chto postup∙ je celß °ada a nenφ mo₧nΘ (ani ·ΦelnΘ) pokouÜet se o jejich ·pln² v²Φet, proto vßs seznßmφme jen s vybran²mi zßstupci.
Proti trasovßnφ k≤du debuggerem se viry brßnφ nap°φklad vklßdßnφm Φasov∞ zßvislΘho k≤du. To znamenß, ₧e program p°edpoklßdß, ₧e se n∞jakß
Φßst k≤du provede v urΦitΘm, velmi krßtkΘm ΦasovΘm intervalu. Pokud je program trasovßn ruΦn∞, instrukci po instrukci, je tato doba pochopiteln∞
nesrovnateln∞ delÜφ a vykonßvßnφ programu se pak m∙₧e ubφrat zcela odliÜnou v∞tvφ.
Jin²m p°φkladem je k≤d, v pr∙b∞hu jeho₧ provßd∞nφ nelze zapisovat do zßsobnφku (co₧ je Φinnost, bez kterΘ se debugger za b∞₧n²ch okolnostφ neobejde).
Pokud se n∞kdo takov² k≤d pokusφ neuvß₧en∞ protrasovat v debuggeru, pravd∞podobn∞ na prvnφ pokus neusp∞je.
DalÜφm pom∞rn∞ ·Φinn²m trikem bylo vyu₧itφ fronty p°edzpracovan²ch instrukcφ v procesoru (prefetch queue). Jejφm d∙sledkem je to, ₧e
zm∞na v pam∞ti, kterß se t²kß instrukce ji₧ naΦtenΘ v procesoru, nemß na provßd∞nφ tΘto operace vliv (procesor tedy provede p∙vodnφ, nezm∞n∞nou instrukci).
To ovÜem platφ, pouze pokud je k≤d korektn∞ vykonßvßn. V p°φpad∞ trasovßnφ dochßzφ mezi vykonßnφm ka₧dΘ instrukce sledovanΘho programu k provedenφ mnoha jin²ch
Φinnostφ, v d∙sledku Φeho₧ je fronta procesoru vyprßzdn∞na a pozd∞ji je do nφ naΦtena ji₧ pozm∞n∞nß instrukce. Tento jev lze ve virech obΦas zpozorovat, paradoxn∞
vÜak Φast∞ji nenφ pou₧it ·mysln∞ k obelst∞nφ debuggeru, ale zp∙sobuje chybnou Φinnost viru.
Tento efekt se toti₧ neprojevoval na star²ch poΦφtaΦφch vybaven²ch procesory 8088 (a op∞t by u₧ nem∞l fungovat na procesorech Pentium), co₧
m∞lo za nßsledek, ₧e n∞kterΘ viry napsanΘ pro tyto procesory p°estaly na nov∞jÜφch typech fungovat.
|
|