1. Podstawowe wiadomości o wirusach Rodzaje wirusów



Pobieranie 215,13 Kb.
Strona4/5
Data24.02.2019
Rozmiar215,13 Kb.
1   2   3   4   5

Sposoby dostępu do dysku

Najczęściej stosowany (bo najprostszy) mechanizm dostępu do plików lub sektorów polega na używaniu funkcji i przerwań programowych DOS (INT 21h, INT 25h, INT 26h). Najczęściej korzystają z niego wirusy plikowe i czasem wirusy BOOT-sektorów. Ze względu na możliwość istnienia zainstalowanego w systemie monitora antywirusowego sposób ten można bezpiecznie wykorzystać tylko po wyłączeniu aktywnego monitora lub też po znalezieniu oryginalnych procedur wejścia do odpowiednich przerwań.

Na dużo niższym poziomie operują wirusy infekujące Główny Rekord Ładujący (MBR), BOOT-sektory i JAP. Korzystają one z przerwania programowego INT 13h, operującego bezpośrednio na fizycznych sektorach dysków (w przypadku dyskietek można użyć przerwania 40h). Tak jak w przypadku przerwań i funkcji DOS, funkcje BIOS mogą być dość łatwo monitorowane przez program antywirusowy, a w nowoczesnych BIOS-ach - nawet przez program obsługi przerwania. W takim wypadku pozostaje jedyna bezpieczna metoda ingerencji w zawartość sektorów, polegająca na użyciu bezpośrednich odwołań do portów.

Pisanie procedur do obsługi plików, które na najniższym poziomie odwoływałyby się do portów nie ma sensu, natomiast łatwo jest napisać takie procedury tylko dla pojedynczych, wybranych sektorów, czyli np. MBR, BOOT-sektora, co w przypadku dysków (zgodnych z IDE lub EIDE) oraz dyskietek jest względnie proste. W przypadku dysków SCSI jest to o wiele trudniejsze, chociażby ze względu na brak dokładnej dokumentacji technicznej tych urządzeń, stąd też trzeba obsługiwać je przez funkcje systemowe (można pokusić się o poszukanie czystych wejść do procedur ich obsługi).

Operując na portach należy pamiętać, iż wraz z pojawieniem się dysków o pojemnościach o wiele większych od tych, które mogą być standardowo obsługiwane przez funkcje BIOS przerwania 13h, zaszła konieczność jakiegoś obejścia dotychczasowych ograniczeń związanych z pojemnością dysków widzianych przez BIOS. Niektóre twarde dyski posiadają więc w swych pierwszych fizycznych sektorach (począwszy od MBR) coś w rodzaju nakładki (ang. Dynamic Drive Overlay), która po załadowaniu do pamięci przez program zawarty w pierwszym fizycznym sektorze przejmuje i poszerza odpowiednie funkcje obsługi dysku. Aby możliwe było dalsze wczytywanie systemu, po wczytaniu nakładki odwołania do sektorów są przekierowy-wane (do numeru cylindra dodawane jest l). W efekcie prawdziwy sektor MBR wcale nie jest umiejscowiony w sektorze o adresie: cylinder 0, strona 0, sektor l, lecz pod adresem: cylinder l, strona 0, sektor l. Nieuwzględnienie tego faktu może przyczynić się do przypadkowego zniszczenia danych na dysku podczas zapisywania przy użyciu portów, a co za tym idzie, do szybszego wykrycia wirusa.

Najskuteczniejszym sposobem uchronienia się przed odczytem i zapisem bezpośrednio przez porty jest odpowiednia kontrola dostępu do urządzeń we/wy na poziomie trybu chronionego przy pomocy tablic map portu. Jednak i to zabezpieczenie nie wydaje się bardzo pewne, gdyż najczęściej istnieje jakaś możliwość ingerencji w jądro systemu nawet dla trybu chronionego (jeżeli nie w pamięci, to w plikach), a co za tym idzie, można zmienić odpowiednią część systemu, odpowiedzialną w tym wypadku za operacje na dyskach.

9.2 Sztuczki antydebuggerowe, antydeasemblerowe, antyemulacyjne i antyheurystyczne

Aby utrudnić życie programistom piszącym szczepionki oraz zabezpieczyć swój kod przed niepowołanymi osobami, twórcy wirusów (i nie tylko) często używają tzw. sztuczek antydebuggerowych oraz antydeasemblerowych. Najbardziej znane sztuczki antydebuggerowe polegają na chwilowym (na czas wykonywania kodu wirusa) blokowaniu przerwań sprzętowych, co dla osoby próbującej analizować kod programu objawia się tym, iż np. klawiatura przestaje działać po wykonaniu instrukcji.

Przeszkadzanie włamywaczom polegać może także na blokowaniu lub chwilowym

przejmowaniu przerwań newralgicznych dla działania programu uruchomieniowego, a więc 0lh

(przerwanie trybu krokowego) i 03h (pułapka programowa). Ich adresy najczęściej ustawia się na

FFFFh:0000h, czyli na procedurę resetującą programowo komputer. Często w takich

wypadkach przejmowane są także przerwania 21h, 16h, 10h, służące debuggerom do

obsługi plików, klawiatury, ekranu itd.


Inna metoda przeszkadzania potencjalnym włamywaczom polega na tym, iż wirus próbuje wykrywać fakt pracowania pod kontrolą debuggera i po ewentualnym wykryciu - wykonywać jakąś destrukcyjną operację lub też próbować uciec włamywaczowi tak, aby ten niczego nie zauważył.

Klasycznymi przykładami sztuczek antydebuggerowych są poniższe sekwencje:

; Blokada przerwań sprzętowych

MOV AL,0FFh ; ustaw wszystkie bity w AL na 1

OUT 21h, AL ; zamaskuj przerwania sprzętowe od 0 do 7

OUT 0Alh, AL ; zamaskuj przerwania sprzętowe od 8 do F Wykrywanie,

; czy kod wykonuje się pod kontrola debuggera

PUSH SS ; załaduj na stos wartość SS

POP SS ; po tej instrukcji, następny rozkaz nie jest

; kontrolowany,

PUSHF ; więc można zachować na stosie prawdziwe flagi

POP AX ; AX=flagi zdjęte ze stosu

TEST AH,1 ; czy bit TF=1 ?

JNZ DEBUG_ON ; jeśli tak, to używany jest debugger

........ ; debugger nie jest używany

DEBUG_ON: ; debugger jest używany


Wraz z pojawieniem się debuggerów działających w trybie chronionym znaczenie sztuczek anydebuggerowych zmalało. Oczywiście, ciągle można je stosować, jednak będą one raczej nieskuteczne. Na przykład, jeżeli program próbuje manipulować adresami procedur obsługi przerwań INT l czy INT 3, debugger działający w trybie rzeczywistym oczywiście im ulegnie, natomiast w przypadku debuggera dla trybu chronionego w zasadzie nic się nie stanie, gdyż używa on innej, własnej tablicy przerwań.

Aby uniemożliwić lub utrudnić dezasemblację wirusa, stosuje się szyfrowanie oraz odpowiednie kombinacje instrukcji, które zakłócają typowy listing programu tak, iż staje się on chaotyczny, nieczytelny i na pozór bezsensowny (tak jak we wspomnianym we wstępie wirusie JUMP).

Przykładem jest krótki programik wyświetlający po uruchomieniu komunikat Cześć!, a napisany tak, iż po jego dezasemblacji (np. SOURCER-em) uzyskuje się chaotyczny listing (co ciekawe, podczas kilkakrotnych prób otrzymywane źródło nie było zawsze takie same). Program w katalogu Anty_dea.

Ze względu na fakt, iż większość obecnie istniejących programów antywirusowych stosuje tryb krokowy lub też emulację procesora do wykrywania wirusów polimorficznych, twórcy wirusów starają się w jakiś sposób utrudnić wykrywanie wirusów tymi metodami.

Specjalnie w tym celu do procedury dekodera, tworzonej przez polimorficzny generator, dodaje się wywołania różnych, występujących typowo w zwykłym oprogramowaniu, funkcji przerwań 10h, 21h, 16h i innych, a także umieszcza się w niej wywołania procedur. Ciekawym zabiegiem antyemulacyjnym są też próby nadania dekoderowi wyglądu programu napisanego w językach wysokiego poziomu (posiadają one charakterystyczne sekwencje kodu na początku programu), bądź też nadanie plikowi cech np. wewnętrznie spakowanego programu (np. dodanie sygnatur PKLITE, LZEXE lub innych).

Po wykryciu wywołania pewnej ilości funkcji obsługiwanych przez przerwania programowe, próbujący wgryźć się w kod wirusa program antywirusowy zwykle przerywa dalsze poszukiwania i pozostawia plik bez zmian.

Ze względu na stosowanie przez programy antywirusowe heurystycznego wykrywania wirusów, nowsze wirusy potrafią już poradzić sobie z tego typu metodami, poprzez odpowiednią manipulację kodem, np. tradycyjną sekwencję:

CMP AX,4B00h

można zakodować w wirusie jako:

ADD AX,1234h

CMP AX,4B00h+1234h

lub


XCHG AX,CX

CMP AX,4B00h XCHG AX,CX


lub na inną, gdyż możliwości jest tu w zasadzie nieskończenie wiele. Gdy podobną operację wykona się dla większości zawartych w wirusie instrukcji, program antywirusowy będzie miał spore kłopoty z rozpoznaniem intruza.

9.3 Retrostruktury

Większość z nowoczesnych wirusów w aktywny sposób stara się walczyć z zainstalowanym oprogramowaniem antywirusowym. Wirusy kasują więc pliki z sumami kontrolnymi, modyfikują znalezione w pamięci programy antywirusowe, tak aby nie były one aktywne, lub nawet deinstalują je całkowicie z pamięci w sposób niewidoczny dla użytkownika.

Co ciekawe, większość monitorów antywirusowych, zawierających wyrafinowane metody wykrywania niebezpiecznych odwołań do plików czy sektorów, nie przykłada żadnej wagi do ochrony własnego

kodu. W kolejnych wersjach programy te mają schematyczną budowę, a korzystające z tego wirusy potrafią wykryć odpowiednią sekwencję w pamięci i zmienić ją tak, iż program, mimo że jest zainstalowany, nie działa tak, jak powinien.

Najbardziej jaskrawym tego przykładem jest chyba modyfikacja parametrów wejściowych programu antywirusowego, który po uruchomieniu wyświetla swój status, zawierający użyty przez wirusa parametr. Dodawane przez wirusy parametry najczęściej wyłączają bezpośredni dostęp do dysków, przeszukiwanie pamięci itp. Aby uniemożliwić użytkownikowi zauważenie wprowadzonych w parametrach zmian, wirusy zmieniają odpowiedni łańcuch bezpośrednio w pamięci ekranu, tak iż odbiorca (użytkownik programu) patrząc na ekran jest przekonany o poprawnym działaniu programu, mimo że ten ma zablokowane funkcje, które prawdopodobnie pomogłyby wykryć wirusa.

We wspomnianych we wstępie zinach, dotyczących programowania wirusów, znaleźć można artykuły, które bardzo dokładnie opisują sposoby łamania najbardziej znanych na świecie programów antywirusowych (w artykułach tych najczęściej mówi się o serii zaawansowanych programów antywirusowych ThunderByte autorstwa Fransa Veldmana).

10.Przyszłość wirusów

10.1 Wirusy infekujące wewnątrzplikowo

Większość obecnie istniejących wirusów infekując pliki używa standardowego schematu, polegającego na doczepianiu się na końcu zarażanego pliku i odpowiedniej modyfikacji jego nagłówka. Zarażanie wewnątrzplikowe polega na próbie odnalezienia i wykorzystania w zarażanym pliku miejsca, które można byłoby wykorzystać na umieszczenie przyszłego wirusa. Możliwe byłoby nawet rozrzucenie kodu wirusa po pliku ofiary, tak iż poszczególne części kodu byłyby od siebie oddzielone. Ponadto, gdyby wirus tego typu był polimorficzny, znalezienie jego kodu wewnątrz ofiary byłoby podwójnie utrudnione. Mimo że już wielokrotnie podejmowano próby napisania takiego wirusa, nieliczne istniejące egzemplarze są jeszcze bardzo prymitywne.



10.2 Wirusy zmienne genetycznie

W kilku artykułach dostępnych w sieci Internet ich autorzy rozważają możliwość stworzenia wirusa, który w kolejnych zarażanych ofiarach wyglądałby inaczej, jednak kolejne generacje nie byłyby tworzone przy użyciu polimorficznego generatora zmiennych procedur szyfrujących, a zasada tworzenia nowych mutacji własnego kodu polegałaby na manipulowaniu instrukcjami kodu maszynowego tak, aby zachowana została funkcjonalność kodu, lecz kod ten sukcesywnie by się zmieniał (podobnie jak kod odporny na heurystykę, jednak tutaj zabieg ten byłby wykonywany dla każdej instrukcji). Można by powiedzieć, iż wirus taki posiadałby swoistą tożsamość, objawiającą się tym, iż wiedziałby, co ma robić i na bazie jakiegoś generatora tworzyłby swą nową kopię, przemieszczając odpowiednie fragmenty kodu, symulując jedną instrukcję za pomocą kilku itp. Na razie jednak zadanie to przekracza chyba umiejętności nawet najlepszych twórców wirusów, choć niewykluczone, iż dzieło takie wkrótce się pojawi.

11.Rodzaje programów antywirusowych

11.1 Skanery

Najstarszym rodzajem programów antywirusowych są skanery. Ich działanie polega na wyszukiwaniu zadanej sekwencji bajtów w ciągu danych.

W większości wirusów daje się znaleźć unikalną sekwencję bajtów (tzw. sygnaturę), dzięki której możliwe jest odnalezienie wirusa w pamięci lub w zarażonej ofierze.

Skuteczność skanera zależy od tego, jak bardzo charakterystyczna jest dana sekwencja. Najlepiej, jeżeli wirus zawiera w sobie jakiś niekonwencjonalny napis lub specyficzny ciąg bajtów (np. jakąś procedurę demonstracyjną).

Wraz z pojawieniem się wirusów polimorficznych znaczenie skanerów trochę zmalało, jednak nadal jest to najważniejsza metoda walki z wirusami. Nawet w przypadku wirusów polimorficznych używa się skanera, choć dopiero w późniejszej fazie wykrywania (np. po krokowym lub emulowanym przejściu początku programu), co świadczy o uniwersalności tej metody.

11.2 Monitory

Monitor to program antywirusowy zainstalowany jako TSR lub sterownik SYS, który poprzez monitorowanie odpowiednich funkcji DOS i BIOS pozwala na wykrywanie wszystkich wykonywanych za pomocą tych funkcji odwołań do dysków. Większość tego typu programów posiada także mechanizmy pozwalające na sprawdzanie, czy wykonywany proces nie ingeruje w jakieś systemowe struktury danych, np. bloki MCB lub tablicę wektorów przerwań. To, czy monitor będzie działał prawidłowo, zależy często od momentu, w którym przejął on kontrolę nad systemem (przed czy po wirusie) oraz od tego, jak głęboko wnika on w system operacyjny (kontrola funkcji wykorzystywanych przez wirusy jest przeprowadzana na początku łańcucha obsługi przerwań lub też na jego końcach). Jak widać, aby dotrzymać kroku twórcom wirusów, autorzy programów antywirusowych muszą korzystać z metod podobnych do tych, które stosują twórcy wirusów.

Największą wadą monitorów jest to, iż powodują one częste fałszywe alarmy (ang. false positives), przez co użytkownik po kolejnym irytującym potwierdzeniu jakiejś zwykłej operacji dyskowej staje się mniej uważny, a czasami wręcz deinstaluje program antywirusowy z pamięci.

11.3 Szczepionki

Szczepionki są programami skierowanymi przeciwko konkretnym wirusom. Na podstawie posiadanego, złapanego egzemplarza wirusa można, po odpowiedniej analizie jego kodu, zdefiniować sygnatury, na podstawie których wykrywa się kopie wirusa w zainfekowanych obiektach. Dokładna analiza kodu wirusa najczęściej pozwala także odnaleźć w nim oryginalne wartości pewnych parametrów, które mogą posłużyć do wyleczenia sektorów lub plików (np. dla plików typu EXE jest to punkt wejścia do oryginalnego programu, dla plików COM - początkowe bajty programu). Większość z istniejących szczepionek to rozbudowane programy z interfejsem, które potrafią wykryć i usunąć kilka tysięcy wirusów. Tylko w przypadkach nowych wirusów niektóre osoby, zmuszone okolicznościami, same piszą szczepionkę skierowaną przeciwko konkretnemu wirusowi, czego efektem z reguły jest nie do końca przetestowany, ale działający program.



11.4 Programy autoweryfikujące

Programy tego typu umożliwiają dodanie do wskazanego pliku krótkiego programu, mającego na celu sprawdzenia przy każdym uruchomienie, czy dany program nie został w jakiś sposób zmieniony (co zwykle oznacza ingerencję wirusa). Dodawany kod dopisuje się do pliku wykorzystując te same mechanizmy co wirusy.

Najczęściej programy tego rodzaju są nieodporne na technikę stealth i w systemie zainfekowanym przez wirusa używającego tej sztuczki nie wykażą żadnej zmiany w pliku, mimo że jest on zainfekowany.

11.5 Programy zliczające sumy kontrolne

Działanie tego typu programów polega na obliczaniu odpowiednich sum kontrolnych dla zadanego pliku lub plików oraz ewentualnie sektorów. Zliczane sumy kontrolne są najczęściej przechowywane w osobnych plikach, tworzonych po pierwszym uruchomieniu programu. Jeżeli pliki te istniały już wcześniej, program antywirusowy wykorzystuje dane w nich zawarte, aby porównać sumę obliczaną na bieżąco z poprzednio zachowaną.

Suma kontrolna nie musi (a nawet nie powinna) być sumą arytmetyczną. Dzięki znajomości algorytmów stosowanych przez pewne programy antywirusowe niektóre wirusy potrafią zarazić plik i obliczyć dla niego nową sumę kontrolną, którą bez większych problemów można zastąpić pierwotną, przechowywaną w pliku.

Piętą Achillesową programów zliczających sumy kontrolne jest to, iż pliki przechowujące obliczone sumy nie są w żaden sposób chronione, dlatego wiele wirusów bezkarnie kasuje napotkane znane sobie pliki z sumami kontrolnymi.

12. Techniki używane przez programy antywirusowe

12.1 Skaning

Historycznie jest to najstarsza technika stosowana przez programy antywirusowe. Skaning polega na wyszukiwaniu w zainfekowanym obiekcie zadanej sekwencji bajtów (sygnatury wirusa).

Poniżej przedstawiono kilka przykładowych sygnatur istniejących wirusów:

B8 ED FE CD 21 A3 03 01 0E 8F 06 6F 01 BA ; sygnatura wirusa Atomie 1.0

BE 30 01 8B 16 17 01 B9 35 01 2E 31 14 83 ; sygnatura wirusa Human Greed

8B FC 36 8B 2D 81 ED 03 01 44 44 1E 06 OE ; sygnatura wirusa DOOM!

5D 83 ED 03 E8 15 00 EB 27 90 E8 OF 00 B4 ; sygnatura wirusa Ethernity

5D 81 ED 03 01 EB 1B 90 B8 24 35 CD 21 ; sygnatura wirusa OLG


Jak widać, tradycyjna sygnatura jest to ciąg bajtów o nieustalonej z góry długości, zapisanych heksalnie, które program antywirusowy konwertuje na rozumianą przez siebie postać binarną (maszynową) i dopiero taki łańcuch poszukiwany jest w przeszukiwanym obiekcie. Z czasem pojęcie sygnatury rozszerzono. Dzisiejsze skanery potrafią interpretować różne symbole oraz znaki globalne (ang. wildcards) np. ? czy *. Poniżej podano przykłady kilku prostych, nieznacznie rozszerzonych sygnatur używających znaków globalnych:

BB ?2 B9 10 01 81 37 ?2 81 77 02 ?2 83 C3 04 E2 F2 ; sygnatura wirusa FireFly

B9 CC 01 BB ?2 2E 81 07 ?2 83 C3 02 ; sygnatura wirusa K-CMOS

1E 06 OE OE 1F 07 2E FE 06 ?2 2E A1 ; sygnatura wirusa Geodesic Propagation

33 CO 8E D8 BE ?2 FF 34 FF 74 02 C7 04 ; sygnatura wirusa 1984

12.2 Heurystyczne wyszukiwanie wirusów

Jak wspomniano we wstępie, większość istniejących wirusów to najczęściej przeróbki, stąd techniki wykorzystywane w pierwowzorach są bez większych zmian implementowane w kolejnych, nowych pokoleniach wirusów.

Wykorzystując ten fakt, twórcy programów antywirusowych zaczęli stosować technikę heurystycznego wykrywania kodu, polegającą na tym, iż na podstawie znajomości charakterystycznych, klasycznych sekwencji instrukcji zawartych w typowych wirusach, można znaleźć nieznane jeszcze, ale wykorzystujące je wirusy. Typowe instrukcje wykorzystywane przez wirusy zostały wymienione w poprzednich rozdziałach, np. przy okazji omawiania instalacji w systemie i przejmowania przerwań. Poniżej pokazano kilka instrukcji podatnych na heurystykę lub sekwencji znajdujących się najczęściej w kodzie typowego wirusa plikowego. Jeżeli program antywirusowy, przeszukując pamięć lub plik, zidentyfikuje je (lub też inne), najczęściej informuje o tym użytkownika. Często wykrycie nawet kilku charakterystycznych bajtów w pamięci może umożliwić wykrycie nieznanego jeszcze wirusa. Poszukiwanie sekwencji może być prowadzone bądź to przy okazji zwykłego skaningu, bądź też podczas kontrolowanego uruchamiania programów (tryb krokowy, emulacja procesora).
CMP AX, 4B00h ; sprawdź czy jest uruchamiany jakiś program

; 3D,00,4B kod maszynowy rozkazu

CMP DS:[0],Z ; czy ostatni blok pamięci

; 80,3E,00,00, 5A kod maszynowy rozkazu

MOV AX, 2521h ; funkcja DOS ustaw adres przerwania 21h

INT 21h ; wywołaj funkcję B8,21,25,CD,21 kod maszynowy

; sekwencji

MOV WORD PTR [l],0008 ; ustaw blok jako systemowy w nagłówku MCB

; C7,06,01,00,08,00 kod maszynowy instrukcji

CALL NEXT ; weź relatywny offset NEXT:

; E8,00,00 kod instrukcji
Program z demonstracji stara się znaleźć w całej wykorzystywanej przez programy użytkowe pamięci operacyjnej sekwencje, które zwykle są wykorzystywane przez wirusy. Katalog Heur

12.3 Tryb krokowy
Do wykrywania zaawansowanych polimorficznych wirusów nie można stosować zwykłego skaningu, gdyż kod wirusa za każdym razem wygląda zupełnie inaczej. Możliwym wyjściem jest w tej sytuacji wykorzystanie trybu krokowego procesora. Program antywirusowy uruchamia sprawdzany program w trybie krokowym pod kontrolą odpowiedniego monitora tego przerwania przy użyciu np. (4B01/21). Po każdej wykonanej instrukcji wywoływany jest monitor, który sprawdza, czy np. aktualnie wykonywana instrukcja pasuje do listy charakterystycznych, stałych instrukcji wirusa (jego wersji odszyfrowanej). Jeżeli instrukcja spełnia wymagania, monitor - przy użyciu dozwolonego w tym przypadku skaningu - sprawdza, czy w kodzie jest już odszyfrowany wirus. Jeżeli po przekroczeniu jakiejś wartości granicznej wykonanych instrukcji monitor nie wykryje żadnego podejrzanego kodu, sztucznie kończy program i sygnalizuje, iż nie ma w nim wirusa.

12.4 Emulacja procesora
Ze względu na to, iż omówiony w poprzednim punkcie tryb krokowy można oszukać, autorzy programów AV musieli zastosować inną metodę kontrolowanego uruchamiania programów. W tym celu wbudowali w swe programy interpretator asemblera, dzięki któremu mogą emulować wykonywanie początkowych instrukcji programu, mając jednocześnie nad nim pełną kontrolę. Ze względu na ciągły rozwój procesorów linii 80x86 interpretator asemblera musi być stale rozwijany. Nieuwzględnienie instrukcji wszystkich procesorów spowoduje bowiem, iż przy najbliższym wystąpieniu instrukcji, której monitor jeszcze nie potrafi rozpoznać, jego działanie zostanie zakończone z wynikiem negatywnym. Do niedawna sprawa miała się tak na przykład z kodami 66h, 67h, będącymi interfejsem rozszerzonych instrukcji dla procesorów 386 i wyższych. Niektóre wirusy celowo wykorzystywały je do oszukiwania programów antywirusowych, które po ich napotkaniu kończyły sprawdzanie pliku.

12.5 Przynęty
Jedną z technik używanych do łapania prostych wirusów są przynęty. Są to programy, dające się zainfekować ewentualnemu wirusowi. Najczęściej na kod takiego programu składa się kilkaset lub kilka tysięcy razy powtórzona operacja NOP oraz instrukcja zakończenia programu. Program antywirusowy może tworzyć kilka lub więcej takich plików i następnie wykonywać z nimi różne operacje: uruchamiać, otwierać, czytać i zapisywać do nich na różne sposoby, aby dać szansę ewentualnemu wirusowi na ich zainfekowanie.

Wygenerowana przynęta powinna jak najbardziej przypominać typowy program, i to zarówno pod względem długości, jak i zawartości. Jeżeli bowiem długość pliku jest znacząca, tzn. np. wynosi jakąś wielokrotność liczb 10 czy 16, wirus może nie zainfekować takiego pliku.



12.6 Odświeżanie programów systemowych w sektorach
Ta dość trywialna technika służy do nadpisywania programów istniejących w BOOT-sektorach lub Głównych Rekordach Ładujących. Jednym z efektów wykonania takiego odświeżania może być usunięcie nieznanego jeszcze wirusa z zajmowanego przez niego sektora. Podczas przeprowadzania operacji odświeżania należy pamiętać, iż niektóre wirusy całkowicie przejmują kontrolę nad danymi zawartymi w sektorach systemowych, tak więc zamazanie wirusa może spowodować, iż podczas następnego startu systemu system nie będzie się ładował z twardego dysku lub też - co gorsza - nie będzie można odczytać zapisanych na dysku danych.

Możliwe wyjście z tej sytuacji polega na zapisaniu aktualnego stanu dysku (zawartości sektorów) w kopii bezpieczeństwa np. na czystej dyskietce, aby można było później odtworzyć operację odświeżania. Ze względu na możliwość stosowania przez wirusa techniki stealth odczyty najlepiej, byłoby wykonywać przez porty.



12.7 Blokowanie programów używających trybu krokowego
Niektóre monitory antywirusowe posiadają wbudowane mechanizmy blokowania wirusów, które używają trybu krokowego do znalezienia oryginalnych wejść do przerwań.

Zainstalowany monitor przejmuje najbardziej narażone na tracing przerwania (13h, 21h, 2Fh) i podczas ich wywoływania ustawia procedurę obsługi przerwania INT 0lh (trybu krokowego) na pustą procedurę, zakończoną rozkazem IRET, a po wywołaniu oryginalnej procedury chronionego przez siebie przerwania przywraca starą procedurę przerwania l. Dzięki temu wirus próbujący znaleźć oryginalną procedurę przerwania znajdzie adres będący częścią monitora antywirusowego. W efekcie wszystkie wykonywane przez wirusa czynności będą przechodzić przez monitor, który nie pozwoli na niebezpieczne działania.

Technikę tą pokazuje program w katalogu Antytrac.



1   2   3   4   5


©operacji.org 2017
wyślij wiadomość

    Strona główna