How it's made: Virusy #1

23.03.2007 14:01 | blackhole_ventYl

Fenomenom dnesneho sveta IT su virusy, spyware, trojske kone, keyloggery a ine vsemozne svinstvo plavajuce internetom. Niektore platformy su virusmy postihnute viac, ine menej. Tento serial sa pokusi preniknut do historie virusov na platforme MS-DOS a platforiem z nej odvodenych, odhali princip funkcie virusovych technik polymorfizmu, stealthu a dalsich. V uvodnom dieli si povieme nieco o tom, s akou platformou mame tu cest a vyriadime dalsie formality.

Masivny boom virusov na platforme IBM PC bol sposobeny jednak jej velkym rozsirenim v segmente domacich pocitacov, kde velmi rychlo vytlacila vsetky dovtedajsie platformy (Amiga, Apple, Commodore a dalsi) a jednak kvoli velmi primitivnemu navrhu platformy, ktora bezpecna nebola ani zdaleka.

Prvym virusom na platforme PC bol zrejme Pakistansky virus Brain, ktory povodne sluzil na ochranu programu, ktory autori virusu napisali (mozno tam zobral Microsoft inspiraciu pri WGA). Odvtedy sa virusy na platforme IBM PC rozsirili do mnohych foriem, funkcnosti, druhov a komplexnosti. Od klasickych binarnych virusov sa preslo k makrovirusom a skodlivemu kodu vyuzivajucemu zname diery v casto pouzivanych programoch.

V tomto seriali sa zameriam len na binarne virusy platformy MS-DOS, ktore zrejme znamenali najmasovejsi boom virusov a dosiahli najvacsej rozmanitosti a vychytanosti. Cervy, makrovirusy a skodlivy kod napadajuci zname diery necham bokom, nakolko su z pohladu komplexnosti vykonavanej virusovej cinnosti nezaujimave.

Klucovym elementom k pochopeniu toho, co to virus je, ako a preco funguje, je poznat to, ako pracuje platforma, na ktorej virus operuje. Virusy platformy MS-DOS pracovali na platforme Intel 8086 a platformach s nimi kompatibilnymi (realny rezim procesorov x86). Platforma je postavena na segmentovanej spolocnej pamati kodu a dat. Nedisponovala mechanizmom ochrany pamate, privilegii behu kodu, ani prostriedkami k fungovaniu skutocnych procesov.

Adresny priestor procesora 8086 bol presne 1 MB (2^20-1 bytov). Aby bola tato pamat efektivne vyuzitelna, bolo nutne umoznit vytvorenie virtualnych pociatkov adresneho priestoru tak, aby nevytvaral velku reziu, pretoze program pri svojom spusteni predpoklada, ze je spusteny od adresy 0. Inzinieri v Inteli to vyriesili rozdelenim adresy v pamati na segmentovu a offsetovu cast. Kedze bol 8086 16-bitovy procesor, offsetova cast bola siroka 16 bitov a teda umoznovala adresovat 64kB kus "virtualnej linearnej pamate". Bolo by vsak neefektivne tieto kusy pamate ukladat za sebou, pretoze v pociatkoch ery IBM PC tolko pamate programy nevyuzivali a plytvalo by sa nou. Na tu dobu efektivnym riesenim bolo vyriesit system tak, ze segmenty zacinal vzdy posunuty o 16 bytov za zaciatkom predosleho segmentu. Segmenty sa takto prekryvali a bolo mozne naalokovat segmenty s granularitov 16 bytov a zvysit takto efektivitu alokacie pamate. Takisto mechanizmus prekladu adresy segment:offset na linearnu adresu bol jednoduchy, pretoze linearna adresa sa spocita podla nasledovneho vzorca:

linearna adresa = segment * 16 + offset

Odpadla teda nutnost vedenia alokacnych tabuliek pamate, ich prehladavanie pri pristupe k pamati, procesor sa zjednodusil, ale takisto zanikla moznost riadit, kto ma pristup k pamati a kto nie. Takisto mechanizmus segmentacie je dost ojedinely jav a v realnom svete sa uz dnes prakticky nikde nevyuziva.

Na pristup k rozhraniam sluzieb boli urcene tzv. prerusenia. Prerusenim sa rozumelo nejakym sposobom unifikovane rozhranie medzi standardnym softwarovym komponentom pocitaca (obvykle BIOS, alebo jadro operacneho systemu) a uzivatelskymi aplikaciami. Tychto preruseni bolo mozne v IBM PC alokovat 256 (0-255), pricom niektore z nich (prvych 32) boli vyhradenych pre pouzitie priamo procesorom, ine obsadil BIOS PC a ine zasa jadro operacneho systemu. Pri vyvolani prerusenia sa spustil podprogram, ktoreho adresa bola ulozena na tabulke preruseni v bunke cislom rovnakym, ako malo prerusenie, ktore bolo vyvolane. Tabulka preruseni bola ulozena na zaciatku pamate v segmente s cislom 0x0000 zaberala jeden cely kilobyte.

Pomocou mechanizmu preruseni PC BIOS vytvoril ciastocne abstraktne rozhranie medzi aplikaciami nizsich vrstiev a hardware pocitaca, pretoze odbremenil aplikacie od nutnosti priamo pristupovat k HW pocitaca.

Nad mechanizmami abstrakcie PC BIOSu si zasa operacny system vytvoril struktury este abstraktnejsie, disk rozdelil na particie, particie na subory, umoznil spustat programy, z programov dalsie programy, dokonca umoznil beh programov na pozadi.

Fakt, ze rozdelenie pamate bolo pevne dane, spolu s faktom, ze nikto a nic nemohlo kontrolovat, kto kam pristupuje, sposobilo okrem problemov s vadnymi programami aj to, ze bolo mozne priamo zasahovat do beziaceho jadra operacneho systemu, alebo BIOSu, menit lubovolne data vratane tabulky preruseni.

Podobne jednoducho boli rozdelene disky. Fyzicky sa disk delil na hlavy (kazda hlava pokryvala jednu celu stranu niektorej platne pevneho disku), hlavy sa delili na stopy (jedna stopa zahrnovala vsetky data zapisane na platni v rovnakej vzdialenosti od stredu platne) a stopy sa delili na sektory (kazdy sektor spociatku zaberal 1/17 stopy). Kazdy sektor dokazal ulozit pevne mnozstvo dat a to 512 bytov.

Nad touto strukturou diskov vznikla struktura logickych zvazkov, alebo particii. To, ako je disk rozdeleny na particie urcovala partition table, ktora bola ulozena v prvom sektore na disku (prva hlava, prva stopa, prvy sektor). Tato tabulka umoznovala zaclenit oblasti disku do zvazkov, ktore potom mohli vyuzivat operacne systemy. Vzhladom k jednoduchosti sa vsak predpokladalo, ze particia vzdy zacina a konci na hranici stopy, cize prva stopa ostavala tradicne nevyuzita.

Partition table obsahovala kratky kus kodu, ktory bol zavolany vzdy po uspesnej inicializacii BIOSu, vyhladal specialne poznacenu particiu a spustil kod obsiahnuty v prvom sektore particie. Tomuto kodu sa hovori boot sektor a obvykle je jeho cinnostou zavedenie operacneho systemu.

1MB operacnej pamate procesora 8086 bol rozdeleny tak, ze spodnych 640 kB pamate sa vyuzivalo pre beh aplikacii a ukladanie ich dat, v oblasti medzi 640 kB a 1MB sa nachadzala pamat zariadeni, oblast ROM a BIOS. Niektore casti tejto pamate zostavali dlhodobo nevyuzite, pretoze hrozilo riziko, ze by nastal konflikt medzi pouzitim pamate na ucely komunikacie so zariadenim a ukladania dat.

Na zaklade tejto dlhe roky trvajucej architektury boli postavene virusy,
ktore mozno rozdelit do niekolkych kategorii:

  • programove virusy - ktore sa sirili prostrednictvom infikovanych programov
  • bootovacie virusy - ktore prezivali v infikovanych zavadzacich sektoroch
  • virusy rezidentne - ktore po spusteni infikovaneho programu ostali v pamati
  • virusy nerezidentne - ktore po spusteni vykonali svoju cinnost a nasledne v pamati neostali
  • stealth virusy - ktore maskovali svoju pritomnost pred zvedavymi ocami
  • polymorfne virusy - ktore vykonavali pocas svojho sirenia mutacie sama seba
  • tunelujuce virusy - ktore si tunelovali prerusenia, aby ziskali adresu prislusnej sluzby a mohli ju volat priamo
  • kryptovirusy - ktore budto cast svojho tela, alebo cast dat hostitelskeho pocitaca kryptuju

Samotne virusy infikujuce subory este mozno rozdelit na:

  • virusy prepisujuce hostitela - virus prepise cast hostitela, cim povodny program znici
  • virusy predlzujuce hostitela - virus sa "pripne" na koniec hostitela a zabezpeci si predanie riadenia behu pri spusteni programu
  • virusy medzerove - virus nepredlzuje hostitela, ale vyhladava v nom vhodne nevyuzite datove oblasti, ktore naplna svojim telom
  • virusy duplicitne - su velmi primitivne virusy postavene na fakte, ze prog.com sa vykona skor, ako prog.exe, alebo prog.bat, ak v jednom adresari existuju prog.com, prog.exe a prog.bat a spusteny je iba prog.

Vlastnosti z prvych troch kategorii mozno v lubovolnom pocte a vybere (napriec kategoriami aj v ramci kategorii) kombinovat, virus suborovy je obvykle len jednej z uvedenych moznosti. Moze teda vzniknut aj taky bastard, ako "kryptopolymorfny stealth bootvirus infikujuci COM a EXE subory".

Typicky zivotny cyklus virusu zacina prvotnym spustenim viroveho tela na neinfikovanom pocitaci. To byva spravidla prostrednictvom nakazeneho programu. Ak je tento virus rezidentny, vykona najprv svoju instalaciu a nasledne sa pokusi replikovat. Ak virus rezidentny nie je, vykona svoju replikaciu a nasledne prenecha riadenie hostitelskemu programu. Stealth virusy su rozsirenim rezidentnych virusov o to, ze maskuju svoju pritomnost v systeme. Nakoniec bootovacie virusy si zaistuju svoje opatovne spustenie pri dalsom starte systemu pomocou infikovania bootsektora pevneho disku.

Tento diel poskytol vedomostny uvod k tomu, na akom poli virusy MS-DOS fungovali, niektore fakty boli pre zjednodusenie veci zanedbane, ine boli uvedene preto, lebo budu pre dalsi popis dolezite. V dalsej casti
sa pozrieme na to, ako sa chova taky rezidentny virus v pamati pri svojom prvotnom spusteni na neinfikovanom pocitaci.

    • Re: How it's made: Virusy #1 24.03.2007 | 19:35
      jurogls   Návštevník

      velmi zaujimave.. o virusy sa velmi nezaujimam ale toto sa mi pacilo
      -----------------
      "ten kto chce nieco dosiahnut si nepyta odpovede ale kde priblizne ich najst"
      homepage

      • Re: How it's made: Virusy #1 25.03.2007 | 00:56
        Scot   Návštevník

        presne tak..dot zaujimave..len tak dalej..super clanok..

    • Re: How it's made: Virusy #1 25.03.2007 | 03:43
      Avatar vid   Používateľ

      fajn clanok.

      ocakavam ze nezabudnes spomenut OneHalf, Vyvojara (link na zdrojak Level3), 40hex, A29, VX heavens atd... ;)

      a aby som si rypol:
      Adresny priestor procesora 8086 bol presne 1 MB (2^20-1 bytov
      nebol :P

      • Re: How it's made: Virusy #1 25.03.2007 | 10:58
        Avatar blackhole_ventYl   Používateľ

        viem na co narazas ;) narazas na vysoku pamat (1MB+64kB)... ona tam teoreticky je, akurat 8086 (nie vyssie) nedisponuje linkou A20, cize sa tato pamat wrapuje na zaciatok, cize ano, ma PRESNE 1 MB. Na 80286 a vyssich uz existovala linka A20, cize bolo mozne pouzit 64 kB vysokej pamate.

        inac mi skor pojde o popis virovych technologii, nez o exkurziu svetom virusov.

        ---
        Cuchat s nadchou, to je ako sniffovat bez promiscu.

        --- Cuchat s nadchou, to je ako sniffovat bez promiscu.
        • Re: How it's made: Virusy #1 25.03.2007 | 13:39
          Avatar vid   Používateľ

          ano, narazam na A20, ibaze:

          cize ano, ma PRESNE 1 MB.
          ale ty si hovoril o adresom priestore, nie o sirke zbernice. adresny priestor ma 0-FFFF:FFFF cize 0-10FFEF.

          podobne ako 386SX ma sirku zbernice len 24bit, a vsetko vyssie sa wrapuje, ale adresny priestor ma plnych 4GB

          • Re: How it's made: Virusy #1 26.03.2007 | 14:13
            Avatar blackhole_ventYl   Používateľ

            no ;) to je sice pekne... ale ked pises aplikaciu pre realny rezim 8086, v praxi nemozes ratat s tym, ze ta linka A20 je povolena a ze vysoka pamat existuje ;) takze ak to chces napisat portabilne aspon v ramci svojej vlastnej platformy, tak musis uvazovat ako pouzitelny len 1. MB. ;)

            Teoria je pekna vec, ale casto ma od praktickej aplikacie hodne daleko.

            ---
            Cuchat s nadchou, to je ako sniffovat bez promiscu.

            --- Cuchat s nadchou, to je ako sniffovat bez promiscu.
            • Re: How it's made: Virusy #1 26.03.2007 | 15:22
              Avatar vid   Používateľ

              samozrejme, ale to s pojmom adresny priestor nema nic spolocne. Adresny priestor znamena kolko roznych adries sa da vyjadrit, nie kolko z nich je realne pouzitelnych. A ano, je to dost teoreticky pojem a pri starych pocitacoch mal od praktickej aplikacie daleko.

              PS: namiesto toho hadania sa so mnou o slovickach by si radsej mal pisat druhu cast serialu o virusoch :P ;)

              PS2: A ak tam nepomenies Vyvojara tak ma fakt naseres :D

    • Re: How it's made: Virusy #1 25.03.2007 | 09:57
      rootuid0   Návštevník

      oldschool
      pekny clanok .. som zvedavy na pokracovanie
      _______________________________________
      1101110 1100101 1100011 1110101 1101101

    • Re: How it's made: Virusy #1 26.03.2007 | 03:32
      mousek   Návštevník

      Velmi pekny clanocek ... :)

    • Re: How it's made: Virusy #1 26.03.2007 | 04:39
      Avatar dc   Používateľ

      Kvalitni a rozsahly clanek, ktery me obohatil o dost novych vedomosti, moc se tesim na pokracovani, jen tak dale.
      ---
      >> i love my penis <<

      --- [root@holy-terminal]# /etc/rc.d/world restart Dilino phenel, so džanel, goďaver džanel, so phenel.
    • Re: How it's made: Virusy #1 26.03.2007 | 21:21
      Avatar lekvar   Používateľ

      Partition table obsahovala kratky kus kodu, ktory bol zavolany vzdy po uspesnej inicializacii BIOSu, vyhladal specialne poznacenu particiu a spustil kod obsiahnuty v prvom sektore particie. Tomuto kodu sa hovori boot sektor a obvykle je jeho cinnostou zavedenie operacneho systemu.

      Sorry cely tento odstavec je poriadna chujovina. Pozri si co je Master boot record, partition table, boot sector.

      A tomu cudu "kryptopolymorfny stealth bootvirus infikujuci COM a EXE subory" sa nadava multipartitny polymorfny com exe infektor.

      ---
      Zerte lequar, je kua zdravy !

      --- Zerte lequar, je kua zdravy !
      • Re: How it's made: Virusy #1 27.03.2007 | 11:53
        Avatar blackhole_ventYl   Používateľ

        jj, pravdu mas... MBR obsahuje falat kodu a partition table...

        ---
        Cuchat s nadchou, to je ako sniffovat bez promiscu.

        --- Cuchat s nadchou, to je ako sniffovat bez promiscu.
    • Re: How it's made: Virusy #1 01.04.2007 | 16:46
      jurogls   Návštevník

      Pocuj kedy bude pokracovanie?
      -----------------
      "ten kto chce nieco dosiahnut si nepyta odpovede ale kde priblizne ich najst"
      homepage

      • Re: How it's made: Virusy #1 01.04.2007 | 17:40
        Avatar blackhole_ventYl   Používateľ

        just done ;]

        ---
        Cuchat s nadchou, to je ako sniffovat bez promiscu.

        --- Cuchat s nadchou, to je ako sniffovat bez promiscu.