Počítačové viry – analýza útoku a obrana
431
12.1 Úvod Autoři virů si dobře uvědomují, že se vir replikuje rychleji, pokud je aktivní v paměti a zachytává přitom volání operačního systému. Už první viry, jako například Brain, nebo Jerusalem, zůstávaly vždy rezidentní v paměti. Nejúspěšnější infektoři souborů a boot sektorů používají všechny typy strategií zavěšení. Viry, které nepoužívají techniku TSR (Terminate and Stay Resident), mají v systému DOS mnohem menší šanci. Když se virus napojí na funkce souborového systému, může snadněji získat přístup k jednotlivým programům nebo oblastem systému a za běhu je infikovat. To samozřejmě znamená, že se velice rychle nakazí většina důležitých a často používaných aplikací a oblastí systému. Je tedy velká šance, že virus pronikne z jednoho systému do druhého, aniž by to uživatel zaznamenal. Další výhodou rezidentních virů je to, že mohou použít technologii stealth, aby se skryly před skenery a kontrolory integrity. Technologie úplného skrytí (full-stealth) je implementována v mnoha starších virech (například Frodo) a v budoucnu bude nepochybně rovněž použita v 32bitových a 64bitových virech pro Windows. Virus Tremor byl jeden z prvních 16bitových polymorfních virů pro DOS, který využíval technik úplného ukrytí. Je-li aktivní v paměti, je zcela ukrytý. Po dobu, po kterou je virus aktivní, zůstává velikost infikované aplikace i jejího obsahu "virtuálně" stejná. Dokud je virus aktivní v paměti, nedokáže vyhledávač virů snadno detekovat napadené soubory. Dalším problémem je to, že on-demand skenery virů, zpřístupňují během skenování všechny důležité aplikace a oblasti systému, takže se do nich aktivní virus může zreplikovat. (Viry, které infikují soubory v době, kdy jsou zpřístupňovány a to jakýmkoliv způsobem, se nazývají jako rychlé infektory.) Vývojářům antivirových řešení bylo tedy zřejmé, že by do svých produktů měli implementovat skenování a dezinfekci paměti. Skenování paměti bylo v systému DOS relativně jednoduchou úlohou. Protože DOS používá procesory Intel pracující v reálném módu (real mode), nebylo možné zpřístupnit více než 1 MB fyzické paměti; virtuální paměť nebyla podporována vůbec. DOS kromě toho neimplementuje žádný mechanismus ochrany kódu operačního systému. Aktuálně zavedené jádro DOSu a všechny aplikace sdílí stejnou ohraničenou paměť, a protože mají v počítači stejná práva, mohou si navzájem překážet (náhodně se přepisovat). Paměť v DOSu může být skenery virů přímo adresována a zpřístupňována pro čtení i zápis, takže vývoj takových skenerů byl jednoduchý. Většina skenerů ani nekontroluje, jestli je v aktuální oblasti paměti vůbec zaveden nějaký kód nebo data a provádějí vyhledávání signatury viru v celé fyzické paměti, pěkně bajt po bajtu. O několik let později se v paměti objevovaly tisíce signatur virů a antivirové programy se kvůli zvýšení rychlosti a vyloučení falešných detekcí snazily prohledávat pouze aktivní oblasti paměti. Takové skenery procházejí paměť pomocí MCB (Memory Control Block). V systému DOS je paměť alokována v "arénách" (v sekcích paměti). Každá taková aréna začíná jejím ovladačem, nazvaným MCB. Získání odkazu na první MCB je možné pouze s pomocí nedokumentované funkce DOSu (funkce Int 21h/52h). Tato funkce byla zpočátku plánována jako "interní" v DOSu, a proto nebyla nakonec zdokumentována. Rozlouskávání nedokumentovaných rozhraní je u systémů firmy Microsoft bohužel každodenním problémem. (Není tedy překvapující, že pro implementaci efektivních skenerů paměti pro Windows NT muselo být rovněž objeveno mnoho podobných nedokumentovaných rozhraní.)