Viry v 32bitov²ch prost°edφch



Bylo jen otßzkou Φasu, kdy se pisatelΘ vir∙ p°eorientujφ na novΘ operaΦnφ systΘmy, odhlalφ jejich slabosti a zaΦnou je vyu₧φvat pro svΘ zßm∞ry. PoprvΘ se tak stalo v roce 1992, kdy byly poprvΘ prolomeny bariΘry MS-DOSu, a na sv∞t∞ se objevil prvnφ virus schopn² infiltrovat operaΦnφ systΘm Windows, kter² byl v tu dobu u₧ dlouho na trhu.
Prvnφ virus, kter² byl schopen infikovat jinΘ soubory ne₧ starΘ znßmΘ com- a exe-soubory, se jmenuje WinWir14. Tento virus byl schopen napadat tehdy nov² typ exe-soubor∙. Tento formßt soubor∙ se pou₧φval u vÜech spustiteln²ch 16bitov²ch aplikacφ pro Windows 3.x. Virus byl vÜak spφÜe jen pokusem a nestal se celosv∞tov∞ rozÜφ°en²m. Po tomto prvnφm viru nastala dlouhß odmlka, b∞hem nφ₧ si pravd∞podobn∞ auto°i "rozÜi°ovali svΘ obzory", a potom se vÜe velice rychle rozb∞hlo.
Virus Tentacle byl dalÜφm nßsledovnφkem viru WinWir a zanedlouho se objevil i prvnφ virus pro operaΦnφ systΘm Windows 95 - virus Boza. Tφm byly definitivn∞ prolomeny hranice vir∙ pro systΘm MS-DOS. Virus Boza byl ji₧ schopen infikovat dalÜφ typ spustiteln²ch 32bitov²ch soubor∙, pe-soubory (portable executable) neboli soubory p°enositelnΘho formßtu.
Tv∙rci vir∙ odvedli velk² kus prßce, kdy₧ se museli p°eorientovat z prost°edφ MS-DOS do daleko komplexn∞jÜφho a slo₧it∞jÜφho sv∞ta MS-Windows. V prost°edφ Windows sice z∙stavajφ n∞kterΘ komponenty starΘho DOSu, ale Windows p°inesly p°edevÜφm prßci program∙ v rozÜφ°enΘm chrßn∞nΘm re₧imu procesoru (tzv. protect mod), zcela jinou 32bitovou sprßvu soubor∙, a tak virus, kter² chce v tomto prost°edφ ·sp∞Ün∞ p°e₧φt, se musφ nauΦit t∞chto technik vyu₧φvat.
DalÜφ prvek, na kterΘm jsou Windows z velkΘ Φßsti postaveny, jsou takzvanΘ virtußlnφ ovladaΦe za°φzenφ - VxD. Jejich k≤dy pracujφ na nejvyÜÜφ ·rovni oprßvn∞nφ procesoru zvanΘm ring 0 a mohou si s cel²m systΘmem d∞lat doslova, co cht∞jφ bez jak²chkoliv ochran. Pro viry, kterΘ cht∞jφ monitorovat souborov² systΘm Windows 95, je vyu₧itφ ovladaΦ∙ VxD velice p°φnosnΘ. Na tΘto ·rovni toti₧ pracuje ovladaΦ IFS manager (IFS - installable file system), p°es kter² prochßzφ veÜkerΘ souborovΘ operace Windows 95, a¥ u₧ jsou volßny ze 16bitovΘ Φi 32bitovΘ aplikace Windows nebo z virtußlnφho stroje MS-DOSu. Navφc zde existuje velice podrobn∞ dokumentovanΘ rozhranφ API, kterΘ mohou tv∙rci vir∙ vyu₧φt. Tato mo₧nost je takΘ pro virus velice v²hodnß, proto₧e na ·rovni ovladaΦ∙ VxD je takov² virus schopen ·sp∞Ün∞ se ukr²vat p°ed antivirov²mi programy.
Tuto v²hodu se samoz°ejm∞ modernφ 32bitovΘ viry nauΦily rychle vyu₧φvat. P°φkladem pou₧itφ podobn²ch technik je nap°. virus Junkie Memorial. Tento virus napsala znßmß skupina tv∙rc∙ vir∙ VLAD na pamßtku jejich kamarßda, kter² se p°edßvkoval drogami. Tv∙rci vir∙ si v tomto p°φpad∞ uv∞domili, ₧e pouhou infekcφ exe-program∙ pro Windows nemohou virus dostateΦn∞ daleko rozÜφ°it. Proto virus napadß takΘ klasickΘ starΘ soubory s p°φponou .com. InfikovanΘ programy, pokud jsou spuÜt∞ny pod operaΦnφm systΘmem Windows, slou₧φ jako droppery (vypouÜt∞Φe vir∙) soubor∙ VxD, kterΘ jsou po aktivaci viru zavedeny pam∞ti a po jejich zav∞Üenφ do rozhranφ IFS manageru je virus schopen lehce monitorovat veÜkerΘ souborovΘ operace systΘmu a dßle se takto rozÜφ°ovat. Jmenovan² virus je velice komplexnφ a je schopen takΘ infekce exe-soubor∙ v DOSu i pe-soubor∙ ve Windows. Samoz°ejm∞ vyu₧itφ za°φzenφ VxD nenφ jedinou cestou, kterou se mohou viry pod operaΦnφm systΘmem Windows Üφ°it. P°φkladem m∙₧e b²t virus Cabanas.
Ka₧d² spustiteln² program ve Windows 95 pou₧φvß nejmΘn∞ dv∞ zßkladnφ volßnφ API jßdra systΘmu. Jsou to funkce GetModuleHandleA a GetProcAddress. Odkazy na tyto funkce jsou ulo₧eny v pe-programu, v tzv. tabulkßch importu ve Windows. Anal²zou tΘto tabulky m∙₧e virus zjistit dalÜφ vstupnφ body do jßdra Windows a potom je vyu₧φvat pro svou replikaci (mno₧enφ). Tento p°φstup mß takΘ dalÜφ v²hody, virus je nap°. p°enositeln² i pod operaΦnφ systΘm Windows NT, na rozdφl od viru Boza, kter² je popsßn dßle, a kter² pou₧φvß p°φmΘ vstupy do jßdra Windows. Tyto vstupy se mohou s nov²mi verzemi systΘmu liÜit.
Jak ji₧ bylo uvedeno, s p°φchodem nov²ch modernφch 32bitov²ch operaΦnφch systΘm∙, jako jsou Windows 95, OS/2 Φi Windows NT, p°ichßzφ takΘ nßstup nov²ch 32bitov²ch vir∙. Podφvejme se tedy, jak tyto novΘ viry pracujφ.
I kdy₧ viry psanΘ pro operaΦnφ systΘm MS-DOS p°edstavujφ i v dneÜnφ dob∞ stßle nebezpeΦφ, jejich vliv bude postupem Φasu ustupovat spolu s ustupujφcφm poΦtem pou₧φvan²ch dosovsk²ch aplikacφ. Tv∙rci vir∙ tak budou postaveni p°ed ·kol p°eorientovat se na novΘ prost°edφ a nauΦit se vyu₧φvat jeho nedostatky ve prosp∞ch sv²ch ·mysl∙.
I kdy₧ operaΦnφ systΘm Windows je na trhu u₧ vφce ne₧ osm let, zatφm existuje velice malß skupina vir∙ napsanß p°φmo pro toto prost°edφ. Hlavnφ p°φΦinou je pravd∞podobn∞ ·silφ vynalo₧enΘ na napsßnφ takovΘho viru. Podφvßme-li se na dneÜnφ viry napsanΘ pro MS-DOS, nejpoΦetn∞jÜφ skupina z nich jsou infektory com-soubor∙, kterΘ jako₧to binßrnφ soubory p°edstavujφ nejjednoduÜÜφ hostitele vir∙. Daleko mΘn∞ poΦetnß skupina vir∙ je schopna infikovat i exe-soubory, i kdy₧ struktura t∞chto soubor∙ je takΘ velice jednoduchß. Struktura exe-aplikacφ ve Windows je v porovnßnφ s exe-aplikacemi pro DOS daleko komplexn∞jÜφ a to je asi bariΘra, kterou tv∙rci vir∙ zatφm necht∞jφ zdolßvat. Dß se proto oΦekßvat, ₧e v blφzkΘ budoucnosti nebude napsßno p°φliÜ mnoho vir∙ urΦen²ch k infekci 32bitov²ch soubor∙, ale ty, co budou napsßny, se zajistΘ budou vyznaΦovat velkou profesionalitou a budou tudφ₧ p°edstavovat takΘ velkΘ nebezpeΦφ.
Hlavnφ rozdφl mezi 32bitov²mi viry a dosovsk²mi viry je ve struktu°e hostitelsk²ch soubor∙, kterΘ je t°eba napadnout. U com-soubor∙ postaΦilo viru zapsat se na konec programu a na jeho zaΦßtek umφstit skok na svoje t∞lo. P°i infekci exe-soubor∙ u₧ bylo zapot°ebφ modifikovat adresu vstupnφho bodu programu, adresu zßsobnφku a n∞kolik prom∞nn²ch urΦujφcφch velikost souboru. TakΘ bylo nutnΘ pohlφdat si exe-soubory obsahujφcφ p°ekryvnΘ moduly apod.
K pochopenφ nßroΦnosti infekce 32bitov²ch exe-soubor∙ je t°eba se nejprve struΦn∞ seznßmit s jejich stavbou.
V operaΦnφch systΘmech Windows 95 a Windows NT se pou₧φvß 32bitov² formßt spustiteln²ch soubor∙, znßm² jako pe-format. (Jeho nßzev je zkratkou od portable executable - tedy p°enositeln² formßt). Je navr₧en tak, aby byl bez problΘm∙ p°enositeln² mezi r∙zn²mi platformami poΦφtaΦov²ch systΘm∙ s r∙zn²mi typy procesor∙.
Pe-soubor, stejn∞ jako 16bitov² ne-formßt pou₧φvan² ve Windows 3.x, zaΦφnß starou znßmou dosovskou exe-hlaviΦkou a krßtk²m programem nazvan²m STUB, kter² vßs upozornφ, ₧e program musφte spustit pod operaΦnφm systΘmem Windows. Po tΘto sekci nßsleduje pe-hlaviΦka a pole tzv. SECTION HEADERS, tedy pole hlaviΦek jednotliv²ch sekcφ (oddφl∙) souboru. Nßsledujφ jednotlivΘ sekce, kterΘ obsahujφ k≤d, neinicializovanß data, inicializovanß data, relokaΦnφ tabulku apod. S ohledem na tuto strukturu pe-soubor∙ se nabφzφ n∞kolik zp∙sob∙ jejich mo₧nΘ infekce.
Vzhledem k tomu, ₧e velikost jednotliv²ch sekcφ v pe-souboru je zarovnßna na nßsobek 512 bajt∙, je mo₧nΘ umφstit k≤d viru do nevyu₧itΘ Φßsti n∞kterΘ sekce. Tento zp∙sob infekce mß samoz°ejm∞ n∞kolik zßsadnφch nedostatk∙. Za prvΘ, virus je omezen p°i infekci pouze na takov² typ soubor∙, kterΘ majφ dostatek nevyu₧itΘho mφsta pro t∞lo viru, a za druhΘ, virus musφ b²t samoz°ejm∞ menÜφ ne₧ 512 bajt∙, a to je dosti mßlo i pro jednoduch² infektor com-soubor∙. Naproti tomu, takov² virus je schopen infikovat soubory beze zm∞ny jejich dΘlky.
NßroΦn∞jÜφ zp∙sob infekce pe-soubor∙ spoΦφvß v p°idßnφ dalÜφ sekce k≤du k souboru, do kterΘ umφstφme t∞lo viru. Tento zp∙sob infekce u₧ vy₧aduje nßroΦn∞jÜφ modifikace pe-hlaviΦky, p°idßnφ dalÜφ hlaviΦky sekce a samotnΘ novΘ sekce.
Do t°etice, nejnßroΦn∞jÜφm zp∙sobem infekce je zapsßnφ t∞la viru do stßvajφcφ k≤dovΘ sekce. Tento postup vy₧aduje dokonalΘ pochopenφ struktury pe-soubor∙ a manipulaci s mnoha jeho polo₧kami. Musφ se posunout vÜechny sekce, kterΘ se nachßzejφ za sekcφ k≤du, a upravit velkΘ mno₧stvφ relativnφch adres pe-souboru.
Zvlßdnutφ technik infekce pe-soubor∙ je zßsadnφ v∞cφ p°i psanφ 32bitovΘho viru.
Zb²vajφcφ programovßnφ v asebleru pod operaΦnφm systΘmem Windows 95 se zßkladnφ znalostφ programovßnφ pod Windows ji₧ nenφ tak slo₧itΘ, jak by se na prvnφ pohled mohlo zdßt. Zatφmco v prost°edφ MS-DOS pou₧ije virus p°i otevφrßnφ souboru vyvolßnφ p°eruÜenφ INT 21 s p°φsluÜn²mi parametry v registrech procesoru, v prost°edφ Windows ulo₧φ tyto parametry do zßsobnφku a skoΦφ na p°φsluÜnou funkci API. Proto₧e tyto funkce jsou samoz°ejm∞ externφ a jsou souΦßstφ knihoven DLL operaΦnφho systΘmu, je t°eba n∞jak zjistit adresu danΘ funkce API. U normßlnφch aplikacφ je tento proces ·kolem zavad∞Φe, kter² danou aplikaci spouÜtφ. Ten potom zjistφ z informacφ zapsan²ch v pe-souboru, kterΘ knihovny DLL a kterΘ jejich funkce jsou aplikacφ volßny, a korektn∞ upravφ na p°φsluÜn²ch mφstech adresovΘ odkazy na tyto funkce. Pokud vÜak virus bude chtφt vyu₧φt t∞chto automatick²ch relokacφ, nezb²vß mu, ne₧ se pustit do nßroΦn∞jÜφch modifikacφ pe-souboru a zejmΘna jeho relokaΦnφ sekce.
I zde se vÜak nabφzφ urΦitΘ zjednoduÜenφ. P°i startu Windows 95 jsou toti₧ hlavnφ moduly API, jako je nap°. modul KERNEL32.DLL, natahovßny do pam∞ti na stßle stejnΘ mφsto. Pokud si tedy, nap°. krokovßnφm klasicky p°elo₧enΘho programu, zjistφme adresy t∞chto funkcφ, m∙₧eme potom zjiÜt∞nΘ vstupnφ body vyu₧φt p°φmo bez vyu₧itφ importovacφho mechanismu a slo₧itΘho zpracovßnφ struktur pe-souboru. tento zp∙sob mß i svß ·skalφ. Budete-li takto koncipovan² virus chtφt p°enΘst nap°. z operaΦnφho systΘmu Windows 95 do systΘmu Windows NT, dojde samoz°ejm∞ k havßrii, proto₧e pod Windows NT se nebudou p°φsluÜnΘ funkce vyskytovat na stejn²ch adresßch jako ve Windows 95. TakΘ novΘ verze systΘmu by mohly podobn∞ napsan²m vir∙m znep°φjemnit ₧ivot.
Prvnφm virem napsan²m pro operaΦnφ systΘm Windows 95, kter² byl schopen infikovat 32bitovΘ spustitelnΘ soubory, byl virus Bizatch alias Boza, vytvo°en² zaΦßtkem roku 1996. Tento virus nenφ pam∞¥ov∞ rezidentnφ a p°i spuÜt∞nφ infikovanΘho souboru se pokusφ vyhledat v aktußlnφm adresß°i t°i pe-soubory a napadnout je. Pokud zde nejsou soubory k dispozici, posouvß se virus po stromu adresß°∙ sm∞rem ke ko°enovΘmu adresß°i a hledß dßl. Po infekci t°φ soubor∙ vracφ virus °φzenφ hostitelskΘmu souboru. Ka₧d² t°icßt² den v m∞sφci vypφÜe virus hlßÜenφ. Virus nenφ destruktivnφ, ale obsahuje chybu, kv∙li nφ₧ m∙₧e b²t hostitelsk² soubor Üpatn∞ napaden a poruÜen. DΘlka viru je 2680 bajt∙. Virus vyu₧φvß p°φmΘho volßnφ funkcφ API operaΦnφho systΘmu, jak jsme ji₧ vysv∞tlili, detekuje vÜak, zda jsou p°φsluÜnΘ funkce v pam∞ti na oΦekßvan²ch mφstech. Proto p°i spuÜt∞nφ infikovanΘho souboru pod Windows NT nedojde k havßrii, ale virus se pod tφmto operaΦnφm systΘmem takΘ nebude mno₧it.
Nezb²vß ne₧ doufat, ₧e se v brzkΘ dob∞ nevyrojφ spousta zßke°n²ch vir∙ napsan²ch pro novΘ operaΦnφ systΘmy. Jejich Φas urΦit∞ p°φjde a je t°eba se na to d∙kladn∞ p°ipravit.

Zdroj: Viry 98 - Ji°φ MrnuÜtφk