2008 04 Użytkownik kontra wirusy

background image

24

HAKIN9

ATAK

4/2008

T

ekst częściowo nawiązuje do mojego cyklu
związanego z wirusami komputerowymi.
Nie jest to poradnik, jak napisać wirusa,

tylko artykuł je opisujący. Myślę jednak, że jego
lektura może być dobrym początkiem dla osób,
które chciałyby zająć się zawodowo wirusami
(np. uczestnicząc w tworzeniu oprogramowania
antywirusowego).

Koń trojański

– pierwsze spojrzenie

Z punktu widzenia zaatakowanego użytkownika, jest
to program, który – krótko mówiąc – siedzi sobie
w naszym komputerze, analizuje jego działanie i
pozwala na nieautoryzowany dostęp oraz zarządzanie
komputerem. Jednak takie pojęcie nic nam nie mówi
o specyfice tego rodzaju oprogramowania.

Według definicji podanej przez specjalistę od

wirusów, dr Alana Solomona, w pracy zatytułowanej
Wszystko o wirusach (All About Viruses) trojan to
program, który robi więcej, niż oczekuje od niego
użytkownik, a te dodatkowe zadania są z punktu
użytkownika niepotrzebne... Czym różni się zatem
wirus od trojana? Aktualnie różnice między jednym
a drugim zacierają się. Jednak wszystko zaczęło się
od celu: wirus miał być programem, który infekuje
dyski twarde, dyskietki, czy pliki. W swojej strukturze
miał zawierać kod który niszczy dane, pozwala
go uśpić – ale gdy nadejdzie pora zaatakować,
w mniejszym lub większym stopniu poprzez
dewastację systemu uprzykrzyć życie użytkownikowi.
Inaczej wygląda kwestia konia trojańskiego.

RAFAŁ PODSIADŁY

Z ARTYKUŁU

DOWIESZ SIĘ

gdzie szukać backdoorów,

na co zwracać uwagę pisząc

złośliwe oprogramowanie,

jak wykorzystywać malware do

ataku,

jak się przed nim chronić.

CO POWINIENEŚ

WIEDZIEĆ

znać podstawy elektroniki

cyfrowej,

posiadać umiejętność

programowania w asemblerze.

Termin ten pochodzi z Iliady Homera,

opisującej oblężenie Troi przez Greków. Grecy, po
wielu miesiącach bezskutecznych walk, pozornie
wycofali się, pozostawiając pod miastem wielkiego
drewnianego konia. Trojanie w akcie zwycięstwa
wprowadzili konia do wnętrza miasta jako łup
wojenny. W środku konia była ukryta grupa
żołnierzy, którzy w nocy otworzyli od wewnątrz
bramę miasta, umożliwiając w ten sposób
nieautoryzowane wtargnięcie armii greckiej.

Najpopularniejszym sposobem

rozpowszechniania koni trojańskich jest
umieszczanie w Internecie darmowego
oprogramowania, zawierającego ukrytą dodatkową
funkcjonalność. Użytkownicy sieci p2p są
narażeni na podobne działania, gdyż dopiero po
pobraniu pliku i jego przeskanowaniu programem
antywirusowym mogą ocenić zawartość pod
względem bezpieczeństwa. Infekcja następuje

Stopień trudności

Użytkownik

kontra wirusy

90% szkodliwego oprogramowania trafia do naszego komputera,

ponieważ nie przestrzegamy zasad bezpiecznego jego

użytkowania. Chciałbym w tym artykule przedstawić niektóre

techniki ataków, pokazać, w których miejscach ukrywają się

trojany.

Rysunek 1.

Wirusy

background image

25

HAKIN9

KTO KIERUJE KOMPUTERAMI?

4/2008

najczęściej poprzez strony internetowe, które
są spreparowane tak, by instalowały złośliwe
oprogramowanie tuż po wejściu na stronę.
Zwykle mamy do czynienia z formą ataku
socjotechnicznego: któż z nas nie dostał
zaproszenia czy komunikatu – choćby na
GG – w rodzaju: Cześć, widziałam Cię na
fotce – super zdjęcia: www.
(i tu następuje
adres złośliwej strony) lub innej podobnej
treści, zachęcającej do odwiedzenia
określonej strony WWW. Często podany
link odwołuje się do pliku z rozszerzeniem
exe. Użytkownik jest wtedy pytany, czy
uruchomić oprogramowanie i niejednokrotnie
myśli, iż otwiera po prostu przeglądarkę
internetową. A tymczasem uruchamia swoim
komputerze plik exe, zawierający szkodliwe
oprogramowanie.

Charakterystyka

wirusa i backdoora

Programiści do pisania wirusów w większości
przypadków wykorzystują czysty asembler.
Spowodowane jest to głównie specyfiką

kodu generowanego przez ten język, a
zwłaszcza jego zwięzłością. Kod maszynowy
szkieletowego programu, który z punktu
widzenia użytkownika nie robi nic, w językach
wysokiego poziomu zajmie od kilkuset
bajtów do kilku, a nawet kilkuset kilobajtów.
W asemblerze podobny program zajmie
od jednego (instrukcja RET w pliku COM)
do czterech bajtów (wywołanie funkcji

4Ch

przerwania 21h). Spowodowane jest to tym,
iż do każdego wygenerowanego przez siebie
programu kompilatory języków wysokiego
poziomu dodają standardowe prologi i epilogi,
niewidoczne dla piszącego w danym języku
programisty, które są odpowiedzialne m. in.
za obsługę błędów, stosu, operacje wejścia/
wyjścia itp. Można powiedzieć, że długość
programu wynikowego (rozumianego jako
kod maszynowy) jest wprost proporcjonalna
do poziomu języka programowania, w którym
został on napisany. Na korzyść asemblera
przemawia także fakt, iż z jego poziomu mamy
bardzo dużą swobodę w dostępie do pamięci
czy portów, a programista ma możliwość

świadomego wpływu na kształt powstałego
kodu, np. w zakresie używanych instrukcji czy
rozwiązań programowych.

Jak widać, 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.

Kod źródłowy trojana jest zwykle oparty

o język wyższego poziomu, np. C++ czy
Delphi – pozwala to na zbudowanie większej
liczby funkcji, służących do symulowania
nieszkodliwego, a nawet pożytecznego
dla użytkownika-ofiary oprogramowania,
w krótszym czasie. W treści kodu mogą
występować wstawki języka niższego
poziomu, przydatne w celu głębszego ukrycia
złośliwego fragmentu kodu, realizującego np.
infekcję kolejnych plików czy komputerów albo
proces klonowania programu.

Technika stealth

Wirusy komputerowe modyfikują pliki
i sektory, zmieniając ich zawartość (w

Struktury opisujące

Struktura bloku opisu pliku FCB (zwykłego)

• 00 – numer napędu (0=domyślny, 1=A, 2=B,...); jeżeli jest równy 0FFh,

to mamy do czynieia z rozszerzonym blokiem opisu pliku FCB,

• 01-08 – 8 bajtów nazwy pliku,
• 09-0B – 3 bajty rozszerzenia pliku,
• 0C-0D – numer aktualnego bloku,
• 0E-0F – długość logicznego rekordu,
• 10-13 – długość pliku,
• 14-15 – data ostatniej modyfikacji pliku,
• 16-17 – czas ostatniej modyfikacji pliku,
• 18 – ilość SFT (System File Table) dla pliku,
• 19 – atrybuty, znaczenie poszczególnych bitów przedstawiono

poniżej,

• bity 7-6:

• 00 – SHARE.EXE niezaładowany, plik dyskowy,
• 01 – SHARE.EXE niezaładowany, sterownik,
• 10 – SHARE.EXE załadowany, plik zdalny,
• 11 – SHARE.EXE załadowany, plik dyskowy lub sterownik,

• bity 5-0 to mniej znaczące 6 bitów ze słowa atrybutów urządzenia

1A-1F – zawartość zależna od bajtu 19, w zależności od wartości,

bitów 7-6 tego bajtu należy ją interpretować jako:
• wartość 11,

• 1A-1B – numer pierwszej JAP (jednostki alokacji) pliku,
• 1C-1D – określa numer rekordu w dostępie dzielonym,
• 1E – atrybuty pliku,
• 1F – nie używany,

• wartość 10:

• 1A-1B – uchwyt sieciowy,
• 1C-1F – identyfikator sieciowy,

• wartość 01:

• 1A-1D – wskaźnik do nagłówka sterownika

• 1E-1F – nie używane,

• wartość 00:

• 1A – bajt informacyjny,
• bit 7: – atrybut tytko do odczytu w SFT,
• bit 6: – atrybut archive w SFT,
• bity 5-0: – wyższe bity numeru sektora,
• 1B-1C – numer pierwszej JAP pliku,
• 1D-1F – niższe bity sektora zawierającego adres w katalogu,
• 1F – ilość pozycji katalogu w sektorze,

20 – bieżący rekord
21-24 – numer rekordu w dostępie swobodnym; jeżeli rozmiar rekordu

wynosi 64 bajty, bardziej znacząca część jest pomijana

Struktura bloku opisu pliku FCB (rozszerzonego)

• 00 – wartość 0FFh oznacza blok rozszerzony,
• 01-05 – zarezerwowane,
• 06 – atrybuty pliku,
• 07-2B – zwykły blok opisu FCB (patrz poprzednia tabela).

Struktura pola opisu pozycji katalogu

• 00-07 – nazwa pliku,
• 08-0A – rozszerzenie pliku,
• 0B – atrybuty pliku,
• 0C-15 – zarezerwowane,
• 16-17 – czas ostatniej modyfikacji pliku,
• 18-19 – data ostatniej modyfikacji pliku,
• 1A-1B – numer pierwszej JAP,
• 1C-1F – długość pliku.

background image

ATAK

26

HAKIN9 4/2008

KTO KIERUJE KOMPUTERAMI?

27

HAKIN9

4/2008

przypadku plików zwykle powiększają
jeszcze ich długość). Teoretycznie więc,
aby wykryć wirusa, wystarczy odczytać
plik lub sektor i odnaleźć w nim, poprzez
operację skanowania, odpowiednią
sekwencję (sygnaturę) wirusa. I
rzeczywiście, metoda ta stosowana była
z dużym powodzeniem aż do momentu,
gdy pojawił się pierwszy wirus używający
techniki stealth.

Słowo stealth znaczy po angielsku

niewidzialny. Takimi właśnie wydają się
wirusy używające tej ciekawej sztuczki,
która polega na kontroli odpowiednich
funkcji systemu BIOS, obsługujących
pamięć i operacje dyskowe.

W momencie próby uzyskania

dowolnego rodzaju dostępu do
zainfekowanego pliku lub sektora
uruchamiane są mechanizmy
wirusa, które mają na celu oszukanie
użytkownika.

Oszustwo polega na tym, iż fizycznie

zarażony obiekt, po odpowiedniej obróbce
przez wirusa, wygląda, jakby był nie
zainfekowany. Różne odmiany techniki
stealth zostały omówione poniżej.

Podawanie
prawdziwych długości plików

Wirusy wykorzystujące tę technikę oszukują
system poprzez podawanie sfałszowanych,
prawidłowych długości zainfekowanych
plików, wyświetlanych po wykonaniu
polecenia DIR lub też w oknie programu
Menedżera okien – tak, aby zbiory
wyglądały na oryginalne.

Wyżej wymienione programy używają

do przeszukiwania zawartości katalogu
jednej z trzech par funkcji, z których
pierwsza poszukuje pierwszego, a druga
kolejnego wystąpienia w katalogu. Funkcje
te to (

11/12/21

), (

4E/4F/21

), (

714E/714F/

21

). Oszukujący system wirus przejmuje

kontrolę nad tymi funkcjami (niekoniecznie
nad wszystkimi) i monitoruje odpowiednie
pola struktur, na których operuje dana
funkcja. W momencie wykonywania jednej
z funkcji wirus wywołuje pierwotny program
obsługi przerwania, a następnie modyfikuje
elementy odpowiedniej struktury:

pozycji katalogu (funkcje

11/12

),

DTADisk Transfer Area (funkcje

4E/4F

),

FindData (funkcje

714E/714F

).

Modyfikacja polega na odjęciu długości
wirusa od długości pliku opisywanej
w odpowiednim polu struktury oraz
– najczęściej – pewnej modyfikacji czasu
lub daty, odnoszących się do momentu
zainfekowania pliku.

Powyższe operacje wykonywane są

oczywiście tylko w przypadku obecności
wirusa w konkretnym pliku.

Polecenie DIR
wywoływane z poziomu DOS

Polecenie DIR używa do przeglądania
zawartości katalogu pary dwóch
przeznaczonych specjalnie do tego celu
funkcji (

11,12/21

). Obie funkcje korzystają z

najstarszej metody operowania na plikach,
a mianowicie z tzw. bloku opisu pliku FCB
(ang. File Control Block), podawanego
jako parametr wejściowy do funkcji oraz z
pola opisu pozycji katalogu, zwracanego
po jej bezbłędnym wykonaniu w buforze
DTA (ang. Disk Transfer Area), których opis
przedstawiono w kolejnych tabelach.

Podczas odwołań do struktury FCB

należy pamiętać, iż istnieją dwie wersje
opisu bloku FCB: zwykła i rozszerzona,
będąca rozwinięciem bloku zwykłego
(zawiera dodatkowe pola). Jeżeli pierwszy
bajt bloku jest równy 0FFh, mamy do
czynienia z rozszerzonym blokiem opisu
pliku. Adres DTA uzyskuje się za pomocą
funkcji (

2F/21

), która umieszcza go w

rejestrach ES:BX. Po powrocie z funkcji
wskazują one bezpośrednio na pole opisu
pozycji katalogu, w którym już bez przeszkód
można odpowiednio modyfikować pola
długości pliku (1C-1F) oraz czasu i daty
ostatniej modyfikacji (18-19 i 1A-1B).

Nakładki operujące na krótkich

nazwach plików (tzn. 8 znaków nazwy
i 3 znaki rozszerzenia) używają do
przeglądania katalogu funkcji (

4E

,

4F/21

).

Wynik wywołania tych funkcji zwracany
jest w buforze DTA, jednak format opisu
znalezionej pozycji katalogu jest inny niż
podczas wywoływania funkcji (

11,12/

21

). Nie zmienia się natomiast sam

sposób oszukiwania systemu. Po wykryciu
wywołania którejś z funkcji, należy najpierw
uruchomić ją za pomocą pierwotnego
programu obsługi, a następnie odczytać
adres bufora DTA i zmodyfikować
odpowiednie pola struktury.

Pola struktury DTA pokazano w Ramce.

Najważniejsze z nich to: długość pliku

Struktura DTA

• 00 – znaczenie poszczególnych bitów:

• bity 6-0 – numer napędu,
• bit 7 – jeśli jest ustawiony, oznacza plik zdalny,

• 01-0B – szablon poszukiwanych pozycji katalogu,
• 0C – atrybuty poszukiwanej pozycji,
• 0D-0E – numer pozycji w katalogu,
• 0F-10 – numer JAP katalogu nadrzędnego,
• 11-14 – zarezerwowane,
• 15 – atrybut znalezionej pozycji katalogu,
• 16-17 – czas ostatniej modyfikacji znalezionej pozycji katalogu,
• 18-19 – data ostatniej modyfikacji znalezionej pozycji katalogu,
• 1A-1D – długość znalezionej pozycji katalogu,
• 1E-2A – nazwa i rozszerzenie pliku.

Struktura FindData

• 00-03 – atrybuty pliku:

• bity 0-6 – standardowe atrybuty plików DOS,
• bit 7 – plik tymczasowy (temporary),

• 04-0B – czas i data utworzenia pliku,
• 0C-13 – czas i data ostatniego dostępu do pliku,
• 14-1B – czas i data ostatniej modyfikacji pliku,
• 1C-1F – długość pliku (bardziej znaczące 32 bity),
• 20-23 – długość pliku (mniej znaczące 32 bity),
• 24-2B – zarezerwowane,
• 2C-12F – 260-bajtowe pole pełnej nazwy pliku (jako ASCIIZ),
• 130-13D – 14-bajtowe pole krótkiej nazwy pliku (jako ASCIIZ).

background image

ATAK

26

HAKIN9 4/2008

KTO KIERUJE KOMPUTERAMI?

27

HAKIN9

4/2008

(adres 1A-1D) oraz czas i data ostatniej
modyfikacji (adresy 16-17 i 18-19).

Wraz z pojawieniem się systemu

Windows 95 wprowadzono tzw.
długie nazwy plików, którymi
zastąpiono dotychczas używane
(jedenastoznakowe). Mechanizm obsługi
długich nazw plików jest dostępny
wyłącznie wtedy, gdy aktywny jest system
Windows oraz gdy zainstalowany jest tzw.
Menedżer IFS.

Za obsługę długich nazw plików

odpowiedzialna jest w systemie DOS
funkcja (714E/21), gdzie 4E oznacza
numer podfunkcji przekazywanej
w rejestrze AL – za pomocą takich
podfunkcji zdublowano funkcje
(z dokładnością do numerów)
operujące na plikach, a dostępne we
wcześniejszych wersjach systemu
DOS. Za przeszukiwanie zawartości
katalogu są więc odpowiedzialne dwie
podfunkcje (

714E,714F/21

), operujące na

wprowadzonej wraz z systemem Windows
95 strukturze o nazwie FindData.

Opisane funkcje są wykorzystywane

m. in. przez polecenie DIR wywoływane
w oknie Tryb MS-DOS (w systemie
Windows 95).

Aby umożliwić różnym aplikacjom

działającym w 32-bitowym środowisku
graficznym obsługę długich nazw plików,
ale bez konieczności odwoływania się
do funkcji 16-bitowego systemu DOS,
Windows 95 udostępnia analogicznie
działające funkcje poprzez tzw. API (ang.
Application Program Interface), stanowiące
odpowiednik przerwania 21h dla systemu
DOS. Kod większości funkcji systemowych
dostępnych przez API zawarty jest w
pliku KERNEL32.DLL, będącym częścią
jądra systemu. Na przykład funkcji

714E

odpowiada funkcja

FindFirstFileA

, zaś

funkcji

714F

– funkcja

FindNextFileA

. Z

funkcji tych korzysta większość programów
działających w systemie Windows 95, m.
in. Eksplorator, a także różne programy
nakładkowe, np. Windows Commander 95.
Zatem przejęcie kontroli nad tymi funkcjami
pozwala na użycie techniki stealth również
w systemie Windows 95 (ze względów
oczywistych pomijam Windows XP). Adresy
powyższych funkcji można odczytać z pliku
KERNEL32.DLL, a uzyskane w ten sposób
offsety należy zmodyfikować poprzez
dodanie do nich adresu, pod którym
znajduje się KERNEL32.DLL w pamięci.
Niestety, odczytanie tego adresu w sposób
bezpośredni, bez używania funkcji API nie
jest takie łatwe. Pierwszy wirus dla Windows
95 (Bizatch lub inaczej Boza) korzysta
przy dostępie do funkcji systemowych
ze stałego adresu, zapamiętanego w
kodzie wirusa. Ze względu na to, że adres
ten zmienia się w różnych podwersjach
systemu Windows 95, należy przed jego
użyciem sprawdzić, czy rzeczywiście jest
on właściwy. Opis struktury FindData
zamieszczono w osobnej Ramce.

Podawanie oryginalnych
długości i zawartości plików

Aby w pełni oszukiwać system, należy
oprócz prawdziwych długości plików
podawać także ich prawdziwą zawartość.
W tym celu oprócz funkcji przeszukujących
zawartość katalogu trzeba kontrolować
funkcje służące do manipulowania
zawartością plików. Najprościej w
momencie otwierania pliku leczyć go, a w

chwili zamykania – ponownie infekować.

Powyższa metoda ma jednak kilka

niedociągnięć. Główną jej wadą jest
to, iż nie sprawdzi się ona na pewno
na dyskach zabezpieczonych przed
zapisem (klasycznym przykładem jest
tu płyta CD lub zabezpieczona przed
zapisem dyskietka). Należy też pamiętać,
iż użytkownik z pewnością zauważy
częste leczenie i ponowną infekcję plików,
gdyż wszelkie operacje dyskowe będą
przebłagały wolniej.

Powyższych wad nie posiada

natomiast metoda polegająca na tym,
aby w momencie odczytu dowolnego pliku
sprawdzać, czy jest to plik zainfekowany i w
locie leczyć go w pamięci, nie zmieniając
jednak jego obrazu na dysku. W efekcie
program odczytujący plik widzi jego
oryginalną, prawidłową zawartość, zaś
fizycznie plik nie jest zmieniany.

Napisanie procedury stosującej

powyższą metodę nie jest już jednak
zadaniem tak łatwym, jak w poprzednim
przypadku; należy rozważyć kilka
możliwości związanych z położeniem
wskaźnika zapisu/odczytu w stosunku do
początku pliku. Aby uprościć to zadanie,
często stosuje się zabieg polegający na
tym, że przy otwieraniu zainfekowanego
pliku zmniejsza się w wewnętrznych
strukturach DOS (tablica SFT opisana
poniżej) jego długość o rozmiar wirusa.
Wtedy jedynym obszarem pliku, którym
musi zająć się wirus, jest jego początek
(np. w przypadku nagłówka plików EXE

Uzyskiwanie informacji

o pliku na podstawie jego uchwytu

• MOV AX,1220h – weź adres tablicy JFT zawierającej numer SFT,

– opisującej plik podany w BX

• MOV BX,UchwytPliku – BX zawiera uchwyt (numer) pliku,
• INT 2Fh – wywołaj funkcję,
• MOV BL,ES:[DI] – weź numer tablicy SFT,
• MOV AX,1216h – weź adres tablicy SFT na podstawie numeru w BL,

• INT 2Fh – wywołaj funkcję, ES:DI wskazuje na tablicę SFT pliku.

Format podtablicy SFT

• 00-03 – Wskaźnik do następnej podtablicy,
• 04 – N – liczba plików w podtablicy,
• 06-40 – Opis pliku nr 1 w podtablicy (patrz następna tablica),
• 41-7B – Opcjonalnie – opis pliku nr 2 w podtablicy (i ewentualnie dalszych – po 3Bh bajtów.

Rysunek 2.

Spokojnie, to tylko dane

background image

ATAK

28

HAKIN9 4/2008

KTO KIERUJE KOMPUTERAMI?

29

HAKIN9

4/2008

wirus powinien przywracać jego prawdziwą
zawartość), gdyż operacje odczytu nigdy
nie dojdą do dodanego na końcu pliku
wirusa.

Przy programowaniu wirusa

wykorzystującego technikę stealth
często przydatne są dwie wewnętrzne
funkcje DOS (

1216/1220/2F

), służące

do operowania na wewnętrznych
strukturach DOS, tzw. tablicach SFT
(ang. System File Table), zawierających
wszelkie informacje o otwartym pliku. W
systemie może istnieć kilka podtablic
SFT, połączonych w łańcuch. Dostęp
do zawartych w nich informacji o pliku
uzyskuje się na podstawie uchwytu pliku
zwracanego przez funkcje (

3D,6C/21

)

przy jego otwieraniu. Uchwyt ten podaje
się jako parametr funkcji (

1216/1220/2F

).

Po ich użyciu najpierw uzyskujemy adres
tzw. tablicy JFT (ang. Job File Table),
opisującej pliki otwarte w ramach danego
procesu. Na jej podstawie otrzymujemy
adres tablicy SFT opisującej dany plik.

Używa się do tego poniższej sekwencji

instrukcji (Ramka Uzyskiwanie informacji o
pliku na podstawie jego uchwytu
)

Jak widać, infekowanie pliku jest

możliwe nawet przy jego zamykaniu.
Format podtablicy SFT oraz opis
pojedynczego pliku podano w osobnych
Ramkach.

Zamieszczony poniżej wirus stosuje

technikę semi-stealth w odniesieniu do
polecenia DIR i popularnych nakładek oraz
full stealth opartą na tablicach SFT.

Podawanie prawdziwej
zawartości sektorów

Oczywiście technikę stealth można
stosować także w przypadku odczytu
sektorów; należy przejąć obsługę funkcji
(

02/13

) oraz ewentualnie (

0A/13

). W

momencie próby odczytu zarażonego

MBR lub BOOT-sektora wirus podsuwa
programowi odczytującemu ich
oryginalną, nie zainfekowaną zawartość
(podobnie jak w przypadku plików,
sektory zainfekowane muszą być w
jakiś sposób oznaczone, żeby wirus
mógł je rozpoznać). Aby ustrzec się
przed programami umożliwiającymi
odświeżenie tablicy partycji lub BOOT-
sektora, można dodatkowo zabezpieczyć
sektory zawierające wirusa przed
zapisem poprzez przejęcie funkcji (

03/13

)

i ewentualnie (

0B/13

).

Fałszowanie sektorów na etapie
obsługi przerwań sprzętowych

W przypadku sektorów istnieje możliwość
zastosowania techniki tzw. hardware level
stealth
, która jest rozszerzeniem metody
opisanej w poprzednim punkcie. Technika
ta polega na przechwyceniu odwołań
do dysków już na etapie przerwania
sprzętowego IRQ 14 (INT 76h) lub poprzez
przejęcie wywoływanej przez to przerwanie
funkcji (

9100/15h

), co umożliwia

oszukiwanie systemu na najniższym
poziomie programowym. Podczas obsługi

tego przerwania lub funkcji wirus może
odczytać z portów lFx dane o aktualnie
wykonywanej operacji i następnie, w razie
wykrycia odwołania np. do MBR, zmienić
rozkaz tak, aby odczytywać inny sektor,
zawierający kopię oryginalnej zawartości
MBR.

Sprawdzenie aktualnie wykonywanej

operacji polega na odczycie bajtu
z portu 1F7 (rejestr statusowy IDE) i
przetestowaniu bitów jego młodszej części.
Jeżeli któryś z nich jest ustawiony (tzn.
ma wartość l), oznacza to, iż właśnie jest
wykonywana operacja odczytu. Parametry
odczytywanego sektora (cylinder, głowicę,
sektor) można odczytać z portów 1F3, 1F4/
1F5/1F6. Jeżeli odczytane dane są zgodne
z oczekiwanymi, wirus musi wykonać do
końca operację odczytu oraz ustawić dane
w portach kontrolera na inny sektor (np.
na taki, w którym znajduje się oryginalna
zawartość odczytywanego sektora).

W efekcie program antywirusowy,

który używa do odczytu sektorów
bezpośredniego adresu przerwania int
13h, zawartego w BIOS-ie, i tak będzie
oszukiwany przez wirusa. Aby technika

Opis pliku zawarty w tablicy SFT

• 00-01 – Liczba łączników do pliku,
• 02-03 – Tryb,
• 04 – Atrybut pliku,
• 05-06 – Informacja o pliku,
• 07-0A – Wskaźnik do nagłówka programu obsługi lub do bloku DPB (Drive Parameter Block),
• 0B-0C – Pierwsza JAP pliku,
• 0D-0E – Czas ostatniej modyfikacji pliku,
• 0F-11 – Data ostatniej modyfikacji pliku,
• 11-14 – Rozmiar pliku,
• 15-18 – Aktualna pozycja wskaźnika odczytu/zapisu pliku,
• 19-1A – Względny numer JAP,
• 1B-1E – Położenie elementu katalogu opisującego plik,
• 20-2A – Nazwa i rozszerzenie pliku,
• 2B-2E – Wskaźnik do poprzedniego elementu SFT (pole programu SHARE),
• 2F-30 – Numer komputera w sieci (pole programu SHARE),
• 31-32 – Adres właściciela pliku (jego PSP – Program Segment Prefix),
• 33-34 – Położenie w obszarze roboczym listy zablokowanych regionów pliku (pole programu

SHARE),

• 35-36 – Numer JAP,
• 37-3A – Wskaźnik do sterownika IFS (Installable File System) pliku lub 00000000h.

UWAGA!

Niektóre fragmenty szkodliwego kodu zawarte w artykule, uruchomione bezpośrednio na Twoim
komputerze, mogą uszkodzić dane – należy zachować ostrożność podczas eksperymentów z
przedstawionym w tekście malware.

Rysunek 3.

Walczymy z wirusami

ATAK

background image

ATAK

28

HAKIN9 4/2008

KTO KIERUJE KOMPUTERAMI?

29

HAKIN9

4/2008

hardware level stealth zadziałała, sterownik dysku
musi generować przerwanie IRQ14 (co można ustawić
programowo) przy realizacji operacji dostępu do dysku.

Modyfikacja CMOS-u

Nowoczesne BIOS-y zawierają mechanizmy
zabezpieczania niektórych newralgicznych sektorów
przed zapisem (MBR, BOOT-sektory). W momencie
wykrycia próby zapisu do któregoś z tych sektorów
system najczęściej w określony sposób alarmuje
użytkownika i czasem prosi go o potwierdzenie
wykonywanej operacji lub też, aby kompletnie
uniemożliwić tę operację, zawiesza komputer i czeka na
naciśnięcie klawisza RESET.

To, czy BIOS będzie reagował na próby zapisu

do newralgicznych sektorów, ustalane jest zwykle z
poziomu programu SETUP, który dostępny jest po
naciśnięciu pewnego klawisza (najczęściej [Delete]
lub [Ctrl+Alt+Esc]) podczas uruchamiania komputera.
Ustalone w programie SETUP parametry są po jego
opuszczeniu zapisywane do podtrzymywanej baterią
pamięci CMOS.

Korzystając z tego, iż pamięć ta dostępna jest

programowo, można zmodyfikować określone dane
– tak, aby np. na chwilę odblokować zapis do MBR.
Wymaga to jednak znajomości różnych systemów
BIOS, gdyż znajdująca się w nich pamięć CMOS
ma zazwyczaj zawartość odmienną od pamięci w
innych komputerach, a jej zgodność ogranicza się
do ustalonego znaczenia początkowych komórek
tej pamięci (co jest konieczne ze względu na
kompatybilność).

Drugim parametrem możliwym do zmodyfikowania

w CMOS-ie jest wartość określająca, jakie napędy
dyskietek zamontowane są w komputerze. Wirus może
wyzerować tę wartość – tak, iż przy starcie BIOS nie
będzie widział żadnej dyskietki i będzie próbował
załadować system z twardego dysku (z MBR), razem
ze znajdującym się w nim wirusem. Po załadowaniu
wirus przywraca parametry dyskietek w CMOS-ie i
następnie sprawdza, czy napęd FDD zawiera dyskietkę
i ewentualnie wczytuje z niej BOOT-sektor, po czym
oddaje do niego sterowanie.

Zainstalowany w systemie wirus przy odwołaniach

do dyskietek ustawia parametry w CMOS-ie, a po ich
zakończeniu znowu je kasuje, tak więc po wyłączeniu
komputera parametry w CMOS-ie będą najczęściej
skasowane. Takie działanie dość mocno utrudni
załadowanie systemu z czystej dyskietki, zwłaszcza jeśli
wirus potrafi także zainstalować w pamięci CMOS hasło,
uniemożliwiające przeciętnemu użytkownikowi dostanie
się do programu SETUP.

Rafał Podsiadły

Informatyk, administrator, serwisant sprzętu i programów. Autor fascynuje się

programowaniem, szczególnie C++ oraz nowymi technologiami.

Kontakt z autorem: rafalpa@interia.pl


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron