Wirusy komputerowe
Co to jest wirus? Wirus komputerowy to krótki program, zwykle szkodzący systemowi operacyjnemu i utrudniający pracę użytkownikowi komputera. Każdy wirus ma zdolność samopowielania. Jest to warunek konieczny, aby dany program można było nazywać wirusem. Wirusy przenoszone są przeważnie w zainfekowanych wcześniej plikach lub w pierwszych sektorach fizycznych logicznych dysków. Proces infekcji polega na odpowiedniej modyfikacji struktury pliku albo sektora. Zainfekowaną ofiarę nazywa się nosicielem, a proces samopowielania replikacją. Długość typowego wirusa waha się w granicach od kilkudziesięciu bajtów do kilku kilobajtów. W dużym stopniu zależy ona od umiejętności programistycznych jego twórcy. Od programisty zależą także efekty, jakie wirus będzie wywoływał po zainfekowaniu systemu.
Do napisania prostego wirusa wystarczy znajomość dowolnego popularnego języka programowania, takiego jak Pascal czy Język C. Najwięcej wirusów pisanych jest jednak w czystym asemblerze. Spowodowane jest to głównie zwięzłością kodu generowanego przez ten język. Kod programu, który z punktu widzenia użytkownika nie robi nic, w językach wysokiego poziomu zajmie od kilkuset bajtów do nawet kilkuset kilobajtów. W asemblerze podobny program zajmie zaledwie kilka bajtów. Jest tak dlatego, ponieważ do każdego wygenerowanego przez siebie programu kompilatory języków wysokiego poziomu dodają sporo kodu niewidocznego dla programisty. Kod ten odpowiedzialny jest między innymi za obsługę błędów, obsługę stosu oraz operacji wejścia-wyjścia. Na korzyść asemblera przemawia również to, że z jego poziomu mamy bardzo dużą swobodę w dostępie do pamięci i portów, a programista ma możliwość świadomego wpływu na kształt przyszłego programu, na przykład w zakresie używanych instrukcji czy rozwiązań programowych. Programy napisane w asemblerze są optymalne pod względem szybkości działania i długości kodu, a więc język ten jest jakby stworzony do programowania wirusów. Jedyną wadą asemblera jest to, że programów w nim napisanych nie można przenosić na komputery o innej architekturze, stąd mogą one egzystować tylko w jednej rodzinie komputerów. Oprócz typowych języków programowania do stworzenia wirusa można wykorzystać języki makr wbudowane w nowoczesne edytory tekstów lub arkusze kalkulacyjne. Zawarte w nich mechanizmy pozwalają na infekcję każdego otwieranego przez program dokumentu lub arkusza. Są one wymarzonym narzędziem do tworzenia wirusów dla początkujących programistów, gdyż wszystkie operacje na fizycznych obiektach są zaimplementowane w makrach i wykonują się bez konieczności ingerencji programisty.
Rodzaje wirusów komputerowych: Pasożytnicze Towarzyszące Plików wsadowych Makrowirusy Robaki Konie Trojańskie Bomby logiczne Króliki Fałszywki Rodzaje programów antywirusowych
Pasożytnicze Większość z istniejących wirusów to tzw. wirusy pasożytnicze. Charakteryzują się one tym, że wykorzystują swoje ofiary do transportu. Modyfikują ich strukturę wewnętrzną i oczywiście nie naprawiają jej. Plik użyty do transportu jest uszkodzony. Jedynym dla niego ratunkiem może być użycie szczepionki lub kopii zapasowych dla zainfekowanych plików. Ze względu na miejsce zajmowane w zainfekowanych plikach wirusy pasożytnicze dzielimy na: - Wirusy lokujące się na końcu pliku (ang. end of file infectors). Dopisują kod wirusa na koniec pliku, a następnie modyfikują początek pliku tak, aby wskazywał na wirusa - Wirusy nadpisujące (ang. overwrite infectors). Lokują się na początku pliku, zwykle nie zapamiętują poprzednich danych w pliku i nieodwracalnie go niszczą - Wirusy nagłówkowe (ang. header infectors). Lokują się w nagłówkach plików EXE przeznaczonych dla systemu DOS. Ich nagłówek jest zawsze standardowo ustawiany przez programy linkujące na wielokrotność jednego sektora (512 bajtów). Wirusy te nie przekraczają rozmiaru jednego sektora - Wirusy lokujące się w pliku w miejscach gdzie jest jakiś pusty obszar. Obszar ten wypełniony jest ciągiem zer i można go nadpisać nie niszcząc pliku. Są to cave infectors - Wirusy lokujące się w dowolnym miejscu pliku. Są bardzo rzadkie i trudne do napisania, to tzw. surface infectors - Wirusy wykorzystujące część ostatniej JAP (Jednostki Alokacji Pliku). Korzystają z faktu, iż plik rzadko zajmuje dokładnie wielokrotność jednej JAP. Są to tzw. slack space infector Powrót
Towarzyszące wirusy te zwykle tworzone są w językach wysokiego poziomu. Wykorzystują hierarchię stosowaną przez system DOS, dotyczącą kolejności uruchamiania programów o tych samych nazwach a innych rozszerzeniach. Jeśli w jednym katalogu jest kilka programów o tej samej nazwie ale o różnych rozszerzeniach (EXE, COM, BAT), to w przypadku podania nazwy programu bez rozszerzenia, w pierwszej kolejności poszukiwany jest plik o rozszerzeniu COM, potem EXE, a na końcu BAT. Wirusy towarzyszące wykorzystują tą właściwość systemu DOS. Jeśli program ma rozszerzenie COM to wirus towarzyszący nie dokona infekcji. Jeśli natomiast program ma rozszerzenie EXE lub BAT, to plik z wirusem będzie miał rozszerzenie COM i może zostać omyłkowo uruchomiony nawet przez samego użytkownika systemu. Próba uruchomienia programu bez podania rozszerzenia w pierwszej kolejności uruchomi plik COM zawierający kod wirusa. Następnie wirus po uaktywnieniu się przekaże sterowanie do programu macierzystego. Sprytnym rozszerzeniem tej techniki jest sposób infekcji wykorzystujący zmienną środowiskową PATH. Zmienna ta definiowana jest w pliku autoexec.bat i określa listę katalogów przeszukiwanych przez system DOS podczas uruchamiania programu. Wirus wykorzystujący tę technikę tworzy plik zawierający kod wirusa w dowolnym katalogu którego ścieżka znajduje się w zmiennej PATH przed katalogiem, w którym znajduje się zarażana ofiara. Przykładowe zastosowanie tej techniki Załóżmy, że plik autoexec.bat zawiera następującą linię: PATH = C:\;C:\DOS;C:\WINDOWS Po podaniu nazwy programu przez użytkownika, w pierwszej kolejności przeszukiwany będzie dysk C, następnie katalog DOS a dopiero na końcu katalog WINDOWS. Przykładowy wirus towarzyszący do katalogu C:\DOS skopiuje plik o nazwie win.bat zawierający kod powodujący jakieś szkody w systemie. Użytkownik próbując uruchomić system WINDOWS zwykle z dowolnego katalogu wyda polecenie WIN i wciśnie ENTER. W pierwszej kolejności zostanie przeszukany katalog główny na dysku C. Następnie katalog DOS. System będzie szukał programu WIN o rozszerzeniach COM, EXE, BAT. W naszym przypadku zostanie odnaleziony program WIN.BAT zawierający kod wirusa. W ten sposób użytkownik sam zainfekuje swój system. Następnie wirus uruchomi system WINDOWS plikiem WIN.COM i użytkownik nawet nie będzie wiedział że dokonał infekcji. powrót
Plików wsadowych Są to tzw. batchviruses, gdyż pliki wsadowe to pliki o rozszerzeniu BAT. Wirusy te wykorzystują do transportu właśnie pliki BAT. Potrafią wbrew pozorom być bardzo niebezpieczne i infekować również pliki COM oraz EXE, a nawet tablice partycji dysku. Po uruchomieniu zainfekowanego pliku wsadowego tworzony jest plik uruchamialny COM lub EXE, który zawiera właściwy kod infekujący pliki BAT. Plik BAT jest następnie kasowany, a plik wykonywalny jest uruchamiany. powrót
Makrowirusy Jest to najnowszy pomysł w dziedzinie wirusów. Makrowirusy nie zarażają programów uruchamialnych lecz pliki zawierające makrodefinicje. Zwykle są to dokumenty Microsoft Word o rozszerzeniu DOC lub pliki arkusza kalkulacyjnego Microsoft Excel o rozszerzeniu XLS. Do mnożenia się wykorzystują funkcje zawarte w językach wbudowanych w powyższe aplikacje. W programie Microsoft Word jest to język WordBasic, a w programie Microsoft Excel jest to Visual Basic for Applications. powrót
Robaki Robaki (ang. worms) to programy, których działanie polega na tworzeniu własnych duplikatów. Nie atakują one żadnych obiektów jak to czynią wirusy, a jedynie same się powielają. Oprócz zajmowania miejsca na dysku niekiedy wywołują również negatywne skutki uboczne. Robaki są najbardziej popularne w sieciach, gdzie mają do dyspozycji różne protokoły transmisji sieciowej dzięki którym mogą się rozprzestrzeniać. powrót
Konia Trojańskie Konie trojańskie (ang. trojan horses) działają w sposób bardzo prosty. Program będący koniem trojańskim, po uruchomieniu wykonuje normalną pracę i użytkownikowi wydaje się że uruchomił zwykły program bądź grę. Jednak dodatkowo wykonywane są operacje szkodliwe, niezauważalne dla użytkownika. Konie trojańskie najłatwiej podrzucić w plikach udających nowe, popularne programy bądź gry. powrót
Bomby logiczne Bomby logiczne (ang. logical bombs) różnią się od konia trojańskiego tym, że ukryte operacje nie są wykonywane od razu po ich uruchomieniu, lecz dopiero w odpowiednim czasie. Może to być zajście określonego zdarzenia w systemie bądź wielokrotne uruchomienie danego programu. Często uruchomienie ukrytych operacji następuje automatycznie po upłynięciu określonej liczby dni od momentu uruchomienia bomby. powrót
Króliki Króliki, określane są również jako bakterie. To programy, które nie niszczą plików. Ich jedynym celem jest samokopiowanie. Typowy program w rodzaju bakterii lub królika może na przykład jednocześnie uruchomić kilka swoich kopii w systemach wieloprogramowych, lub stworzyć dwa nowe pliki z których każdy jest kopią oryginalnego pliku źródłowego bakterii. Oba programy mogą następnie skopiować się podwójnie i w ten sposób mogą rozmnożyć się do bardzo dużej liczby. Bakterie reprodukują się wykładniczo, zabierając całą moc obliczeniową procesora. Ten rodzaj ataku jest jedną z najstarszych form zaprogramowanych zagrożeń. powrót
Fałszywki Fałszywki, zwane haoxy, to inaczej ostrzeżenia przed nieistniejącymi wirusami. Cechą charakterystyczną fałszywego ostrzeżenia jest prośba o przesłanie go do możliwie dużej liczby osób - rzekomo w trosce o ich bezpieczeństwo. Początkujący internauci rozsyłają fałszywe alarmy do kogo się tylko da, co pozwala hoaxom krążyć po Internecie całymi miesiącami w milionach egzemplarzy, doprowadzając do wściekłości osoby, które otrzymują je po raz n-ty. Możemy również otrzymać e-maila z wiadomością, że plik o podanej nazwie jest wirusem i można się go pozbyć jedynie poprzez usunięcie go. W rzeczywistości plik ten nie jest wirusem i może być nawet częścią systemu operacyjnego, a jego usunięcie może spowodować nieprzewidziane skutki. Jeśli trafi do nas takie ostrzeżenie, najlepiej wejść na stronę dowolnego producenta programów antywirusowych i sprawdzić czy nie jest to haox. powrót
Rodzaje programów antywirusowych Skanery Monitory Szczepionki Programy autoweryfikujące Programy zliczające sumy kontrolne Więcej informacji
Skanery Skanery to najstarszy i najprostszy sposób ochrony antywirusowej. Ich działanie polega na wyszukiwaniu określonej sekwencji bajtów w ciągu danych. W większości wirusów można wyróżnić unikalną sekwencję bajtów, tzw. sygnaturę, dzięki której możliwe jest odnalezienie wirusa w pamięci lub w zarażonej ofierze. Skuteczność skanera antywirusowego zależy od tego, jak bardzo charakterystyczna jest dana sekwencja. Najlepiej, jeżeli wirus zawiera w sobie jakiś bardzo specyficzny napis lub ciąg bajtów. Wraz z pojawieniem się wirusów polimorficznych znaczenie skanerów trochę zmalało, jednak nadal jest to najważniejsza metoda walki z wirusami. Wirusy polimorficzne są trudne do wykrycia, gdyż ich różne próbki nie wyglądają tak samo. Często dwie próbki danego wirusa nie mają ze sobą nic wspólnego. Polimorfizm może być osiągnięty poprzez zakodowanie ciała wirusa. W przypadku tych wirusów również używa się skanera, choć dopiero w późniejszej fazie wykrywania. powrót
Monitory Monitor to program antywirusowy zainstalowany jako TSR (ang. Terminate but Stay Resident) lub sterownik SYS, który - poprzez monitorowanie odpowiednich funkcji DOS i BIOS - pozwala na wykrywanie wszystkich wykonywanych za pomocą tych funkcji odwołań do dysków. To, czy monitor będzie działał prawidłowo zależy często od momentu, w którym przejął on kontrolę nad systemem (przed działaniem wirusa, czy już po) oraz od tego, jak głęboko wnika on w system operacyjny. Jak widać autorzy programów antywirusowych muszą korzystać z metod podobnych do tych, które stosują twórcy wirusów. Dużą wadą programów monitorujących jest to, że powodują one często fałszywe alarmy. Niekiedy zdarza się tak, że użytkownik po kolejnym potwierdzeniu jakiejś zwykłej operacji dyskowej staje się mniej uważny i nawet usuwa program antywirusowy z pamięci. powrót
Sczepionki Są to programy skierowane przeciwko konkretnym wirusom. Na podstawie posiadanego czy wykrytego egzemplarza wirusa można, po odpowiedniej analizie jego kodu, zdefiniować tzw. sygnatury, na podstawie których wykrywa się kolejne kopie wirusa w systemie. Dokładna analiza kodu wirusa pozwala niekiedy odnaleźć w nim oryginalne wartości pewnych parametrów, które mogą posłużyć do wyleczenia plików. Większość z istniejących szczepionek to rozbudowane programy, które potrafią wykryć i usunąć kilka tysięcy określonych wirusów. Tylko w przypadkach nowych wirusów szczepionki nie są wcale efektywne. powrót
Programy autoweryfikujące Programy te służą do sprawdzania czy dany program nie został w jakiś sposób zmieniony przez wirusa. Sprawdzanie to jest możliwe poprzez dodanie do wskazanego pliku określonego, krótkiego programu. Dodawany kod dopisuje się do pliku wykorzystując te same mechanizmy co wirusy, i pozwala on na autoweryfikację, czyli automatyczne sprawdzanie czy dany program nie został zmodyfikowany. Niestety, programy tego typu najczęściej nie są odporne na technikę ukrywania kodu wirusa stealth i w systemie zainfekowanym przez wirusa używającego tej techniki okażą się całkowicie nieefektywne. powrót
Programy zliczające sumy kontrolne Działanie tego typu programów polega na obliczaniu odpowiednich sum kontrolnych dla zadanego pliku lub plików. Zliczane sumy kontrolne są przechowywane w osobnych plikach, tworzonych po pierwszym uruchomieniu programu. Jeżeli pliki te istniały już wcześniej, program antywirusowy wykorzystuje dane w nich zawarte aby porównać bieżąco wyliczoną sumę, z sumą poprzednio zachowaną w pliku. Istnieje szereg algorytmów do tworzenia sum kontrolnych dla plików. Ogromną wadą programów tego typu jest to, że pliki przechowujące obliczone sumy kontrolne nie są wcale chronione. Dzięki znajomości wielu algorytmów stosowanych przez programy antywirusowe, niektóre wirusy potrafią zarazić określony plik i obliczyć dla niego nową sumę kontrolną. powrót
Profilaktyka antywirusowa Najlepszą metodą ustrzeżenia się przed wirusami jest sprawdzanie możliwie najnowszym programem antywirusowym wszystkich plików, które docierają do naszego komputera. Niekiedy nawet pliki od zaufanych osób mogą zawierać wirusy, a osoby te mogą o tym po prostu nie wiedzieć. Ważnym elementem działań zapobiegawczych jest regularne tworzenie kopii awaryjnych dla najważniejszych plików, programów bądź dokumentów. Tworzenie kopii zapasowych może wydać się niepotrzebne, jednak niekiedy kopie te mogą okazać się dla nas wybawieniem. Należy dodać, że obecność wirusa w systemie nie musi być zawsze dla nas tragedią. Wiele wirusów, wbrew powszechnej opinii, nie zawiera procedur niszczących. W przypadku zainfekowania komputera nie należy od razu w panice formatować dysku twardego. Co więcej, wykonanie formatowania dysku wcale nie oznacza pozbycia się wirusa z systemu.
Ochrona przed wirusami plików uruchamialnych Pliki uruchamialne można, oprócz sprawdzenia programem antywirusowym, dodatkowo przeanalizować przy użyciu debuggera, czyli aplikacji służącej do śledzenia przebiegu programów krok po kroku. Zaawansowany użytkownik często już po kilku instrukcjach kodu programu rozpozna czy zawiera on wirusa i poprzez przerwanie jego działania uniemożliwi infekcję systemu. Powyższa metoda wydawać się może bardzo amatorska, jednak jest skuteczna, jak zresztą większość tego typu sposobów, gdyż pozwala wykryć nowe wirusy, których nie rozpoznają jeszcze programy antywirusowe.
Ochrona przed bombami logicznymi i końmi trojańskimi Konie trojańskie i bomby logiczne ze względu na sposób działania są trudne do wykrycia, gdyż właściwy, destrukcyjny kod może być umieszczony w dowolnym miejscu programu i trudno go odnaleźć. Niekiedy jest to wręcz niemożliwe. Z pomocą przychodzi tu technika heurystyczna. Polega ona na wykrywaniu potencjalnych agresorów na podstawie charakterystycznych sekwencji kodu. Programy poszukujące koni trojańskich w podejrzanych plikach najczęściej szukają w nich instrukcji wywołań przerwań programowych. Są to przerwania 13h lub 26h, używane do odczytywania i zapisywania sektorów. Ze względu na swe działanie, przerwania te występują bardzo rzadko w typowym oprogramowaniu użytkowym, gdyż normalne programy nie korzystają z bezpośrednich operacji zapisu na sektorach. Potencjalnymi końmi trojańskimi są także najnowsze wersje typowych i często używanych programów użytkowych, programów kompresujących czy nawet antywirusowych, zatem należy się z nimi obchodzić bardzo ostrożnie i przed uruchomieniem ich wypada je przeskanować. Dobrym rozwiązaniem, pozwalającym uchronić się przed większością koni trojańskich i bomb, może być zainstalowanie monitora antywirusowego. Konie trojańskie są zwykle pisane przez początkujących programistów, którzy do przeprowadzania destrukcji używają przerwań programowych, a te mogą być łatwo przechwytywane i kontrolowane przez monitor.
Ochrona przed makrowirusami Bez programu antywirusowego trudno jest wykryć wirusy w plikach dokumentów DOC czy XLS, ale istnieją metody aby zminimalizować szansę zainfekowania systemu. Można w tym celu: - wyłączyć wszystkie makra automatyczne przy pomocy własnoręcznie napisanego makra: SUB MAIN DisableAutoMacros 1 END SUB - aby przy uruchamianiu Worda wyłączyć makro AutoExec należy uruchamiać aplikację z parametrem m: WINWORD.EXE /M - podczas wczytywania plików trzymać wciśnięty klawisz SHIFT, co spowoduje zablokowanie automatycznego makra AutoOpen - od czasu do czasu przeglądać listę makr zawartych w szablonie NORMAL.DOT. Jeżeli zawiera ona jakieś makra automatyczne lub makra o dziwnych, niespotykanych nazwach, możliwe, iż szablon jest zainfekowany. Makra można przeglądać za pomocą opcji wybieranych z menu Worda PLIK/SZABLONY/ORGANIZATOR/MAKRA, bądź też NARZĘDZIA/MAKRO - ze względu na to, iż wirus może nie przejmować żadnego makra automatycznego, lecz tylko podmieniać polecenia menu (najczęściej menu PLIK/ZACHOWAJ, PLIK/ZACHOWAJ JAKO), powyższe środki mogą okazać się całkowicie nieskuteczne.