background image

Wirusy komputerowe

Sieci komputerowe

Marek Pudełko

background image

 

 

2

Spis treści

• Definicja wirusa 

komputerowego

background image

 

 

3

Wirus komputerowy

• Wirus komputerowy to program 

komputerowy, który w sposób celowy 
powiela się bez zgody użytkownika i 
wykonuje destrukcyjne operacje.

• Wirus nie działa samodzielnie.

– Do swojej działalności wymaga nosiciela w 

postaci programu komputerowego, poczty 
elektronicznej, dokumentu itp.

background image

 

 

4

Charakterystyka wirusa

1. Możliwość samopowielania się,
2. Nie może działać samodzielnie,
3. Szkodliwe działanie

background image

 

 

5

background image

 

 

6

Szczególnie wrażliwe 

miejsca

• programy wykonywalne typu EXE, COM
• pliki z rozszerzeniem OVL, BIN, SYS
• biblioteki DLL
• pliki systemowe COMMAND.COM, IBMBIO.COM, 

IBMDOS.COM

• tablica partycji dysku stałego
• boot - sektor dysku lub dyskietki
• tablica partycji dysku twardego FAT
• sektory zaznaczone jako uszkodzone tzw. bad sectors
• zagubione klastery tzw. lost clusters
• dokumenty pakietu MICROSOFT OFFICE (każde 

środowisko dopuszczające pisanie makropoleceń może 

być inspirujące dla autorów wirusów).

• inne miejsca wymyślone przez komputerowych 

terrorystów 

background image

 

 

7

background image

 

 

8

background image

 

 

9

Podział wirusów ze względu na 

sposób infekcji

 Wirusy sektora ładowania /inicjującego/ (boot sector virus)

Zmieniają zawartość głównego sektora ładowania ( master boot sector)  zwykle zastępując właściwą 

zawartość swoją własną wersją. Oryginalna wersja modyfikowanego sektora jest na ogół 

przechowywana w innym miejscu dysku tak , by wersja wirusowa była wykonywana jako pierwsza. 

Zwykle ładuje ona pozostałą część kodu wirusa do pamięci, poprzedzając wykonanie oryginalnej wersji 

sektora ładowania. W ten sposób wirus rezyduje na stałe w pamięci dopóki komputer jest włączony.

Wirusy sektora ładowania są rozpowszechniane przez fizyczną wymianę każdego nośnika , który może 

być wykorzystany do uruchomienia systemu operacyjnego. Komputer zostaje zainfekowany wirusem 

sektora ładowania tylko wtedy , gdy użytkownik zainicjuje działanie systemu z zainfekowanego dysku. 

Całkowicie bezpieczne jest włożenie zainfekowanej dyskietki do kieszeni napędu i skopiowanie z niej 

danych.

 Pasożytnicze (plikowe)

Wirusy tego typu modyfikują zawartość plików wykonywalnych (COM , EXE , SYS i innych). Dołączają 

się one do pliku pozostawiając nienaruszoną większość programu. Przebieg wykonywania programu 

zostaje odwrócony w taki sposób , aby kod wirusa był wykonywany jako pierwszy. Po wykonaniu 

programu wirusa następuje uruchomienie oryginalnego programu. Jedną z odmian wirusów 

pasożytniczych są wirusy zamazujące. Infekując program zamazują jego początek własnym kodem. 

Uruchomienie takiego programu powoduje , że wirus poszukuje następnej ofiary a oryginalny program 

nigdy nie jest uruchamiany.

Wirusy pasożytnicze rozpowszechniają się za pomocą każdego nośnika , który może być użyty do 

przechowywania lub przekazywania programu wykonywalnego np. dyskietki , taśmy , sieci itp.

Towarzyszące

 Wykorzystują tę właściwość, że gdy w katalogu występują dwa programy o tej samej nazwie , to 

system operacyjny wykonuje plik COM przed plikiem EXE. Wirus towarzyszący tworzy plik COM o tej 

samej nazwie co plik EXE, umieszczając w nim własny kod. Gdy użytkownik poda nazwę programu 

(bez rozszerzenia) do uruchomienia , system operacyjny wczyta COM , co spowoduje wykonanie kodu 

wirusa i w następstwie , załadowanie i wykonanie pliku EXE.

Sprzęgające

Wirusy sprzęgające nie modyfikują żadnego pliku na dysku ale pomimo tego są bardzo żywotne i 

szybko się mnożą. Wirusy sprzęgające działają przez dołączenie wskaźnika pierwszego JAP'a katalogu 

zapisu każdego pliku wykonywalnego do pojedynczego JAP'a zawierającego kod wirusa.

Hybrydowe

Wirusy hybrydowe łączą w sobie jedne z powyższych metod. Daje to największe możliwości replikacji a 

jednocześnie utrudnia leczenie zainfekowanego systemu. 

background image

 

 

10

Podział wirusów ze względu na 

zachowanie się po uzyskaniu 

kontroli

• Rezydentne

Wirusy tego typu instalują się w pamięci jako rezydentne 

programy usługowe TSR (Terminate and Stay 

Resident). Przejmują jedno lub więcej przerwań i 

infekują, gdy spełnione są określone warunki np. 

uruchomienie programu.

• Nie rezydentne

Są aktywne jedynie wtedy , gdy jest wykonywany 

zainfekowany program użytkowy. Wykonują one 

całkowicie swój program na tym etapie i nie pozostają w 

pamięci.

• Hybrydowe

Wykorzystują kombinacje powyższych metod. Możliwy jest 

przykład gdy wirus jest nie rezydentny a po uzyskaniu 

kontroli pozostawia w pamięci rezydentny fragment 

swojego kodu. 

background image

 

 

11

Inne typy programów 

sabotażowych

• Bomba logiczna

– Złośliwy kod umieszczony w programie , który uaktywni się , gdy zostaną 

spełnione określone warunki np. program załamania systemu po 

usunięciu nazwiska autora z listy płac.

• Koń trojański

– Dowolny program , który zawiera kod realizujący funkcje inne niż te , 

których spodziewa się użytkownik lub deklarowanych w dokumentacji 

systemu (programu). Obejmuje to również bomby logiczne. Koniem 

trojańskim może być np. Norton Commander z dołączonym kodem który 

sformatuje dysk twardy po obejrzeniu w oknach Norton'a 10.000 plików.

• Robak

– Program, który mnoży się w sposób nie kontrolowany w sieci 

komputerowej.

• Królik

– Program wykorzystujący w pełni określone zasoby systemu na skutek nie 

kontrolowanego powielania się.

• Wirus Makr

– Wirus Makr nie jest programem w dosłownym znaczeniu. Jest on 

zbudowany z poleceń rozumianych przez konkretny program np. edytorski 

i infekuje jedynie dokumenty tekstowe lub arkusze kalkulacyjne.

• Prowadzone były również próby nad innymi typami "programów" 

sabotażowych takimi jak np. wirus plików wsadowych BAT oraz 

bomby ANSI. 

background image

 

 

12

Techniki stosowane przy tworzeniu wirusów:

    * Wirusy wielopostaciowe (polimorficzne)

    Od dawna twórcy wirusów marzyli aby ich "dzieła" były niewykrywalne przez skanery antywirusowe. Rozwiązanie było proste: wczesne skanery 

antywirusowe posługiwały się próbką (łańcuchem bajtów charakterystycznych) ze złapanego i przeanalizowanego wirusa. Taki skaner przeszukując plik 

porównywał jego strukturę ze składowanymi w swojej bazie próbkami. W razie wykrycia podobieństwa wszczynany był alarm. Wystarczyło stworzyć 

wirusa z którego nie można było pobrać próbki. Aby było to możliwe wirus po każdym swoim powieleniu powinien wyglądać inaczej.

    Początkowo wprowadzono procedury szyfrujące kod wirusa za pomocą stałego lub zmiennego klucza. Ta procedura zawsze wyglądała jednakowo i z 

niej można było wyznaczyć bajty charakterystyczne. Następnie programiści poszli dalej. Aby "zamydlić oczy" skanerowi wprowadzono do kodu procedury 

deszyfrującej dodatkowych , nieistotnych dla algorytmu instrukcji , zmienianych podczas każdej infekcji. W odpowiedzi na to autorzy skanerów 

antywirusowych wprowadzili do swoich próbek tzw. znaki zastępcze (np. bajt ignorowany , przyjmujący dowolną wartość).

    Kolejnym ruchem autorów wirusów było utworzenie algorytmów generujących od kilkudziesięciu do nawet 1 miliarda różnych postaci procedury 

deszyfrującej. Przy procedurach które generują małą ilość wariantów możliwe jest wykrywanie przez zapisanie w bazie skanera wszystkich możliwych do 

wygenerowania ciągów. Jednak przy dzisiejszych możliwościach autorów i ich wirusów ta metoda wykrywania nie zdaje egzaminu.

    Autorzy nowoczesnych wirusów stosują metody : zastępowania i przestawiania instrukcji procedury deszyfrującej , mieszania instrukcji właściwego 

kodu procedury z instrukcjami "jałowymi" np. NOP (nic nie rób) oraz rozsiewania kodu procedury deszyfrującej w kodzie nosiciela. Metoda szyfrowania 

polimorficznego jest również stosowana dla kodu wirusa rezydującego w pamięci komputera. Utrudnia to jego identyfikację i obezwładnienie.

    * Wirusy utajnione (ang. Stealth)

    Jedną z metod uczynienia wirusa niewykrywalnym jest jego utajnienie. Na ogół kod wirusa jest widoczny w kodzie zarażonego programu. Możemy się o 

tym przekonać oglądając zarażony program np. edytorem binarnym. Metoda utajniania polega na podsuwaniu programom czytającym zarażony plik , 

obrazu jego sprzed infekcji.

    Wirus wykorzystujący technikę STEALTH przechwytuje odpowiednie przerwania i na żądanie odczytu odkaża nosiciela (wirusy plikowe) lub podsuwa 

oryginalny kod ze swojej przechowalni (wirusy dyskowe). W przypadku wirusów plikowych plik odkażony po zamknięciu jest ponownie infekowany. 

Wirusy dyskowe ukrywają swój kod na dysku również w inny sposób. Formatują sobie dodatkową ścieżkę na której umieszczają swój kod. Do tak 

spreparowanej ścieżki system operacyjny nie ma dostępu i kod wirusa nie jest narażony na wykrycie. Wirusy typu STEALTH przekłamują odczyty 

rozmiaru pliku , odejmując od oryginalnego rozmiaru wielkość wirusa. Użytkownik komputera nie zauważy więc faktu powiększenia się rozmiarów 

zbiorów na skutek infekcji. Aby ukryć fakt rezydowania w pamięci komputera wirusy typu STEALTH podsuwają programom oryginalne adresy wektorów 

przerwań oraz ukrywają zajęte przez siebie bloki pamięci oznaczając je najczęściej jako nie przydzielone.

    * Wirusy opancerzone (ang. Armory)

    Dobry wirus musi nie tylko się ukrywać ale również musi być odporny na jego analizę. Aby zapobiec de-asemblacji kodu wirusa , autorzy wstawiają do 

jego kodu wiele pojedynczych bajtów dobranych w taki sposób , aby przy próbie przetłumaczenia go występowały przekłamania. Procesor wykonujący 

rozkazy kodu wirusa w jednoznaczny sposób "wie" jakie rozkazy pobrał i ma wykonać , lecz program tłumaczący ten kod w mniejszym lub większym 

stopniu nie jest w stanie zinterpretować instrukcji które zostały obstawione "lewymi bajtami".

    Inną metodą analizy kodu wirusa jest jego śledzenie pod kontrolą programu śledzącego (ang. debugger).W tym trybie kod wirusa jest wykonywany 

krok po kroku. Aby to było możliwe debugger wstawia w kodzie śledzonym specjalne bajty tzw. punkty zatrzymania (ang. breakpoint) . 

background image

 

 

13

background image

 

 

14

background image

 

 

15

Języki do tworzenia wirusów

• Najlepsze niskopoziomowe języki 

programowania  - Asembler

– Generują zwięzły kod. Umożliwia dużą swobodę w 

dostępie do pamięci i portów.

– Mogą jednak egzystować w obrębie jednej 

rodziny komputerów.

• Języki wyższego poziomu - PascalC/C++

– Wirusy takie można wdrożyć na różne platformy.

• Języki makr wbudowane w nowoczesne 

edytory tekstów lub arkusze kalkulacyjne.

– Pozwalają na infekcję każdego otwieranego przez 

program dokumentu lub arkusza. Wymarzone 

narzędzie do tworzenia wirusów dla 

początkujących programistów.

background image

 

 

16

Generatory wirusów

Generator wirusów to program umożliwiający 

stworzenie wirusa w oparciu o gotowe procedury. 

Nie wymaga nawet znajomości systemu czy 

mechanizmów wykorzystywanych przez wirusy.

Programy korzystają z gotowych modułów w 

asemblerze i umożliwiają stworzenie wirusa o 

zadanych parametrach wybieranych zwykle przy 

pomocy menu.

– Można w nim określić zakres infekowanych obiektów i 

rodzaj efektów które ma on wywoływać.

Najbardziej znane generatory wirusów to:

– IVP 

- Instant Virus Production Kit

– VCL  - Virus Construction Laboratory

– PS-MPC- Phalcon-Skism Mass Produced Code 

Generator

– G2 

- G Squared

– NRLG 

- Nuke Randomic Life Generator

background image

 

 

17

background image

 

 

18

Czynniki sprzyjające 

wirusom

• Brak wiedzy użytkowników
• Niefrasobliwość użytkowników
• Jednorodny sprzęt i oprogramowanie
• Systemy operacyjne podatne na wirusy
• Błędy w oprogramowaniu
• Korzystanie z nielegalnego 

oprogramowania

background image

 

 

19

Ochrona przed wirusami

• Używać i regularnie aktualizować program 

antywirusowy

• Niezwłocznie wgrywać wszystkie poprawki 

systemu operacyjnego i oprogramowania

• Unikać niepewnego oprogramowania
• Niepewne programy uruchamiać w maszynie 

wirtualnej

• Nieukrywanie rozszerzeń plików
• Nadawać nazwom katalogów rozszerzenia
• Pliki ustawiać w trybie „READ ONLY”
•  W Biosie włączenie opcji VIRUS PROTECTION
• Nośniki typu dyskietka, pendrive zabezpieczać 

przed zapisem.

background image

 

 

20

background image

 

 

21

Wirusy Linuksa

Marek Sell, twórca programu antywirusowego mks_vir, w 

wywiadzie udzielonym tygodnikowi "Computerworld"

 stwierdził: "Zdecydowanie wzrasta liczba wirusów linuxowych, obecnie przybywa ich 20-30 miesięcznie." 

Ostatnie Felietony 

Jądro wolnej kultury

 

Kowal zawinił...

 

Koniec strachu? 

Opcja nuklearna 

Przeszłość i przyszłość pakietowania 

W pierwszej chwili nie zwróciłem uwagi na powyższe zdanie, doczytałem spokojnie do końca zadowolony, że po raz kolejny w "tygodniku menedżerów i informatyków" pojawia się słowo Linux. Dam sobie głowę uciąć, że 

mniej wyczulonych na Linuksa czytaczy zdanie to zupełnie nie obeszło.

Zaciekawiony i lekko zaniepokojny, bo przecież o system na którym pracuję chodzi, rozpoczałem gorączkowe poszukiwania tych wszystkich krwiożerczych wirusów o których do tej pory nie miałem pojęcia.

Drżącymi rękami wklepałem w Netscape'a adres witryny Marka Sella: http://www.mks.com.pl/baza.html, i rozpocząłem szukanie wszystkiego co zwiera słowo "Linux". Wirusów i nie tylko znalazłem aż... 10, a są to:

Lion - znany również jako Linux.Lion, robak. Pełni on funkcję konia trojańskiego, umożliwiając zdalny dostęp do komputera oraz wykradając hasła. 

Ramen - znany również jako Linux.Ramen, robak. Jego działanie polega na zamianie strony głównej serwera http. 

PK14 - tzw. fałszywy alarm czyli email wysłany przez dowcipnisia. W treści emaila pojawia się Linux. 

Pandemic - fałszywy alarm, jak wyżej. 

Music Panel - fałszywy alarm, jak wyżej. 

Cheese - robak, który łata dziury wykorzystywane przez Liona. 

Jac - jest wirusem infekującym pliki w linuksowym formacie ELF, znajdujące się w tym samym katalogu. 

Winux - jest wirusem jednocześnie infekującym pliki wykonywalne typu PE systemu Windows oraz pliki wykonywalne w linuksowym formacie ELF. Wirus ten jest jedynie prezentacją możliwości stworzenia mikroba 

wieloplatformowego i nie zawiera żadnych procedur destrukcyjnych, a ponadto nie występuje na wolności. 

Prolin - jest robakiem internetowym rozsyłającym się przy użyciu poczty elektronicznej. Z Linuksem ma tylko tyle wspólnego, że wyświetla komunikat "change atleast now to LINUX" - i pewnie ma rację. :) 

MTX.Worm - to robak internetowy, dołącza się do emaila pod różnymi nazwami, jedna z nich to "Is_linux_good_enough!.txt.pif". [1] 

Jak widać tylko 5 z nich rzeczywiście potrzebuje Linuksa, żeby siać spustoszenie lub... naprawiać szkody.

A przecież co miesiąc według Marka Sella, pojawia się ich conajmniej 20 sztuk! Może pan Sell jest tak bardzo zajęty ich łapaniem i analizą, że nie ma czasu na aktualizację bazy danych?

Jeśli tak, to z pewnością informacje o wirusach znajdę po prostu w Internecie gdzie aż roi się od serwisów poświęconych bezpieczeństwu. Warto też zajrzeć na strony firm produkujących oprogramowanie antywirusowe - 

może byli pierwsi lub po prostu mają więcej czasu lub ludzi by uaktualnić dane? Sprawdźmy to.

Fraza "linux virus" daje 8.490 hitów w Googlach. Część linków to odwołania do HOWTO, część do tekstów Silvia Cesare poświęconych tworzeniu wirusów pod Linuksa, spora część to powtarzające się doniesienia prasowe.

Spróbowałem zawęzić krąg poszukiwań wyłączając znalezione już na stronach Marka Sella "wirusy". Kolejna fraza wyglądała więc tak:

"linux virus" -lion -ramen -pk14 -pandemic -cheese -prolin -winux -jac

Liczba trafień spadła o ponad 1100 co sugerowało, że jednak robali jest sporo. Ale wystarczyło pominąć strony zawierające słowo "HOWTO" by dostać o 3300 hitów mniej, "silvio cesare" to kolejne 460 mniej hitów. 

Wyłączenie z szukania słowa "bliss" - nazwy najsłynniejszego i pierwszego wirusa linuksowego dało w efekcie prawie 1000 mniej hitów.

Ciężko idzie, może z innej mańki?

Ile jest stron z frazą '"linux virus" reported'? Tylko 470! Z czego część to takie kwiatki jak artykuł o tytule "First Successful Linux Virus Reported" z... 22 stycznia 2001, a jak pewnie wszystkim wiadomo Bliss, pierwszy wirus 

na Linuksa, pojawił się w roku 1997. Całe 4 lata wcześniej. W co mam wierzyć? A raczej komu?

Sporo ze znalezionych stron odesłało mnie do domeny www.viruslist.com na której udało mi się znaleźć aż... 19 wzmianek o wirusach pod Linuksa z czego 4 to jednak wirusy windowsowe, a o 5 już wspomniałem wcześniej. 

Nowych zatem znalazło się 9. Oto one:

Linux.Satyr - nie czyniący szkód nie-rezydent. 

Linux.Zipworm - infekujący archiwa ZIP. 

Linux.RST - infekujący binarki i dający root-shella. 

Linux.Winter - również infekujący binarki lecz nie czyniący szkód. 

Linux.Kagob - jak wyżej. 

Linux.Nuxbee - jak wyżej. 

Linux.Diesel - jak wyżej. 

Linux.Vit.4096 - drugi po Blissie wirus linuksowy, atakujący binarki. 

Linux.Bliss - dzierżący palmę pierwszeństwa. 

Worm.Linux.Adm - po prostu kolejny robal. 

Na stronach producentów programów antywirusowych również trudno znaleźć więcej niż kilkanaście wzmianek o wirusach linuksowych. Zmowa milczenia? [2]

Wrócę jeszcze na koniec do wypowiedzi pana Marka Sella. Po bliższym przyjrzeniu okazała się błędna. Jeśli nawet redakcja "Computerworlda" popełniła błąd dodając po jednym zerze do podawanych przez Sella liczb to i tak 

nie ma to żadnego odzwierciedlenia w rzeczywistości. Od publikacji artykułu minął juz prawie miesiąc i nie słychać o nowych dwóch, trzech a tym bardziej trzydziestu wirusach. Linux ma się dobrze. [3]

Wygląda na to, że moda na Linuksa dotyknęła także firmy antywirusowe. Szkoda, że objawia się to też nierzetelnymi informacjami przez nie podawanymi.

Szkoda, że menedżerowie i informatycy do których "Computerworld" jest skierowany czytają takie informacje. Szczególnie teraz gdy Linux z systemu dla zapaleńców staje się dojrzałym systemem nieraz wykorzystywanym 

w poważnych projektach informatycznych. To nie fair panie Sell!

[1] Opisy zaczerpnąłem ze stron firmy Marka Sella.

[2] Sprawdzałem Sophosa, Symanteca, Antivira, McAfee.

Co ciekawe Symantec listuje sporo wirusów z adnotacją "No additional information" - o co chodzi? Nie wiedzą jak działają ale program je wykrywa?

McAfee w swojej bibliotece wirusów ma aż 26 linuksowych lecz po bliższym sprawdzeniu okazuje się, że zjadują się tam konie trojańskie i exploity.

[3] Pomijam zupełnie fakt, że wszystkie prawdziwe wirusy na Linuksa bazują na głupocie administratorów i przy zastosowaniu podstawowych zasad bezpieczeństwa są groźne jedynie dla danych użytkowników. System może 

stać się ich ofiarą jedynie z wydatną "pomocą" roota. 

background image

 

 

22

• Marek Sell, twórca mks_vira, 

wielokrotnie podkreślał, że antywirusy 
różnią się od innych aplikacji 
komercyjnych. "Program antywirusowy 
jest bardziej usługą niż towarem. Tak 
naprawdę ważne jest nie to, co 
kupujemy, ale co dostajemy po kupnie, 
czyli stała aktualizacja
" (dla 
"Magazynu Internetowego WWW", 
listopad 2002 r.). 

background image

 

 

23

background image

 

 

24

background image

 

 

25

background image

 

 

26

Linki

http://pl.wikipedia.org/wiki/Wirus_komputerowy

http://wyborcza.pl/1,76842,4337762.html

http://jnaszkiewicz.wodip.opole.pl/

http://wirusykomputerowe.webpark.pl/

http://www.oeiizk.edu.pl/informa/jazdzewska/wirusy.

html

http://www.chip.pl/arts/archiwum/n/printversion/pri

ntversion_90615.html

http://www.viruslist.pl/

http://poradnik.2lo.elblag.pl/800/wirusy-pm/index.ht

ml

• http://technologie.gazeta.pl/technologie/5,85

155,5134590.html?i=0

http://en.wikipedia.org/wiki/Computer_virus

vx.netlux.org/lib/aps00.html

background image

 

 

27

Pytania powtórkowe

1. Podaj definicję wirusa komputerowego.
2. Jakie miejsca w systemie komputerowym mogą być 

narażone na rozmnażanie wirusów?

3. Opisz fazy funkcjonowania wirusa komputerowego
4. Jak działają wirusy zwane końmi trojańskimi?
5. Na czym polega obrona bierna przed wirusami?
6. Na czym polega obrona aktywna przed wirusami?
7. Opisz rodzaje programów antywirusowych.
8. Podaj nazwę znanych polskich programów 

antywirusowych.

9. Czy wirus może zarazić program umieszczony na 

dyskietce zabezpieczonej mechanicznie przed zapisem?

10.Na czym polega różnica między usunięciem i 

zamrożeniem wirusa?

11.Czy wirus komputerowy może przeskoczyć na człowieka?


Document Outline