Win95.SK

Jest to paso偶ytniczy wirus pracuj膮cy w 艣rodowisku Windows 95/98. Instaluje si臋 w pami臋ci Windows i przejmuje funkcje dost臋pu do plik贸w, by w nast臋pnej kolejno艣ci zainfekowa膰 pliki PE. Wirus 偶eruje na plikach Pomocy Windows (.HLP), modyfikuje je tak, 偶e gdy s膮 uruchamiane, kod wirusa rozprzestrzenia si臋 na twardym dysku i zostaje uruchomiony. Ponadto wirus dodaje swoje elementy do czterech typ贸w archiw贸w: RAR, ZIP, ARJ i LHA. Wirus ukryty w plikach Pomocy i archiwach ma posta膰 pliku w formacie DOS COM i jest uruchamiany w oknie DOS, lecz instaluje sw贸j kod w pami臋ci Windows w r贸wnie skuteczny i podobny spos贸b, co zainfekowane pliki wykonywalne (patrz ni偶ej).

Kod wirusa jest zaszyfrowany, dodatkowo wyposa偶ony w mechanizm polimorficzny (dotyczy to zar贸wno plik贸w PE jak i DOS). W przypadku plik贸w Windows wirus dodatkowo korzysta z technologii "Entry Point Obscuring" (EPO): kod wirusa nie przejmuje kontroli bezpo艣rednio po uruchomieniu pliku. Instrukcje JMP_Virus (skok do kodu wirusa) w wi臋kszo艣ci przypadk贸w umieszczone s膮 gdzie艣 w ciele pliku, a nie typowo w nag艂贸wku czy te偶 na pocz膮tku pliku.

Wirus jest tak zwanym "powolnym infektorem". Zanim zarazi, sprawdza wiele warunk贸w i w rezultacie wybiera jedynie kilka plik贸w - w przypadku standardowej instalacji Windows 95/98 jest to ok. 10 plik贸w EXE. To samo dotyczy plik贸w HLP i archiw贸w. Ponadto wirus zwleka z uruchomieniem mechanizmu infekowania ok. 1 minut臋, a w przypadku plik贸w HLP i archiw贸w zara偶anie rozpoczyna si臋 dopiero, gdy przez dwie minuty szkodnik b臋dzie mia艂 umo偶liwiony dost臋p do tych plik贸w.

Wirus jest bardzo gro藕ny. Gdy uzyska dost臋p do plik贸w na dysku, sprawdza ich nazwy i w przypadku odnalezienia jednego z program贸w antywirusowych (ADINF, AVPI, AVP, VBA, DRWEB), kasuje wszystkie pliki we wszystkich katalogach na dyskach od C: do Z:, a nast臋pnie zawiesza system.

Istnieje jeden plik, kt贸ry jest kasowany przez wirusa za ka偶dym razem, gdy instaluje si臋 on w systemie. Jest to plik COMMAND.PIF w katalogu Windows.

Wirus nie jest pozbawiony b艂臋d贸w. Ujawniaj膮 si臋 one przy okazji niekt贸rych konfiguracji Windows 95/98 - podczas infekowania wirus mo偶e spowodowa膰 wy艣wietlenie popularnego "niebieskiego ekranu" ze standardow膮 wiadomo艣ci膮 "B艂膮d Ochrony". Podczas instalowania w systemie wirus wy艣wietla wiadomo艣膰 (zale偶nie od generatora losowo艣ci z prawdopodobie艅stwem trafienia 1 do 48):

1997 VBA Ltd. E-mail:support@vba.minsk.by

Instalowanie w pami臋ci (wirus rezydentny)

Aby sta膰 si臋 rezydentnym, wirus pracuje na poziomie sterownik贸w VxD (pier艣cie艅 0). W standardowy spos贸b ani aplikacje Windows, ani programy DOS nie maja dost臋pu do tego obszaru, zatem wirus musi wykorzysta膰 wiele ciekawych metod.

Gdy uruchamiany jest DOS, wirus sprawdza w kt贸rym momencie instalacji Windows oddaje sterownie do DOS-a. Nast臋pnie za pomoc膮 wywo艂a艅 DMPL wirus uzyskuje dost臋p do Lokalnej Tablicy Deskryptor贸w (tablica alokacji pami臋ci chroniona przez procesor), do艂膮cza si臋 do niej i prze艂膮cza 16-bitowy kod DOS-a na 32-bitowy tryb chroniony. W ten spos贸b kod wirusa staje si臋 cz臋艣ci膮 j膮dra Windows i uzyskuje dost臋p do wszystkich potrzebnych funkcji Windows.

Podczas uruchomienia zainfekowanego pliku PE, wirus do艂膮cza si臋 do tablicy alokacji pami臋ci systemowej i prze艂膮cza sw贸j kod z poziomu aplikacji (Ring3) na poziom j膮dra (Ring 0). Nast臋pnie przekazuje kontrol臋 do mechanizmu instalacyjnego DOS.

Mechanizm instalacyjny, przejmuj膮c kontrol臋, alokuje blok pami臋ci systemowej, kopiuje do niego wirusa, przejmuje funkcje Windows a nast臋pnie zwraca kontrol臋. Oryginalna kopia wirusa powraca do DOS (w przypadku infektora DOS).

Przejmowanie plik贸w i przerwa艅 przez wirusa

Wirus przejmuje trzy funkcje Windows. Pierwsz膮 z nich jest dost臋p do portu I/O. Wirus przejmuje port 534Bh, aby za jego pomoc膮 sprawdzi膰 stan zainfekowania systemu, zwracaj膮c warto艣膰 21h ( znak"!") w rejestrze AL. Zar贸wno wirus DOS jak i Windows sprawdza te parametry zanim poczyni pierwsze kroki w kierunku stania si臋 rezydentnym. W艂a艣nie numer tego portu sta艂 si臋 elementem nazwy wirusa - 534Bh jest to "SK" w kodzie ASCII.

Drugie przerwanie jest ju偶 standardowo wykorzystywane przez wi臋kszo艣膰 wirus贸w rezyduj膮cych w pami臋ci Windows - jest to przerwanie Systemu Plik贸w API. Za pomoc膮 tego wywo艂ania wirus uruchamia sw贸j mechanizm zara偶ania.

Trzeci膮 funkcj膮 jest "Install FileSystemApiHook" . Wywo艂anie tej funkcji s艂u偶y do ukrycia innych przej臋tych ju偶 funkcji.

Istnieje jeszcze jeden wykorzystywany przez wirusa kruczek IFS API: aby uzyska膰 dost臋p do systemu plik贸w na dysku (celem jest wywo艂anie FileSystem) wirus u偶ywa adresu "wbudowanego" systemu przej臋膰.

Infekowanie plik贸w

Gdy IFS API wirusa przejmuje kontrol臋 i uruchomiony zostanie po raz pierwszy mechanizm zara偶ania, zainfekowana zostaje pow艂oka Windows (najcz臋艣ciej jest to EXPLORER.EXE). Aby zlokalizowa膰 plik tego typu, wirus otwiera plik SYSTEM.INI w katalogu Windows, szuka linii "shell=" i infekuje znalezione pliki.

W systemie Windows plik ten jest zawsze jest u偶ywany, zatem wirus nie mo偶e go zmodyfikowa膰. Aby rozwi膮za膰 ten problem wirus u偶ywa powszechnie wykorzystywanej sztuczki. Kopiuje plik nadaj膮c mu inn膮 nazw臋 (na przyk艂ad zmienia ostatni膮 liter臋: EXPLORER.EXE -> EXPLORER.EXF), infekuje nowopowsta艂y plik, a nast臋pnie zmusza Windows do nadpisania starego pliku jego nowym, zainfekowanym odpowiednikiem. Aby to uczyni膰 u偶ywa typowej procedury: tworzy plik WININIT.INI w katalogu Windows i wpisuje do niego instrukcj臋 "Rename".

Po zainfekowaniu pow艂oki Windows, wirus rozpoczyna infekowanie wszystkich plik贸w do kt贸rych ma dost臋p. Przede wszystkim przegl膮da rozszerzenia plik贸w. Gdy odnajdzie pliki .EXE, .SCR i .DLL przeskakuje do instrukcji mechanizmu zara偶ania plik贸w PE. Gdy odnajdzie pliki .HLP dopisuje do nich w艂asny kod. Natomiast w przypadku archiw贸w .RAR, .ZIP, .ARJ i .LHA wirus umieszcza w艂asne funkcje, umo偶liwiaj膮ce zara偶anie.

Infekowanie Windows PE

Podczas infekowania plik贸w PE wirus deszyfruje i zapisuje sw贸j kod w sekcji Relocation (Fixup) i w rezultacie nadpisuje istniej膮ce tam dane. Cz臋sto zdarza si臋, 偶e Windows alokuje wiele program贸w w pami臋ci nie zwa偶aj膮c zbytnio na ich bezpiecze艅stwo i w przypadku relokacji pami臋ci aplikacje mog膮 zajmowa膰 ten sam obszar pami臋ci, ale w贸wczas dzia艂aj膮 mechanizmy opisuj膮ce konieczne zmiany i przesuni臋cia kod贸w alokowanych w pami臋ci. Dane takie umieszczane s膮 w tzw. tablicy relokacji. Aby niemo偶liwe by艂o realokowanie kodu wirusa, chroniony jest on przez sprytny mechanizm. Modyfikuje on nag艂贸wek PE: czy艣ci flagi relokacji w charakterystycznych polach (oznacza to, 偶e nie ma w tym pliku 偶adnych relokacji) i ustawia na zero adres sekcji relokacji. W rezultacie aplikacja nie mo偶e by膰 umiejscowiona w innym miejscu pami臋ci, wi臋c musi pracowa膰 ci膮gle w tym samym miejscu.

Nast臋pnie wirus czyni konieczne zmiany w nag艂贸wku sekcji relokacji: ustawia jego atrybuty na inicjacyjny i do odczytu. Zale偶nie od losowo generowanej warto艣ci (1:8) zmienia nazw臋 sekcji na losow膮, deszyfruje swo贸j kod i dopisuje go tam. Wirus przygl膮da si臋 r贸wnie偶 rozmiarowi sekcji relokacji - infekuje jedynie pliki, w kt贸rych zmie艣ci si臋 ca艂y jego kod. W rezultacie wirus nie zwi臋ksza rozmiaru plik贸w PE podczas ich infekowania.

Aby przej膮膰 kontrol臋 gdy uruchomione s膮 programy, wirus nie modyfikuje adres贸w wej艣ciowych w nag艂贸wku PE. U偶ywa natomiast innej, bardziej wyszukanej metody - uzupe艂nia losowo wybrane fragmenty dzia艂aj膮cego programu o w艂asne funkcje skoku do kodu wirusa JMP_Virus. W rezultacie kod wirusa nie jest od razu uruchamiany, gdy aktywowany jest zara偶ony program. Ma to swoje z艂e i dobre strony. Wirus jest trudniej wykrywalny, ale (co jest b艂臋dem mechanizmu zara偶ania) mo偶e si臋 zdarzy膰 sytuacja, 偶e wirus b臋dzie "u艣piony" przez d艂ugi czas na skutek tego, 偶e wmontowana instrukcja skoku znajdzie si臋 w takim miejscu kodu, kt贸ry b臋dzie rzadko wykonywany.

Aby znale藕膰 dogodne miejsce do "wczepienia" swojego kodu wirus przegl膮da plik pod k膮tem wywo艂a艅 j臋zyka C/Pascal. Gdy odnajdzie odpowiednie miejsce (pomi臋dzy instrukcj膮 nag艂贸wkow膮 i stopk膮 procedury/ funkcji) umieszcza w nim sw贸j kod JMP_Virus.

Mechanizm skoku JMP_Virus przekazuje kontrol臋 do samego kodu wirusa. Nie jest to jednak prosta instrukcja skoku JMP. Jest to ok. 168 bajtowy kod b臋d膮cy polimorficzn膮 p臋tl膮 deszyfruj膮c膮 kod wirusa, przed otrzymaniem przez niego kontroli.

Trzeba jednak zaznaczy膰, 偶e w przypadku gdy pow艂oka Windows jest ju偶 zainfekowana lub nie da si臋 odnale藕膰 kodu w j臋zyku C lub Pascal, wirus wpisuje instrukcj臋 skoku JMP_Virus bezpo艣rednio pod adres startowy pliku, zatem kod wirusa uruchamiany jest bezpo艣rednio po uruchomieniu programu.

Infekowanie archiw贸w

Wirus interesuje si臋 czterema typami archiw贸w: RAR, ZIP, ARJ i LHA. Podczas infekowania plik贸w tego typu wirus bada ich wewn臋trzny format, dodaje na ko艅cu infektor DOS i bardzo uwa偶nie modyfikuje ca艂膮 struktur臋 pliku, w艂膮czaj膮c pola CRC. Plik, kt贸ry wirus do艂膮cza do archiw贸w jest plikiem DOS COM o losowo generowanej nazwie i rozszerzeniu .COM lub .EXE.

W przypadku infekowania archiw贸w RAR wirus wykorzystuje nieco inny mechanizm. Wirus czyta i uruchamia zapasowe dane z tzw. zapasowego pliku w archiwach RAR. Sztuczka taka pozwala wirusowi uruchomi膰 inny program bez widocznego dla u偶ytkownika efektu - mo偶e on s艂u偶y膰 do stworzenia "upgrade" wirusa, uruchomienia szpiega lub innego programu.

Infekowanie plik贸w Pomocy

Prawdopodobnie wirus mo偶e zara偶a膰 pliki pomocy Windows dzi臋ki temu, 偶e zawieraj膮 one w艂asne makra. Skrypty takie s膮 automatycznie uruchamiane, gdy WinHelp aktywuje pliki pomocy. J臋zyk pisania skrypt贸w jest wystarczaj膮co mocnym narz臋dziem umo偶liwiaj膮cym dost臋p, tworzenie i uruchamianie plik贸w.

Wirus u偶ywa w艂a艣nie tej w艂asno艣ci plik贸w pomocy. Na ko艅cu tego typu plik贸w dopisuje sw贸j kod zara偶aj膮cy DOS jako "dopisek" (nag艂贸wek pliku HLP zawiera w nag艂贸wku pole "d艂ugo艣膰 pliku" i wirus mo偶e zmieni膰 t臋 warto艣膰), modyfikuje struktur臋 wewn臋trzn膮 HLP i dodaje tam w艂asny skrypt. Skrypt ten zawiera dziesi臋膰 instrukcji, kt贸re s膮 automatycznie dopisywane do sekcji [CONFIG] ("|SYSTEM" okre艣lenie HLP), gdy uruchamiany jest zainfekowany plik pomocy. Te dziesi臋膰 instrukcji wyszukuje i uruchamia malutki (oko艂o 380 bajt贸w) loader wirusa. Skrypt wirusa tworzy tego loadera jako plik DOS (z losowo generowan膮 nazw膮) na dysku C:, zapisuje w nim sw贸j kod i uruchamia go - w ten spos贸b loader wirusa przejmuje kontrol臋.

Kod loadera wewn膮trz skryptu HLP jest zakodowany 7-bitowym kodem ASCII - ka偶dy bajt jest konwertowany do dw贸ch liter alfabetu. Gdy kod taki przejmuje kontrol臋, jest automatycznie przetwarzany na powr贸t do postaci bitowej, otrzymuje nazw臋 od macierzystego pliku HLP (skrypt wirusa otrzymuje t臋 nazw臋 jako argument), odczytuje nag艂贸wek pliku HLP, oblicza przesuni臋cie kodu "dopisku", odczytuje go, nadpisuje w艂asnym plikiem COM i powt贸rnie uruchamia. W wyniku tego wirus DOS uzyskuje kontrol臋 i instaluje si臋 w pami臋ci.