Wirusy Komputerowe


Wirus komputerowy to najczęściej program napisany w języku niskiego poziomu,jakim jest assembler, można jednak używać języka wysokiego poziomu takich jak Pascal lub C.
Okazuje się, że assembler jest w tym temacie potężnym narzędziem. Jest niezastąpiony, gdyż można pisać bez ograniczeń, jakie narzucają nam kompilatory języka w wysokiego poziomu.
Dlatego w tym opracowaniu skupiamy się na opisie metod pisania wirusa w opartych na assemblerze.


W skrypcie przedstawimy konkretne rozwiązania i przykłady współczesnych technik pisania, dlatego będziemy opisywać współczesną architekturę komputerów oraz najnowsze systemy operacyjne.
Mamy zamiar opisywać wirusy na bazie komputerów kompatybilnych z PC, ponieważ to dzięki ich popularności temat ten rozwija się tak dynamicznie.
Wirusy to programy uważane jako jedyne w swoim rodzaju. Ich kod musi być przemyślany, a co najważniejsze zoptymalizowany.
Jest to bardzo ważne, ponieważ musi zajmować jak najmniej miejsca oraz powinien niepostrzeżenie pracować na komputerze, dlatego zdecydowaliśmy się napisać o optymalizowaniu kodu.
Wiedza na temat pisania wirusów nie musi być wykorzystywana do ich pisania, jest to raczej świetny sposób poznania swojego komputera od wewnątrz.
Umiejętność ta w dużym stopniu przydaje się do pisania programów użytkowych, do odkrywania ukrytych funkcji w nowych systemach operacyjnych, ale także do zmiany kodu w istniejących już programach chyba najczęściej wykorzystywana.


Rodzaje Wirusów

Zdecydowana większość współczesnych wirusów to programy doklejające się do pliku, dzięki czemu mogą być transportowane między komputerami.
Koderzy wirusów jako jeden z głównych celów w swojej pracy stawiają na dopracowanie funkcji infekcji a co za tym idzie rozprzestrzeniania się swojego programu.
Prowadzi do to tego, że powstało wiele ich odmian i typów. Mamy wirusy plików wsadowych, makrowirusy (Word, MS Project, itp), wirusy pasożytnicze.


Metody infekcji

Najważniejszą częścią kodu wirusa jest jego procedura zarażająca, która decyduje o sukcesie programu.
Głównym celem ataków są pliki wykonywalne, czyli dla DOS były to programy z rozszerzeniami COM oraz EXE (z ich podstawową architekturą), dla Win32 są to już w zasadzie tylko pliki EXE oznaczane dodatkowo jako PE (Portable Executable).


Zabezpieczenia wirusów

Jednym z ważniejszych, jak nie najważniejszych, części wirusa jest jego poziom zabezpieczeń przed antywirusami, debuggerami, disassemblerami.
Dochodzą również, do tego, zabezpieczenia przed generacją wyjątku w systemie operacyjnym, który może zostać spowodowany, przykładowo, dostępem do chronionej, przez system, pamięci.
Wirus działający na systemach operacyjnych windows 98, 95, ME wykorzystujący nieudokumentowane funkcje systemu operacyjnego oraz jego dziury w celu przejść na poziom ring0 nie będzie poprawnie działał na systemach operacyjnych windows NT, 2000 oraz XP.
Wynika z tego, iż wirus jest zobligowany do detekcji systemu operacyjnego.


Ochrona antywirusowa

Ochrona przeciw programom antywirusowym jest kluczową sprawą w wirusach, gdyż od tego zależy ich byt w systemie operacyjnym.
Jak się przed nimi chronić?
Sposobem może być wyłączenie procedur sprawdzania plików bezpośrednio w kodzie antywirusa.
Dzięki temu, nawet jeśli antywirus radziłby sobie z wirusem, nie będzie w stanie zareagować w przypadku rozprzestrzeniania się wirusa w systemie.
Metodę tą zaprezentował Z0MB1E.
Działa ona na zasadzie takiej, iż przeszukuje dysk twardy w poszukiwaniu plików wykonywalnych antywirusów, następnie otwiera je i zmienia ich kod (patchuje) na stałe.
Dzięki temu antywirus po ponownym odpaleniu się, z uwagi na wyłączone procedury sprawdzające, nie będzie sprawiał więcej już problemów.
Z0MB1E zaprezentował tą metodę na przykładzie AVP oraz MACAFE wiodących programach antywirusowych.


Ochrona przeciw debuggerom

A tak naprawdę przeciw ludziom używających debuggerów w celu analizy i reversingu kodu wirusa.
Jest to następna z metod ochrony wirusa przeciw antywirusami, gdyż, dopóki nie jest możliwa analiza kodu wirusa, nie zostanie dla niego napisany antywirus.
Ochrona ta, jak wszystkie, jest do przejścia i działa na takiej zasadzie, że w przypadku, gdy wirus wykryje debuggera w pamięci operacyjnej, uruchamia procedury niszczące system operacyjny.
Dzięki temu uniemożliwia analizę jego kodu. Debugger jest zobligowany do przejęcia przerwań 1 i 3.
Przerwania, te są wywoływane przez procesor w sytuacji, w której wystąpi wyjątek debug lub też breakpoint.
W szczególności :
  • przerwanie 1 - wywoływane przez procesor, gdy wystąpi wyjątek typu debug
  • przerwanie 3 - breakpoint (pułapka)


  • Ochrona przeciw disassemblerom

    Po infekcji wirusa w pliku wykonywalnym punkt wejścia do programu zmieniany jest na początek kodu wirusa, by po uruchomieniu programu przez użytkownika jego kod został uruchomiony.
    Z tego też względu kod wirusa jest na widoku i może zostać prosto wykryty.
    Jednakże wykrycie wirusa w systemie nie stanowi o jego deaktywacji.
    Potrzebna jest, ku temu, analiza kodu wirusa i napisanie dla niego antywirusa.
    By uchronić się przed analizą stosuje się ochronę przeciw disassemblerom, programom, które zamieniają kod maszynowy na assemblera, zrozumiałego dla człowieka.