Wirusy komputerowe
Sieci komputerowe
Marek Pudełko
2
Spis treści
• Definicja wirusa
komputerowego
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.
4
Charakterystyka wirusa
1. Możliwość samopowielania się,
2. Nie może działać samodzielnie,
3. Szkodliwe działanie
5
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
7
8
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.
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.
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.
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) .
13
14
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 - Pascal, C/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.
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
17
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
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.
20
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
•
•
•
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.
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.).
23
24
25
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.
•
http://www.chip.pl/arts/archiwum/n/printversion/pri
•
•
http://poradnik.2lo.elblag.pl/800/wirusy-pm/index.ht
• http://technologie.gazeta.pl/technologie/5,85
155,5134590.html?i=0
•
http://en.wikipedia.org/wiki/Computer_virus
•
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?