NTFS5 a pocitacove viry

1. Uvod

S uvedenim prvni betaverze systemu Windows2000 poukazovali jeho tvurci (tj. Micro$oft) na jeho nenapadnutelnost pocitacovymi viry. Velmi brzo pote byli vsichni zucastneny vyvedeni z omylu, kdyz se objevil virus Win2k.Installer od Bennyho/29a a Darkmana/29a. Byl to prvni virus pro tuto platformu a to jeste prosim nebyla vubec oficialne uvedena na trh! Jak cas plynul, zacali jsme se vice a vice vzivat do tohoto systemu a zjistili jsme, ze jde jen o dalsi, snadno napadnutelny system od M$ s par malymi prekazkami, mezi ktere patri napr. SFP (System File Protection=ochrana systemovych souboru proti prepsani a modifikaci). Mezi novinkami ve Windows2000 byl take "vylepseny" souborovy system, ktery dostal nazev NTFS-2000. Protoze jsou vsak Win2k pokracovanim WinNT a drive se jmenovali WinNT verze 5, pouzivam dale v clanku jmeno NTFS5. (Prejmenovani na Win2k byl dle meho nazoru jen dalsi zbytecny marketingovy tah M$, ktery se snazil zapadnout do atmosfery "prevratneho" roku 2000...) S timto souborovym systemem se otevreli nove moznosti pro nas, tvurce pocitacovych viru...

2. Novinky v NTFS5 a jejich vyuzitelnost ve virove tvorbe

V NTFS5 jsou nove funkce, z nichz nektere si zde priblizime a ukazeme si jejich vyuzitelnost v pocitacovych virech.

2.1. Streams

I kdyz Streams (datove proudy; viz dale) nejsou novinkou NTFS5, byla jejich podpora v tomto souborovem systemu znacne rozsirena a utuzena. O co se tedy jedna?

Kazdy soubor na NTFS se sklada z takzvanych streamu (datovych proudu). Pokud si vezmeme kuprikladu soubor file.txt, tak na systemech FAT, FAT32 a dalsich, muzeme pouzit jenom tkzv. hlavni (nepojmenovany) stream, ktery je definovan prave jmenem souboru. Ale na NTFS muzeme k tomuto hlavnimu streamu priradit dalsi, pojmenovane streamy, jejichz nazev se od jmena souboru oddeluje znakem ':'. Zkuste si tento maly priklad:

Otevrete prikazovou radku a piste:
c:\echo "Tento text bude ve streamu :MujStream" > pokuz.txt:MujStream

- tento prikaz vypise na presmerovany vystup (presmerovany do naseho streamu :MujStream patricimu hlavnimu streamu pokuz.txt) text "Tento text ..."

Pokud se nyni podivate na soubor pokuz.txt, zjistite ze je prazdny. Takze se nam tam text zrejme nezapsal. Ale pojdme dale...

Nyni napiste:
c:\more < pokuz.txt:MujStream

Stalo se neco? Urcite ano :) Pokud jste vse udelali spravne, mel by se vypsat drive zadany text. Jak je to mozne? Podivejme se nyni, jak soubor vypada na zaznamovem mediu...

Myslim, ze ted je to jiz jasne.

K cemu se tedy daji vyuzit streamy jinemu nez k virove tvorbe? Vyuziti je rekl bych celkem mnoho, vse zavisi na fantazii programatoru. Ale preci jen jeden priklad za vsechny.

Pojmenovane streamy nejsou omezeny jen na soubory. Lze je take priradit k adresari a pouzivat je naprosto stejne jako v pripade souboru. Vsichni zname takove ty male soubory s nazvem Desktop.Ini rozesete vsude po disku. V nich je ulozen odkaz na urcita data, ktera ovlivnuji chovani adresare. Napriklad muzete menit ikonu adresare. Tyto soubory by bylo velmi ucelne presunout do pojmenovaneho streamu a vse by bylo hezci :).

Proc tomu tak neni? Je to velmi jednoduche. Jak jsme si uz u M$ zvykli, jde vzdy predevsim o zpetnou kompatabilitu. Pojmenovane streamy mohou totiz, ostatne jak jiz bylo receno, existovat pouze na NTFS a nikoli napriklad na CDckach, ktere pouzivaji jiny souborovy system. Take pokud kopirujete soubor s pojmenovanymi streamy z NTFS na FAT, FAT32 ci jiny souborovy system, zkopiruje se pouze hlavni, nepojmenovany stream. A toto je take hlavni prekazka branici vetsimu rozsireni streamu. Ale pokud vas program pobezi pouze na NTFS, pouzijte streamy. Je to pekne a velmi jednoduche.

2.1.1. Win2k.Stream

A nyni se dostavame k memu a Bennyho/29a detatku. Ano, vytvorily jsme prvni virus na svete, ktery vyuziva streamy a jeste jednu prednost NTFS (kompresi; viz dale). Napsali jsme ho na nasem malem spolecnem meetingu, ktery se konal v mem meste. Dobre jsme se bavili, navstivili hospodu, pokecali a napsali virus, ktery se stal medialnim trhakem. Co chtit vic :)

Nas virus je vlastne velmi jednoduchy. Naprogramovali jsme ho za necely den a to jen proto, ze jsme nemeli zadne zkusenosti se streamy, tekze jsme se ucili "on the fly" (zdar Benny X-D). Jak tedy pracuje?

Po spusteni virus hleda v aktualnim adresari soubory s priponou *.exe, tedy spustitelne soubory. Jakmile nejaky najde, otevre ho, vytvori stream :STR, tam zkopiruje celou obet a sam sebe zkopiruje do hlavniho streamu. Pote soubor zkomprimuje (viz dale) a hleda dalsi. Kakmile skonci proces infikace, virus spusti svou aktualni obet a to sice :STR a pokud vse probehlo v poradku skonci. Podivejme se jak vypada neifikovany a infikovany program.

Pokud v nektere fazi behu viru nastala chyba, virus vypise na obrazovku:

Win2k.Stream by Benny/29A & Ratter This cell has been infected by [Win2k.Stream] virus!

a skonci.

Tuto novou techniku panove z AVP nazvali "stream companion" coz lze volne prelozit jako "doprovodna infekce pomoci streamu" (zni to hrozne ja vim...)

Velmi jednoduche. Byli jsem prijemne prekvapeni, jaky ohlas byl v "mediich". Opravdu jsme to necekali. Preci jenom kdyz je komentar vetsi nez samotny kod tak neco opravdu neni v poradku :)

2.2. Komprese a sifrovani

V NTFS5 existuji funkce, ktere vam umozni zkomprimovat nebo zakodovat soubor a to zcela transparentne, protoze se to deje na urovni souboroveho systemu. Jinymi slovy. Pokud se nejaky program rozhodne otevrit zkomprimovany nebo zakodovany soubor, ten je nejdrive dekomprimovan/dekodovan a az pote predan programu, ktery si to vyzadal. Komprese viditelne setri misto na disku, a proto jsme se ji jako prvni rozhodli vyuzit v nasem Win2k.Stream. Zase velmi jednoduche a efektni. Sifrovani a kompresi nelze pouzivat soucasne takze si musite zvolit bud kompresi nebo sifrovani.

Pokud si jednu z techto funkci chcete vyzkouset, najedte na nejaky soubor mysi, zmacknete prave tlacito a zvolte Vlastnosti. Dale Upresnit a zatrhnete checkbox podle zvolene vlastnosti.

2.3. Reparse points

Dalsi novinkou v NTFS5 jsou tkzv. Reparse points. Jsou to vlastne data, prirazena k nejakemu souboru ci adresari, kteremu rozumi aplikace a filtr v podobe ovladace souboroveho systemu. Jakmile je pozadovan nejaky pristup (cteni /zapis ...) k souboru/adresari, ktery obsahuje reparse point, pokusi se system najit systemovy filtr prislusejici k tomuto souboru/adresari a spusti ho.

Uz to vidite? Nejaky virus by mohl nainstalovat takovy ovladac zarizeni a infikovat soubory (vsechny soubory! *.mp3, *.jpg, *.exe, *.ini, *.txt) proste tak, ze bude prirazovat reparse pointy. Tyto data o maximalni velikosti 16KB mohou obsahovat cokoliv. Obsahuji take tkzv. tag, coz je jednoznacne identifikacni cislo ovladace prislusejicimu tomuto reparse pointu. Jakmile by se soubor oteviral, nejdrive by se pustil filtr (virus), ktery by mohl infikovat dalsi soubory a tak dale a tak dale. Problemem zustava sireni takoveho filtru a take jeho tvorba. M$ si totiz nechava velmi tucne platit za svoje nastroje, a tak bude problem (ne neprekonatelny) sehnat IFSKit, nastroj potrebny na tvorbu ovladacu pro souborovy system. Uvidime :).

Pomoci reparse pointu je napriklad implementovano sifrovani a take "mountovani". Mountovani znamena, ze k dane ceste priradite napriklad jednotku CD-ROM, nebo jiny (treba sitovy) disk. Priklad

mate adresar c:\mnt\diskd c:\mnt\cdrom

pokud namountujete na cestu c:\mnt\diskd vas disk D: (pokud mate) budete moci k disku D: pristupovat dvema zpusoby. Jednak normalne pomoci D:, ale take se nan muzete odkazovat pomoci c:\mnt\diskd\. To same s CD-ROM. Mountovani je uzitecne (a pod *nixy nezbytne) pro transparentni spravu ruznych souborovych systemu.

Neodpustim si jednu malou poznamku smerem k Micro$oftu. V Unixu je jiz mountovani implementovano zhruba po tri desetileti a ve Windows se objevil az nyni. Zajimave :)

3. Zaver

A to je pro dnesek vse pratele X-D. Samozrejme jsem nepoukazal na vsechny novinky v NTFS5 a par jich jeste zbyva (sparse soubory, diskove kvoty, journaly), ale to mozna nekdy priste. Doufam, ze jste se pri cteni nenudili a ze se vam clanek libil.


Autorem Φlßnku je Ratter (ratter@atlas.cz). Velice mu za n∞j d∞kuji !!!