Wirus Komputerowy Wikipedia
Wirus komputerowy jest to samoreplikujący się segment wykonywalnego kodu , umieszczony w innym programie lub w inny sposób sprzężony z nim. Wykonanie kodu programu powoduje uaktywnienie kodu wirusa. Na ogół kod wirusa wykonuje się jako pierwszy przekazując następnie sterowanie do właściwego programu.Podział wirusów:
Ze względu na sposób infekcji
Dyskowe
Pasożytnicze (plikowe)
Towarzyszące
Sprzęgające
Hybrydowe
Ze względu na zachowanie się po uzyskaniu kontroli:
Rezydentne
Nie rezydentne
Hybrydowe
Podział wirusów ze względu na sposób infekcji:
Wirusy sektora ładowania /inicjującego/ (ang. boot sector virus)
Zmieniają zawartość albo głównego sektora ładowania (ang. master boot sector) , albo sektora ładowania DOS’a , zależnie od wirusa i dysku, 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 , żeby 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. Ogólnie infekcja się rozpowszechnia , gdy zainfekowany program jest wykonywany.
Towarzyszące
Wykorzystują tę właściwość DOS’a , ż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 swój 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. Wirus tego typu nie powoduje żadnych zmian w zawartości “zainfekowanego” 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.
Oryginalny numer pierwszego JAP’a zainfekowanego pliku jest zachowywany w nieużywanej części zapisu katalogu. Wirusów tego typu powstało stosunkowo niewiele . Przykładowy wirus to: DIR-2
Hybrydowe
Wirusy hybrydowe łączą w sobie jedne z powyższych metod. Najbardziej popularne jest łączenie wirusa sektora ładowania z wirusem pasożytniczym plikowym. Daje to największe możliwości replikacji a jednocześnie utrudnia leczenie zainfekowanego systemu.
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 (ang. 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.
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.
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) .
Jest kilka metod aby utrudnić taką analizę:
Pierwszą metodą jest usuwanie z kodu wirusa punktów zatrzymania. Aby w praktyce to zadziałało wirus musi być już aktywny w pamięci. Z częstotliwością np. 18 razy na sekundę skanuje swój kod i sprawdza czy nie uległ modyfikacji , jeżeli tak to odtwarza zmienione bajty na podstawie sum kontrolnych. Taki wirus potrafi też np. restartować komputer jeżeli wykryje uruchomiony program śledzący.
Inna metoda polega na użyciu instrukcji “zabójczych” dla programu śledzącego np. wywołanie przerwań które on wykorzystuje , operacje na stosie.
Kolejna metoda to wykorzystanie mechanizmu procesora polegającego na przyjmowaniu nowych rozkazów , podczas gdy rozkazy wcześniej pobrane są wykonywane. Zasada jest prosta: instrukcja poprzedzająca modyfikuje instrukcję następną. Gdyby wykonać ten kod z pełną prędkością procesora czyli bez śledzenia to modyfikacja ta nie doszła by do skutku. Powodem tego jest to , że modyfikacja odbyłaby się w pamięci operacyjnej komputera a nie w buforze procesora. Natomiast pod nadzorem programu śledzącego bufor procesora jest odświeżany po każdej instrukcji śledzonego programu więc taka modyfikacja zostanie “dostrzeżona” przez procesor. W ten sposób wirus może obronić się przed wścibskimi programistami lub amatorami dłubania w cudzych programach.
Skąd się biorą wirusy komputerowe ?
Wirus jak każdy program zostaje stworzony przez programistę. W żadnym wypadku wirus komputerowy nie może powstać samoistnie.
Aby walczyć z wirusem należy poznać jego budowę i sposób działania. Niektórzy mogą zarzucić mi , że podając takie informacje wręcz zachęcam do pisania wirusów , ale najlepszym sposobem obrony jest atak.
Posiadając wiedzę jak działa wirus , w jaki sposób się mnoży oraz przeprowadza destrukcję możemy w łatwy sposób napisać szczepionkę na złapanego wirusa. Większość wirusów pisana jest w języku asemblera ponieważ w najmniejszej ilości kodu można zawrzeć największą ilość “inteligencji” , taki program jest najbardziej optymalny i najgłębiej wnika w strukturę systemu operacyjnego. Oczywiście wirusy powstają także w innych “wysokich” językach programowania takich jak C czy Turbo Pascal. Wirusy tego typu są na tyle prymitywne i mało agresywne , że można je pominąć. Można powiedzieć , że wśród wirusów powstał pewien sposób standaryzacji infekcji i zachowań. Jeżeli złapiemy jakiegoś nieznanego wirusa to po krótkiej analizie jego kodu możemy wywnioskować że:
Jest szyfrowany / nie szyfrowany.
Infekuje doklejając się na końcu / początku / wewnątrz nosiciela / nadpisując nosiciela / sprzęga się z nosicielem modyfikując FAT (File Allocation Table) Tablicę Rozmieszczenia Plików.
Na początku pliku COM umieszcza skok do swojego kodu (np. JMP ADRES_WIRUSA).
Infekuje inne pliki / dyski (boot sector).
Oznacza pliki zainfekowane sygnaturą: wewnątrz zainfekowanego pliku / oznacza czas lub datę / oznacza w inny sposób.
Pomijając inne bardziej szczegółowe działania wirusa oraz to czy wirus jest odporny na analizę , możemy utworzyć szczepionkę w następujący sposób:
Pobieramy 16 lub więcej bajtów kodu wirusa w celu identyfikacji go w zarażonych zbiorach / dyskach (o ile nie jest szyfrowany zmienną procedurą),
Ustalamy długość infekującą wirusa (wirusy plikowe),
Ustalamy co wirus zmienia infekując plik / dysk i gdzie przechowuje te informacje,
Jak zabezpieczyć się przed wirusem ?
Profilaktyka to najlepszy sposób obrony:
Najprostszym sposobem obrony jest profilaktyka czyli nie kopiowanie i nie przenoszenie oprogramowania z nieznanych źródeł. Najwięcej wirusów jest przenoszone poprzez nielegalne kopiowanie oprogramowania. Jeżeli już korzystamy z oprogramowania kopiowanego z innych komputerów powinniśmy zainstalować rezydentny program monitorujący. Program ten analizuje każdą dyskietkę wkładaną do napędu , każdy uruchamiany lub kopiowany program , nadzoruje newralgiczne punkty systemu jak tablicę wektorów przerwań , czy próby nielegalnego przydzielenia pamięci. Najbardziej rozbudowane programy potrafią określić jakim wirusem został zarażony plik lub dysk. Posługują się przy tym plikami sum kontrolnych lub bazą sygnatur (wzorców). Potrafią także nadzorować pliki przesyłane poprzez sieć np. INTERNET. Zaletą tych programów jest to , że potrafią one wykryć i obezwładnić wirusa zanim on przejmie kontrolę nad systemem , wadą natomiast to , że są one bardzo pamięciożerne i w znacznym stopniu spowalniają odwołania do napędów dyskowych. Jeżeli nie posiadamy takiego programu to w walce z wirusami może pomóc nierezydentny skaner antywirusowy który uruchomiony co pewien czas skanuje powierzchnię twardego dysku lub dyskietek. Programy tego typu są bardzo szybkie i oprócz wykrycia wirusa potrafią jego obezwładnić lub usunąć. Jednak programy te stają się przydatne jedynie wtedy gdy system lub program został już zainfekowany wirusem. Programy tego typu nie potrafią zapobiec infekcji a jedynie z nią walczą. Jeżeli posiadamy oba typy programów antywirusowych najlepiej jest skorzystać z nich obu.
Aby wyjść naprzeciw autorom wirusów i ułatwić życie zwykłym użytkownikom komputerów specjaliści do walki z “mikrobami” przystąpili do tworzenia pakietów antywirusowych.
Obecnie na rynku jest mnóstwo programów tego typu np. AVP , AVSCAN , TBVAW , WEB.
Najbardziej jednak popularne są programy: VSAFE rezydentny monitor dołączany do każdej wersji MS-DOS , oraz antywirusowy skaner MKS_VIR.
Program VSAFE jest rezydentnym monitorem potrafiącym nadzorować sektory startowe dysków i dyskietek , programy rezydentne , oraz potrafi zabezpieczyć twardy dysk przed formatowaniem niskopoziomowym oraz pliki wykonywalne przed modyfikacjami. VSAFE analizuje uruchamiane programy i potrafi wykryć wirusa posługując się sygnaturami lub sumami kontrolnymi. Ponieważ większość zaawansowanych wirusów potrafi go obezwładnić lub całkowicie usunąć z pamięci , używanie tego programu jest wątpliwe.
MKS_VIR jest programem polskiej produkcji , całkowicie przystosowanym do wykrywania naszych lokalnych wirusów.
MKS_VIR posiada zdolność wykrywania wirusów stosujących biblioteki MtE i TPE oraz wirusów utworzonych za pomocą generatorów takich jak np. IVP , G2. Wirusy polimorficzne MKS_VIR wykrywa przy pomocy kontrolowanego uruchomienia i interpretacji kodu programu. Autor Marek Sell wbudował w swój program mechanizmy umożliwiające wykrywanie i usuwanie wirusów dyskowych oraz wirusów makr Word’a i Excel’a. W obecnej wersji BETA MKS_VIR dla Windows 95 posługuje się również sumami kontrolnymi w celu wykrycia nieznanych w trakcie tworzenia programu wirusów.
Co robić gdy nie mamy programu antywirusowego ?
Nadać wszystkim plikom na dysku atrybut Read Only (ang. tylko do odczytu).Większość prymitywnych wirusów nie potrafi go ominąć.
Nazwy katalogów powinny posiadać rozszerzenie. Wirusy nie rezydentne skanujące dysk w poszukiwaniu ofiary najczęściej nie widzą takiego katalogu.
Podejrzany program uruchamiać w katalogu w którym brak innych programów które mogłyby zostać zainfekowane. Proste wirusy nie rezydentne nie potrafią przeszukiwać dysku i infekują w katalogu aktualnym.
Jeżeli BIOS komputera na to pozwala włączyć opcję VIRUS PROTECTION lub podobną która chroni sektor startowy dysków twardych przed zapisem.
Co gdy “złapaliśmy” zwykłego wirusa lub typu Stealth? Jak go zobaczyć ?
Uruchamiamy system z czystej dyskietki. Będzie wtedy widać które zbiory zwiększyły swoją długość , datę modyfikacji lub atrybuty.
Jeżeli nie posiadamy dyskietki awaryjnej możliwe jest skopiowanie zarażonych plików na dyskietkę i zabezpieczenie jej przed zapisem. O ile powiększenie długości zainfekowanych zbiorów wirus będzie w stanie ukryć to zawartość zainfekowanego zbioru będzie widoczna z doklejonym kodem wirusa. Stanie się tak dlatego ponieważ wirus nie będzie w stanie odkazić zainfekowanego zbioru aby ukryć fakt infekcji.
Jeżeli wirus nie jest typu stealth a jest wirusem towarzyszącym to każdy “zainfekowany” zbiór EXE powinien posiadać swojego odpowiednika typu COM.
Jeżeli wirus stealth jest “głupi” to możemy odinfekować pliki wykonywalne kopiując je wraz ze zmianą nazwy rozszerzenia np. z EXE na EXX , COM na COO.
Co robić gdy “złapaliśmy” wirusa i po “odczuciu” wiemy że został napisany w C lub w Pascalu?
Wirusy napisane w C lub Pascalu są wirusami o “dużych gabarytach” , a stosowanie przez nie metody ukrywania swojego kodu jest rzadkością. Wirusy takie są z reguły nieryzdentne bardzo powolne i awaryjne w działaniu. Jedyną ich zaletą jest to , że trudna jest ich analiza. Tak więc wirusa tego typu jest łatwo wykryć , ale co z tego , że wiemy gdzie jest , jeżeli nie wiemy jak go ubić.
Wirusy napisane w językach wyższego poziomu najczęściej stosują taki schemat infekcji:
przenoszą początek programu nosiciela na jego koniec
wciskają się na początek programu nosiciela
Uruchomienie zainfekowanego programu odbywa się w następujący sposób:
uruchomienie wirusa i infekcja innych programów
odkażenie nosiciela
uruchomienie nosiciela
zarażenie nosiciela
pozdrawiam Wszystkich
Archiwum X
Brak pokrewnych postów

