Wirus komputerowy jest niewielkim programem posiadającym zdolność do samoczynnego powielania się oraz do przenoszenia na inne komputery poza kontrolą i bez wiedzy użytkownika danego komputera. Twórcą terminu: wirus komputerowy, funkcjonującego od roku 1986, jest Fred Cohen, który otrzymał za badania nad tym tematem doktorat z dziedziny inżynierii elektrycznej.
Wirusy komputerowe zazwyczaj tworzone są przez anonimowych programistów, zazwyczaj w złych zamiarach. Stephen Hawking, który jest laureatem nagrody Nobla z dziedziny fizyki, opisał wirusy komputerowe jako pierwsze formy życia stworzone przez człowieka. Pierwszy przypadek, kiedy ukarano kogoś za napisanie wirusa komputerowego miał miejsce w roku 1995. Winowajca został skazany na 18 miesięcy pozbawienia wolności. Szkody, jakie wyrządzają wirusy komputerowe różnią się znacznie, zależnie od ich rodzaju, zaczynając od wyświetlenia na ekranie monitora niegroźnych komunikatów, a kończąc na zniszczeniu lub uszkodzeniu danych oraz unieruchomieniu komputera. Wirus komputerowy może być przenoszony przez płyty kompaktowe, dyskietki oraz za pośrednictwem sieci lokalnej lub internetu.
Terminem: wirus często niesłusznie określa się wszelkie destrukcyjne dla prawidłowego działania komputera programu, takie jak konie trojańskie. Wirus jest programem maskującym się poprzez podczepianie do innych używanych na co dzień przez użytkownika plików. Głównie są to pliki z rozszerzeniami: exe, xls, doc, bat, com, a także poczta elektroniczna oraz strony internetowe. Wirusy potrafią kopiować się w dziesiątki miejsc, wyrządzając przy tym duże szkody. Wirusy komputerowe nigdy nie powstają samoistnie. Każdy robak jest tworzony przez osobę, która miała na celu stworzenie programu mogącego się swobodnie powielać na kolejno infekowanych komputerach. Istnieje wiele niegroźnych wirusów, których celem jest na przykład wyświetlenie zabawnego komunikatu na ekranie naszego monitora. Wirus napisany przez zdolnego programistę może wyrządzić nieodwracalne szkody w systemie, na przykład wykraść dane oraz zniszczyć je. Najgroźniejsze wirusy są pisane w asemblerze, dzięki czemu rozmiar ich kodu jest minimalny oraz realizuje w sposób dokładny zamierzenia autora. Kod maszynowy danego programu, z punktu widzenia zwykłego użytkownika nic nie robi, zajmuje jednak kilkanaście bajtów, podczas, gdy realizujący te same funkcje kod wygenerowany przez kompilatory języków wysokiego poziomu, takich jak C lub Pascal, może zajmować kilkakrotnie więcej miejsca na dysku oraz pamięci operacyjnej komputera. Sytuacja ta jest powodowana tym, że kompilator każdego języka wysokiego poziomu dodaje do każdego z wygenerowanych przez siebie programów standardowe prologi oraz epilogi, które nie są widoczne dla programisty piszącego w danym języku, a odpowiedzialne są na przykład za obsługę błędów. Asembler daje dobremu programiście bardzo dużą swobodę w dostępie do portów oraz pamięci, dzięki czemu ma on świadomy wpływ na kształt całości tworzonego przez niego programu. Programy, które są tworzone w Asemblerze cechują się optymalnością szybkości działania oraz długości kodu. Do ograniczeń asemblera należy zaliczyć fakt, że programów które zostały napisane pod jeden procesor, nie można przenosić na inne platformy, stąd wirusy napisane na komputery klasy PC nie będą działały na telefonach komórkowych.
Nowe wirusy komputerowe powstają przez cały czas. Stosując dobry program antywirusowy możemy uchronić się w 99% przed zagrożeniem ze strony wirusów. W celu zapewnienia jak największego bezpieczeństwa należy często aktualizować program antywirusowy oraz pozwolić mu na monitorowanie wszystkiego, co dzieje się w systemie operacyjnym naszego komputera. Należy skanować wszystko, co przychodzi z zewnątrz, zaczynając od poczty elektronicznej, a kończąc na płytach dołączanych do magazynów komputerowych. Przydatne informacje o najnowszych wirusach komputerowych można znaleźć na stronie www.antivirus.com/finfo. Samo infekowanie polega zazwyczaj na odpowiednim modyfikowaniu struktury danego sektora lub pliku. Rozmiary typowych wirusów zawierają się w przedziale od kilku kilobajtów do kilkuset kilobajtów. Sam rozmiar wirusa, jak już zostało napisane, zależy w dużej mierze od języka programowania użytego przez programistę. Efekt działania wirusów komputerowych zależy od intencji ich twórców oraz od ich umiejętności. Celem większości spotykanych wirusów jest replikacja własnego kodu, a nieprzyjemne dla użytkownika efekty często pojawiają się na skutek niedoróbek w kodzie wirusa. Wirus komputerowy zazwyczaj uaktywniamy poprzez nasze nieświadome działanie, na skutek którego otwieramy zarażony program, otwieramy podejrzany załącznik poczty elektronicznej lub też próbujemy załadować system operacyjny z zarażonej płyty kompaktowej. Tymi sposobami użytkownik samodzielnie dokonuje infekcji swojego komputera wirusem.
Podział wirusów ze względu na sposób w jaki infekują komputer:
- Wirusy rezydentne - instalują się one jako rezydentne usługowe programy TSR, czyli z angielskiego Terminate and Stay Rewident. Przejmują one pewną ilość przerwać i infekują komputer o ile spełnione zostały pewne warunki, takie jak uruchomienie programu.
- Wirusy nierezydentne - ich aktywacja następuje jedynie w momencie uruchomienia zainfekowanego programu użytkowego. Ich działanie polega na wykonaniu zaprogramowanych operacji, a następnie zwalniają zajmowaną pamięć operacyjną.
- Szybkie infektory - potrafią one przejąć wszystkie funkcje DOS, jakie system ten wykorzystuje do obsługi swoich plików. Zarażają w bardzo krótkim czasie możliwie jak największą ilość danych. Powoduje to, że po tym, jak wirus szybko się rozprzestrzeni się w systemie, nastąpi jego uśpienie - nie jest on w stanie znaleźć kolejnych plików, które mógłby infekować. Najczęściej wirusy tego typu rozpoczynają od niszczenia w pamięci kodu części zamazywanej interpretatora poleceń, dzięki czemu w trakcie następnego wywołania jakiegokolwiek polecenia z poziomu systemu DOS, plik który zawiera interpretator poleceń (taki jak COMMAND.COM) jest ponownie uruchamiany oraz natychmiast infekowany. Wysoka aktywność działania infektora może być szybko zauważona przez użytkownika, nawet takiego, który nie zna zbyt dobrze swojego systemu. Wirusy tego typu nie korzystają z technik typu stealth, ponieważ użytkownik z reguły wykonuje bardzo dużo operacji dyskowych.
- Wolne infektory - wirusy tego typu są znacznie bardziej wyrafinowane od szybkich infektorów z tej racji, że ich główne zadanie polega nie na rozprzestrzenieniu się, lecz na chęci jak najdłuższego przetrwania. Wirusy tego typu z reguły używają kilkustopniowych, wolnych i zmiennych procedur szyfrujących, a także techniki typu stealth. Do najczęściej infekowanych obiektów należą te, które często tworzą lub modyfikują użytkownicy komputera. Wirusy tego typu są z reguły niezwykle trudne do wykrywania i usuwania nawet dla bardzo zaawansowanych programów antywirusowych.
- Wirusy typu stealth - ich działanie polega na kontrolowaniu podstawowych funkcji systemów operacyjnych, które obsługują operacje dyskowe oraz pamięć operacyjną. Oszustwo ma miejsce wtedy, gdy zarażony fizycznie obiekt po właściwej obróbce przez wirusa wygląda tak, jakby był niezainfekowany. Istnieje wiele metod z wykorzystaniem jakich działają wirusy typu stealth.
Podział wirusów ze względu na sposób działania:
- Wirusy pasożytnicze - jest to najszerzej rozpowszechniony i najczęściej spotykany rodzaj wirusów na świecie. Wirusy te wykorzystują do transportu swoje ofiary poprzez modyfikację ich struktury wewnętrznej. Bardzo często pliki, które używane są do transportu przez pasożytnicze wirusy są na zniszczone na trwałe. Jedyny ratunek dla tych plików to użycie specjalnej szczepionki lub odzyskanie ich wersji pierwotnych z kopii zapasowych, ponieważ nie zawsze program antywirusowy jest w stanie naprawić dany plik. Wyjątek stanowią tutaj wirusy mające na celu infekcję tablicy alokacji plików albo BOOT sektora naszego dysku twardego, w tych wypadkach pliki używane są wyłącznie do transportu. Wirus pasożytniczy po tym jak zainfekuje tablicę alokacji plików lub BOOT sektor leczy pliki, które znajdują się na dysku twardym, a które użył do transportu. W ten sposób zacierane są ślady obecności wirusa w systemie, infekcji ulegają pliki, które znajdują się we wkładanych do komputera dyskietkach. Ze względu na rodzaj zajmowanego miejsca w zainfekowanych plikach, wirusy pasożytnicze można podzielić na kilka rodzajów:
- Wirusy nadpisujące, z angielskiego overwrite infectors. Lokują się one na początku pliku, prowadząc często do nieodwracalnych zmian, z racji tego, że reguły nie potrafią zapamiętać zawartości pliku zanim zostanie on zainfekowany.
- Wirusy, które lokują się na końcu pliku, z angielskiego end of file infectors. Ta odmiana wirusa pasożytniczego jest zdecydowanie najbardziej rozpowszechniona. Wirus tego typu modyfikuje strukturę początku pliku w ten sposób, by wskazywała na wirusa, następnie są one dopisywane do końca pliku.
- Wirusy nagłówkowe, z angielskiego header infectors. Wirusy tego typu lokują się w nagłówkach plików exe oraz wykorzystują fakt, że nagłówki te są standardowo ustawiane przez programy linkujące na wartości odpowiadające wielokrotnościom jednego sektora. Wirusy tego typu nie przekraczają wielkości jednego sektora, a infekcja zachodzi poprzez przejęcie odpowiednich funkcji BIOS, które są wykorzystywane do zapisu oraz odczytu sektorów.
- Wirusy, które lokują się w miejscu będącym wolnym obszarem powierzchni dyskowej, czyli takim wypełnionym ciągiem zer. Lokacje te mogą być nadpisywane bez obawy o zniszczenie istniejących danych, wirusy takie z angielskiego nazywa się cave infectors.
- Wirusy, które lokują się w dowolnie wybranym miejscu pliku, z angielskiego surface infectors. Wirusy tego typu występują dosyć rzadko, co powodowane jest tym, iż od programisty próbującego stworzyć takiego wirusa wymagana jest znaczna wiedza.
- Wirusy, które wykorzystują pewien fragment ostatniej jednostki alokacji pliku JAP, z angielskiego snack space infectors. Opisywane wirusy wykorzystują fakt, że plik bardzo rzadko zajmuje dokładnie wielokrotność pojedynczej jednostki alokacji pliku.
- Wirusy towarzyszące, z angielskiego kompanion infectors. Jest to rodzaj wirusów pisanych najczęściej w językach wysokiego poziomu, takich jak C lub Pascal. Ich działanie polega na atakowaniu plików z wykorzystaniem hierarchii systemu operacyjnego DOS w czasie uruchamiania programów. Jeżeli uruchomimy jakiś program nie podając rozszerzenia, system operacyjny najpierw wyszuka określony plik z rozszerzeniem COM, następnie EXE i na końcu BAT. Przykładowo jeśli w danym katalogu występują następujące pliki: program.com, program.exe oraz program.bat, to pierwszy zawsze zostanie uruchomiony plik o rozszerzeniu COM, następnie plik o rozszerzeniu EXE i na końcu plik o rozszerzeniu BAT. Analizując nasz przypadek, ilekroć w linii komend wpiszemy nazwę program, zostanie uruchomiony plik program.com. Chcąc uruchomić program.exe, musimy wpisać jego pełną nazwę razem z rozszerzeniem albo usunąć plik program.com z naszego katalogu. Uruchomienie program.bat polega na usunięciu dwóch wymienionych wcześniej plików z katalogu i wpisaniu w linii komend słowa program, albo na wpisaniu pełnej nazwy pliku razem z rozszerzeniem. Jak można zauważyć wirus towarzyszący posiada kilka możliwości zainfekowania uruchamianego programu. Jeżeli istnieje plik z rozszerzeniem COM infekcja nie może się odbyć. Jeżeli istnieje plik z rozszerzeniem EXE, wirus może utworzyć plik (zawierający wirusa) o tej samej nazwie, tylko z rozszerzeniem COM. Jeżeli istnieje plik z rozszerzeniem BAT, wirus może utworzyć plik (zawierający wirusa) o tej samej nazwie, tylko z rozszerzeniem COM lub EXE. Kolejna próba uruchomienia zarażonego programu będzie równoznaczna z uruchomieniem wirusa, który pod dany program się podszywa. Zazwyczaj po wykonaniu swoich operacji, wirus uruchomi pożądany przez nas program, dzięki czemu bardzo trudno zauważyć działalność tego typu insekta. Interesującym udoskonaleniem wyżej opisanej techniki jest metoda infekcji stosowana przez wirusy towarzyszące, która polega na wykorzystaniu zmiennej środowiskowej PATH. W zmiennej tej znajduje się lista katalogów, które będą przeszukiwane przez DOS w momencie uruchamiania programu. Wirus, który korzysta z tej techniki, tworzy nowy plik zawierający swój kod w innym katalogu, który znajduje się w zmiennej środowiskowej PATH przed ścieżką do katalogu zawierającego niezarażony program, który chcemy uruchomić. Stosując tą metodę, wymieniony sposób infekcji może być stosowany dla dowolnych plików wykonywalnych, z racji, że kolejność znajdywania danego programu uzależniona jest od pozycji, jaką zajmuje w zmiennej PATH katalog zawierający program. Na przykład jeśli zmienną środowiskową określimy jako: "PATH = C:, C:Programy, C:Windows" i w katalogu C:Programy umieścimy plik win.bat, to w momencie kolejnego uruchomienia systemu operacyjnego Windows, poprzez uruchomienie programu o następującej ścieżce dostępu: C:WINDOWSWIN.COM, nie podając ścieżki i wpisując samo win, o ile znajdujemy się w katalogu innym niż C:Windows, system dokona uruchomienia na początku pliku C:Programywin.bat, a dopiero później uruchomiony zostanie program właściwy C:Windowswin.com.
- Wirusy plików wsadowych, z angielskiego batch viruses. Wirusy tego typu wykorzystują do transportu pliki o rozszerzeniu bat, jest to więc dosyć stary i rzadko obecnie spotykany typ wirusa. Pomimo bardzo ubogiego zestawu możliwych operacji do wykonania, jakie są narzucane na twórcę wirusa, potrafi on napisać taki kod, który będzie infekował zarówno pliki bat, jak i exe oraz com, a nawet tablicę alokacji plików. Jeżeli uruchomimy zainfekowany plik wsadowy, przy pomocy polecenia echo, które zawiera parametry przekierowań do pliku, zostanie utworzony plik o rozszerzeniu exe lub com, zawierający odpowiedni kod, który infekuje pliki o rozszerzeniu bat. W momencie gdy dany plik zostanie utworzony i odpowiednio wykorzystany, jest on natychmiast kasowany, dzięki czemu zacierane są ślady obecności wirusa.
- Makrowirusy, z angielskiego macroviruses. Są to wirusy używane od stosunkowo niedawna, które bardzo szybko zyskały na popularności. Makrowirusy nie zarażają uruchamialnych programów o rozszerzeniu exe, lecz pliki, które zawierają definicje makr. Spośród najczęściej zarażanych te wirusy plików, można wyróżnić pliki o rozszerzeniach doc (program Microsoft Word), oraz pliki xls (program Microsoft Excel). Do rozprzestrzeniania się makrowirusy korzystają z funkcji zawartych w definicjach makr, które są wbudowane w wiele aplikacji biurowych.
- Generatory wirusów, czyli programu umożliwiające utworzenie wirusa bez znajomości systemu operacyjnego na jakim ma on działać, ani mechanizmów, które wykorzystują wirusy. Niestety narzędzia tego typu są dostępne w Internecie w zasadzie dla każdego. Jeżeli skorzystamy w asemblerze z gotowych modułów, będziemy mogli stworzyć wirusa o konkretnych parametrach, które mogą być zazwyczaj wybrane przy pomocy zwykłego menu. Wirusy tego typu może zatem stworzyć początkujący użytkownik komputera. W opcjach generatora można ustawić zakres infekowanych obiektów oraz efekty specjalne, które będą towarzyszyć działalności wirusa komputerowego. Poza kodem wynikowym wirusa, który jest już gotowy do uruchomienia, generator tworzy także odpowiednio opisane źródła w języku asembler, dzięki czemu zainteresowani nauką pisania wirusów mogą się sami uczyć.
- Robaki - są to programy, które na celu mają tworzenie własnych duplikatów, nie atakując z pozoru żadnych konkretnych obiektów naszego komputera. Działalność robaków zazwyczaj nie wywołuje destrukcyjnego dla naszego komputera działania, potrafią one jednak w bardzo szybki sposób zdobyć wiele zasobów sprzętowych naszego komputera. Na robaki można bardzo często natknąć się w sieciach zarówno lokalnych jak i w sieci Internet, mają one bowiem do dyspozycji wiele protokołów transmisji sieciowej, które pozwalają na dowolne przemieszczanie się pakietów.
- Króliki - są to programy, które wielokrotnie kopiują i uruchamiają własny kod źródłowy, dzięki czemu szybko zagarniają większość zasobów sprzętowych naszego komputera. W przypadku zainfekowania królikiem możemy zauważyć znaczne spowolnienie pracy komputera: zmniejszenie dostępnej pamięci operacyjnej, zmniejszenie wolnego miejsca na dysku oraz zagarnięcie znacznych zasobów procesora. Działania te w skrajnym przypadku mogą prowadzić do konieczności reinstalacji systemu operacyjnego.
- Konie trojańskie są często utożsamiane z wirusami, ponieważ niekiedy wykazują podobne do nich działanie destrukcyjne. Jeżeli uruchomimy konia trojańskiego na naszym komputerze, może być wykonywana normalna praca, która w sposób bezpośredni wynika z przeznaczenia naszego programu - nosiciela. Dodatkowo jednak, w tle wykonuje się niezauważalny dla użytkownika proces, który otwiera zdalny port na naszym komputerze. Osoba, która posiada wersję kliencką danego trojana może się bezkarnie podpiąć do naszego komputera i wykonywać operacje przewidziane dla użytego trojana, bez jakiejkolwiek kontroli użytkownika. Podłączona do naszego komputera osoba może zatem pobrać nasze poufne dane, może jednak ograniczyć się do zrobienia nam psikusa w postaci wysuwania tacki napędu CD.
- Bomby logiczne - są to programy bardzo posobne do koni trojańskich, z tym że koń trojański działa od razu, bomba logiczna z kolei swoje działanie destrukcyjne rozpoczyna po spełnieniu odpowiednich warunków, na przykład osiągnięciu danej daty przez zegar systemowy. Biorąc pod uwagę, że kod destrukcyjny można ukryć w dowolnym miejscu programu zawierającego bombę logiczną, należy bardzo ostrożnie podchodzić do aplikacji niewiadomego pochodzenia i zawsze dla pewności sprawdzać je oprogramowaniem antywirusowym. Niekiedy mianem bomby logicznej nazywany jest pewien fragment kodu danego wirusa, który zostaje wywołany jedynie po spełnieniu określonego warunku.
Metody wytwarzania wirusów:
- Wirusy wielopostaciowe. Z dawien dawna twórcy wirusów komputerowych marzyliby ich działa nie były w łatwy sposób wykrywane przez programy antywirusowe. We pierwszych skanerach antywirusowych ograniczano się do zaimplementowania łańcucha bajtów charakterystycznych dla danego wirusa, a następnie sprawdzano określone pliki pod kątem wystąpienia w nich niebezpiecznego kodu. Jeżeli skaner antywirusowy wykrył podobieństwo, załączał się alarm sygnalizujący wykrycie niebezpiecznego wirusa. Wyzwaniem zatem było wymyślenie takiego wirusa komputerowego, z którego nie dałoby się pobrać żadnej próbki. Aby możliwa była taka sytuacja, po każdym swoim powieleniu dany wirus powinien wyglądać nieco inaczej. Na początku wprowadzano odpowiednie procedury, które szyfrowały kod wirusa korzystając ze zmiennego lub stałego klucza. Procedury te zawsze wyglądały tak samo i nie dało się z nich wyznaczyć żadnych bajtów charakterystycznych. Twórcy wirusów nie poprzestali na laurach i poszli o krok dalej. W celu zamydlenia oczu skanerom antywirusowym, do kodu programu zostały wprowadzone odpowiednie procedury, które deszyfrowały dodatkowe, nieistotne dla całego algorytmu instrukcje, które były zmieniane w przypadku każdej kolejnej infekcji. W odpowiedzi na nowe wirusy, twórcy skanerów antywirusowych dodali do swoich próbek tak zwane znaki zastępcze, czyli ignorowane bajty, których wartość mogła być dowolna. Aby utrudnić życie skanerom antywirusowym, autorzy wirusów stworzyli algorytmy, które są w stanie generować od kilkudziesięciu do miliarda różnorodnych postaci samej procedury deszyfrującej. W przypadku procedur generujących niewielką ilość wariantów, możliwe stało się ich wykrywanie poprzez zapisanie w bazie skanera każdego możliwego do wygenerowania ciągu bajtów. Jednak dzisiejsze możliwości autorów wirusów komputerowych, powodują, że ta metoda nie daje pożądanych efektów. Nowoczesne wirusy wykorzystują metody przestawiania oraz zastępowania instrukcji procedur deszyfrujących oraz mieszania instrukcji właściwych z instrukcjami nieistotnymi dla działania całego programu, na przykład instrukcji NOP, która zajmuje jedynie kilka cykli procesora i nie przynosi ze sobą żadnego działania. Stosowane jest również rozsiewanie procedury deszyfrującej w kodzie pliku nosiciela wirusa. Szyfrowanie polimorficzne wykorzystywane jest również dla kodów wirusa, które rezyduje w pamięci operacyjnej komputera, przez co jego identyfikacja oraz obezwładnienie jest znacznie utrudnione.
- Wirusy utajnione, czyli zaprojektowane w sposób, który w dużym stopniu gwarantuje niewykrywalność. Zazwyczaj kod wirusa widać w kodzie zarażonego programu. Można się o tym przekonać dzięki obejrzeniu danego programu edytorem binarnym. Utajnianie polega na podsunięciu programom, które czytają zarażony plik, jego obrazu sprzed infekcji. Wirus, który wykorzystuje technikę stealth dokonuje przechwycenia odpowiedniego przerwania i odkaża plik nosiciela w wypadku żądania jego odczytu lub też podsuwa kod oryginalny danego pliku, który został skopiowany w inne miejsce, jak ma to miejsce w wypadku wirusów dyskowych. Jeżeli mamy do czynienia z wirusami plikowymi, to plik, który został odkażony po zamknięciu jest następnie infekowany po raz drugi. Wirusy dyskowe potrafią ukryć swój kod znajdujący się na dysku także w inny sposób. Dokonują one formatowania dodatkowej ścieżki na której następnie umieszczają swój kod. System operacyjny nie ma dostępu do tak spreparowanej ścieżki, więc wirus nie jest zagrożony wykryciem. Wirusy typu Stealth potrafią przekłamać żądanie odczytu informacji o rozmiarze danego pliku, poprzez odjęcie od rozmiaru oryginalnego rozmiaru odpowiadającego wielkości wirusa. Przez użytkownika komputera nie zostaną więc zauważone przypadki zwiększenia się rozmiarów danych na skutek wystąpienia infekcji. W celu ukrycia faktu rezydowania wirusa w pamięci komputera, programom zostają podsuwane adresy oryginalne wektorów przerwań. Zajmowane przez wirusy bloki pamięci są ukrywane przed innymi programami, dzięki oznaczeniu ich jako nieprzydzielonych.
- Wirusy opancerzone - dobre wirusy powinny się nie tylko ukrywać, ale także powinny być odporne na jego analizę. W celu zapobiegnięcia dezasemblacji kodu wirusa, autorzy dodają do jego kodu pojedyncze bajty dobrane w ten sposób, by w momencie próby przetłumaczenia kodu wirusa, wystąpiły przekłamania. Procesor, który wykonuje rozkaz kodu wirusa wie w jednoznaczny sposób, jakie pobrał rozkazy oraz jakie rozkazy ma wykonać, jednak program tłumaczący kod wirusa w mniejszym lub większym stopniu potrafi interpretować instrukcje, które obstawiono dodatkowymi bajtami. Kolejna metoda śledzenia analizy kodu danego wirusa to jego śledzenie przy pomocy programu śledzącego, zwanego popularnie debuggerem. W trybie tym kod danego wirusa wykonuje się krok po kroku. Aby zrealizować ten sposób śledzenia debugger musi wstawić do śledzonego kodu tak zwane punkty zatrzymania, które popularnie nazywa się breakpointami. Istnieje kilka metod, które potrafią utrudnić tego typu analizę. Do pierwszej metody należy usuwanie punktów zatrzymania z kodu wirusa. Aby mogło to zadziałać w praktyce, wirus powinien być już aktywny w pamięci naszego komputera. Wirus opancerzony sprawdza swój kod wiele razy na sekundę, pod kątem wystąpienia jakichś modyfikacji. Jeżeli takie wystąpiły, to następuje odtworzenie zmienionych bitów, dzięki wykorzystaniu nadmiarowych sum kontrolnych znajdujących się w kodzie wirusa. Wirusy tego typu są w stanie, w wypadku wykrycia programu śledzącego, zrestartować nasz komputer. Inna metoda działania tego typu wirusa polega na używaniu zabójczych dla programu śledzącego instrukcji, które powodują wywołanie wykorzystywanych przez program przerwań oraz wykonanie odpowiednich operacji na stosie. Kolejna metoda polega na wykorzystaniu mechanizmu procesora, który polega na przyjmowaniu coraz to nowych rozkazów w czasie, gdy wcześniej pobrane rozkazy są wykonywane. Zasada jest bardzo prosta: instrukcja poprzedzająca odpowiednio modyfikuje następna instrukcję. Jeżeli dany kod zostałby wykonany z pełną prędkością procesora, bez śledzenia, to tego typu modyfikacja nie doszłaby do skutku. Powodem takiego stanu rzeczy jest to, iż modyfikacja miałaby miejsce w pamięci operacyjnej naszego komputera, nie zaś w buforze procesora. Pod nadzorem programu śledzącego odświeża się bufor procesora po każdej następnej instrukcji programu, który jest śledzony. Modyfikacja tego typu może być zatem wykryta przez procesor. Wirus może się w ten sposób samodzielnie obronić przed wścibskimi programistami.
Podział wirusów:
- Wirusy plikowe - infekują one wszelkie pliki uruchamialne, a w ostatnich czasach nawet pliki o rozszerzeniach doc i xls. Są one dołączane do kodu aktualnie infekowanego programu. Mogą się one dołączać na końcu pliku, na jego początku oraz pośrodku. Można również wyróżnić wirusy plikowe, które dokonują zamazania części kodu danego programu, co powoduje jego nieodwracalne uszkodzenie. Najczęściej wirusy plikowe uruchamiane są przed programem właściwym, istnieją jednak również takie, które są aktywowane po zakończeniu pracy programu pierwotnego. Do przykładów takich wirusów można zaliczyć wirusy GEO oraz BeTaViRiLaTiOn, które napisane zostały w Turbo Pascalu. Wirusy plikowe są najczęściej spotykanym rodzajem wirusa, co jest zasługą prostoty ich napisania oraz potencjału do szybkiego rozprzestrzeniania się.
- Wirusy BOOT sektora - są to wirusy zmieniające zawartość sektora rozruchowego dysku twardego. Zamiast kodu, który powinien się tam znajdować, opisywane wirusy zapisują w tym miejscu części swojego kodu, natomiast kopia prawidłowego sektora rozruchowego jest zapisywana gdzie indziej. Wirusy tego typu uruchamiają się już w czasie rozruchu systemu operacyjnego z zarażonego dysku. W momencie odczytania zawartości sektora rozruchowego, zostaje wczytana reszta kodu, który się tam nie zmieścił oraz poprawny sektor rozruchowy. Jeżeli nasz komputer jest zainfekowany właśnie tego typu wirusem, powinniśmy uruchomić system operacyjny znajdujący się na dyskietce oraz uruchomić na niej program antywirusowy lub program dokonujący naprawy sektora rozruchowego.
- Wirusy towarzyszące - są to wirusy zarażający pliki z rozszerzeniem exe, com lub bat. Algorytm działania tego typu wirusa polega na znalezieniu katalogu w którym znajduje się jakiś plik exe możliwy do zainfekowania. W tym samym katalogu tworzony jest plik o takiej samej sytuacji, lecz z rozszerzeniem com, w którym zostaje zapisany kod danego wirusa. Większość osób nie zwraca uwagi na to czy uruchamiany przez nich plik posiada rozszerzenie com, czy exe. Jeżeli wpiszemy polecenie na przykład nc (które uruchamia program Norton Commander) to system operacyjny wyszuka w katalogach znajdujących się w zmiennej PATH najpierw plik nc.com, a w przypadku gdy go nie znajdzie wyszukiwany jest plik nc.exe. Wirusy tego typu w obecnych czasach są już praktycznie niespotykane, a ich rozprzestrzenianie zachodzi bardzo wolno.
- Wirusy hybrydowe - to wirusy łączące w sobie różnorodne typy wirusów. Wirusy tego typu są bardzo często spotykane i niezwykle szybko się rozprzestrzeniają. Najczęściej spotykanym wirusem hybrydowym jest wirus powstały z połączenia wirusa plikowego i wirusa BOOT sektora.
- Wirusy polimorficzne - są wirusami bardzo trudnymi do wykrycia, przez co są również najbardziej niebezpieczne dla naszego komputera. W celu utrudnienia życia programistom piszącym oprogramowanie antywirusowa, twórcy wirusów zaczęli umiejętnie szyfrować swoje dokonania. Metod szyfrowania jest wiele, a najczęściej wykorzystywane jest szyfrowanie z wykorzystaniem operacji XOR. Każda z nowo utworzonych kopii danego wirusa jest więc inna od swoich poprzedniczek, jednak procedura szyfrująca pozostaje zawsze ta sama i właśnie dzięki niej skaner antywirusowy jest w stanie rozpoznać wirusa. Rozwiązaniem tego problemu jest szyfrowanie samej procedury szyfrującej. Jeżeli zaczniemy analizować zespół kodów instrukcji to możemy dojść do wniosku, że wiele z nich może wykonać takie samo zadanie. Przykładowo istnieją instrukcje, które potrafią wyzerować zawartość rejestru AX, istnieje jednak jeszcze bardzo wiele innego rodzaju instrukcji, które mogą wykonywać to samo zadanie, posiadając jednak inny kod instrukcji, przykładowo instrukcję INC można zastąpić instrukcją ADD z odpowiednio dobranym argumentem. Właśnie na tej zasadzie działają wirusy polimorficzne. Procedura użyta do szyfrowania wirusa jest za każdym razem inna, pomimo, że wykonuje ona identyczne zadanie. Tym sposobem może ona mieć bardzo wiele różnych postaci, co może spowodować niewykrycie wirusa przez skaner antywirusowy. Opisywany typ wirusa jest w stanie zmienić swoją sygnaturę albo procedurę operacyjną z każdą próbą infekcji, dzięki czemu jest on znacznie trudniejszy do wykrycia przez skanery antywirusowe. Przykładowo wirus Bugbear może się rozprzestrzeniać dzięki załącznikom dołączanym do wiadomości e-mail i poprzez sieci lokalne, pozostaje on jednak bardzo trudny do wykrycia, właśnie dzięki swojemu polimorficznemu charakterowi. Wirusy innego typu, które polimorficzne nie są, mogą pozostać nie wykrytymi przez oprogramowanie antywirusowe, które nie było od dawna aktualizowane, dzięki istnieniu kilku odmian wirusa. W momencie, gdy użytkownik otworzy zainfekowany załącznik, wirus zostaje skopiowany do katalogu systemowego Windows, a później dokonywana jest odpowiednia modyfikacja rejestru w ten sposób, że kopia wirusa zostanie automatycznie uruchomiona wraz ze startem systemu operacyjnego. W następnej kolejności wirusy pobierają z klienta poczty elektronicznej zawartość książki adresowej oraz rozsyłają swoje kopie pod wszystkie adresy znalezione w liście kontaktów. W tego typu wiadomościach najczęściej nie są podawane prawdziwe informacje o komputerze z którego nastąpiło nadanie wiadomości, co potrafi znaczni utrudnić wykrycie źródła zainfekowanej wiadomości. Tematy wiadomości oraz tytuły załączonych plików mogą wyglądać w różny sposób i bardzo często mają charakter przypadkowy. Powinniśmy zachować szczególną ostrożność w wypadku wiadomości od nieznanych osób, których tematy wyglądają bardzo zachęcająco. Przykłady podejrzanych tematów wyglądają następująco: Your Gift, 150$ free bonus, Happy birthday. Należy z rozwagą podchodzić do wiadomości, które wyglądają na zwyczajne wiadomości typu spam, ponieważ niektóre wirusy mogą symulować takie działanie. Bardzo często załączniki posiadają podwójne rozszerzenia i tak naprawdę tym ostatnim jest exe, scr lub gif. Niektóre wirusy mają możliwość instalacji koni trojańskich oraz programów rejestrujących klawisze, które użytkownik naciska, a następnie wysyłających zebrane informacje do twórcy wirusa. Tym sposobem zdolny autor wirusa może przechwycić nazwę oraz hasło do naszego konta w banku.