380 likes | 692 Views
Wirusy!!!. Bartek Maroszek Sebastian Pawlak Maciek Seweryn. Spis treści. Definicja wirusa Wirus biologiczny a komputerowy Krótka historia wirusów Podstawowe typy wirusów Wirusy polimorficzne Wormy i Trojany Ochrona komputera przed wirusami. Definicja wirusa.
E N D
Wirusy!!! Bartek Maroszek Sebastian Pawlak Maciek Seweryn
Spis treści Definicja wirusa Wirus biologiczny a komputerowy Krótka historia wirusów Podstawowe typy wirusów Wirusy polimorficzne Wormy i Trojany Ochrona komputera przed wirusami
Definicja wirusa „Wirus komputerowy, kod, który wskutek braku systemowej ochrony zasobów w jednoprogramowych systemach operacyjnych komputerów osobistych dokonuje zaprogramowanych przez jego autora, niepożądanych zmian w środowisku systemowym, uszkadzając dane, programy, zmieniając sposób działania sprzętu itp. W uproszczeniu wirus jest obcym fragmentem kodu, dołączonym do programu. Wykonanie tego kodu po uruchomieniu programu powoduje odnajdywanie na dysku innych, “nie zarażonych” programów i dołączanie do nich kodu wirusa. W ten sposób wirus zaraża coraz to więcej programów w komputerze, a zainfekowane nim programy, przenoszone na dyskietkach lub przesyłane siecią niszczą zasoby innych komputerów. Wirus może też atakować sektor rozruchowy dyskietki lub dysku. Skutki powodowane przez wirusy mają znamiona przestępstwa polegającego na naruszeniu dóbr chronionych prawem.” Hasło opracowano na podstawie „Słownika Encyklopedycznego - Informatyka” Wydawnictwa Europa. Rok wydania 1999.
Krótka historia wirusów 1980 Fred Cohen formułuje podstawy teoretyczne "wirusologii". 1985 Dwóch Włochów Roberto Cerrutti i Marco Marocutti wysyłają do pisma Scientific American swój słynny list. 1986 Pierwszy wirus atakujący komputery IBM-PC. W miesiąc później pojawia się wirus Brain. Pierwszy "koń trojański". 1987 Christmas Tree, pierwszy "robak" z cechami "konia trojańskiego" i "łańcuszka św. Antoniego".
Krótka historia wirusów 1988 MacMag - pierwszy wirus, atakujący komputery Macintosh. Scores - pierwsza epidemia komputerów Macintosh. Jerusalem uaktywnia się z określoną datą. 1989 AIDS - "koń trojański". 1990 W Bułgarii pierwszy BBS, gdzie można się wymieniać kodami wirusów. Ukazuje się książka Marka Ludwiga ucząca pisania wirusów. 1991 Tequila potrafi zmieniać strukturę.
Krótka historia wirusów 1992 Michał Anioł zdobywa rozgłos medialny, powoduje światową panikę, ale niewielkie szkody.DAME: zestaw programów, pozwala przerabiać wirusy. 1992 VCL (Virus Creation Laboratory), zestaw programów do tworzenia wirusów. 1995 Concept, wirus makrowy, atakujący dokumenty Worda. 1996 Boza, pierwszy wirus systemu Windows 95. Laroux, wirus atakujący dokumenty arkusza Excel.
Krótka historia wirusów 1997 Esperanto, wirus atakujący dwa systemy z różnymi procesorami.Pierwszy "robak" mIRC, systemu rozmów sieciowych. 1998 Strange Brew, pierwszy wirus w języku Java. Back Orifice (Tylne wejście), pierwszy "koń trojański", który umożliwia całkowite przejęcie kontroli nad komputerem podłączonym do Internetu.
Krótka historia wirusów 1999 CIH (Czernobyl), napisany przez Chińczyka Czen-Ing-Ho, uderza w Koreę, atakując około miliona komputerów (250 mln dolarów strat; potem rozprzestrzenia się na cały świat). Melissa, wirus poczty elektronicznej. Tristate, wirus zdolny do jednoczesnego atakowania plików programów Word, Exel i PowerPoint. 2000 Love Bug, Love Letter, "robak", który spowodował największe szkody w historii informatyki (2-15 mld dolarów). Timofonica, "robak" atakujący telefony komórkowe. Life Stage, "robak" nie do odróżnienia od zwykłego pliku tekstowego.
Podstawowe typy wirusów KLASYCZNE WIRUSY SYSTEMOWE Wirusy plików wykonywalnych Dokonują zmian w wybranych programach, które od tego momentu przestają funkcjonować lub wykonują po uruchomieniu różne nietypowe działania. Wirusy sektora rozruchowego dysku Umieszczają swój kod w sektorze rozruchowym dysku lub dyskietki i przejmują kontrolę nad komputerem. WIRUSY STOWARZYSZONE Mechanizm ich działania wykorzystuje fakt, że w systemie DOS do uruchomienia programu wystarczy napisać w linii poleceń samą jego nazwę. W przypadku pliku nc.exe można stworzyć plik nc.com - przy wpisaniu „nc” uruchomi się plik nc.com. Mechanizm ich działania wykorzystuje fakt, że w systemie DOS do uruchomienia programu wystarczy napisać w linii poleceń samą jego nazwę. W przypadku pliku nc.exe można stworzyć plik nc.com - przy wpisaniu „nc” uruchomi się plik nc.com. Mechanizm ich działania wykorzystuje fakt, że w systemie DOS do uruchomienia programu wystarczy napisać w linii poleceń samą jego nazwę. W przypadku pliku nc.exe można stworzyć plik nc.com - przy wpisaniu „nc” uruchomi się plik nc.com. Mechanizm ich działania wykorzystuje fakt, że w systemie DOS do uruchomienia programu wystarczy napisać w linii poleceń samą jego nazwę. W przypadku pliku nc.exe można stworzyć plik nc.com - przy wpisaniu „nc” uruchomi się plik nc.com. Mechanizm ich działania wykorzystuje fakt, że w systemie DOS do uruchomienia programu wystarczy napisać w linii poleceń samą jego nazwę. W przypadku pliku nc.exe można stworzyć plik nc.com - przy wpisaniu „nc” uruchomi się plik nc.com. WIRUSY MAKROWE Pisane są w języku tworzenia makropoleceń innych programów. Przenoszone są przez dokumenty tych programów. Infekcja następuje przez otwarcie (odczytanie) zakażonego dokumentu.
Wirusy polimorficzne Polimorfizm Słowo to pochodzi z języka greckiego (gr. polymorphos). Terminem tym oznacza się zdolność obiektu do występowania w wielu kształtach i postaciach. W przypadku wirusów oznacza to, iż posiadają one możliwość mutowania własnego kodu i generowania niezliczonej ilości, różniących się między sobą, kopii. Kopie te, mimo różnego kodu, mają tę samą funkcjonalność. Różnice między wirusem klasycznym a polimorficznym Typowy wirus posiada co najmniej dwa bloki funkcyjne: jeden odpowiada za replikację, a drugi za wykonanie programu zainfekowanej ofiary. Dodatkowe bloki mogą odpowiadać za efekty specjalne. Wirusy polimorficzne posiadają dodatkowy blok, kod generatora polimorficznego.
Wirusy polimorficzne Najpopularniejsza metoda skaningu polegająca na szukaniu stałego wzorca wirusa (tzw. sygnatury) Polimorfizm jako metoda pozbawienia wirusa stałej sygnatury Pierwsze wirusy szyfrujące kod, ale posiadające stały kod deszyfrujący Udoskonalone skanery, oparte na teorii języków formalnych i automatów Rok 1992 przełomowy za sprawą pochodzącego z Bułgarii twórcy wirusów (Mroczny Mściciel, generator polimorficzny)
Wirusy polimorficzne Piszemy wirusa polimorficznego Poszczególne kroki wykonywane przez generator: wylosowanie długości sekwencji szyfrującej N, np. N=3 wylosowanie długości operandu OP, np. OP=DWORD PTR, czyli rozmiar operandu ROP=4 wylosowanie sekwencji szyfrującej i odpowiadającej jej sekwencji deszyfrującej, np. dla N=3 postaci: szyfrator: szyfrator nr 1 = ADD OP[ ], 12345678h szyfrator nr 2 = ROL OP[ ], 1 szyfrator nr 3 = XOR OP[ ], 0ABCDEFh deszyfrator: deszyfrator nr 1 = XOR OP[ ], 0ABCDEFh deszyfrator nr 2 = ROR OP[ ], 1 deszyfrator nr 3 = SUB OP[ ], 12345678h zaszyfrowanie kodu wirusa, dla N=3, wg. powyższego szyfratora wylosowanie rejestru będącego licznikiem pętli RL, np. RL=ECX (RL nie może być używany przez tzw. Balast) wylosowanie rejestru będącego indeksem do danych RI, takiego, że RI != RL, np. RI=EDX (RI nie może być używany przez Balast) ADD <-> SUB NOT <-> NOT NEG <-> NEG XOR <-> XOR ROL <-> ROR
Wirusy polimorficzne wywołanie Balast (zapisanie do bufora wynikowego przypadkowej sekwencji rozkazów) zapisanie do bufora instrukcji inicjalizującej RL wywołanie Balast zapisanie do bufora instrukcji inicjalizującej RI wywołanie Balast • zapisanie do bufora instrukcji dekodera, deszyfrator nr 1: XOR OP[RI], 0ABCDEFh wywołanie Balast • zapisanie do bufora instrukcji dekodera, deszyfrator nr 2: ROR OP[RI], 1 wywołanie Balast • zapisanie do bufora instrukcji dekodera, deszyfrator nr 3: SUB OP[RI], 12345678h wywołanie Balast zapisanie do bufora instrukcji zmniejszającej licznik RL wywołanie Balast • zapisanie do bufora instrukcji modyfikującej indeks RI • wywołanie Balast zapisanie do bufora CMP RI,0 wywołanie Balast
Wirusy polimorficzne zapisanie do bufora instrukcji wykonującej skok na początek pętli, jeśli warunek nie jest spełniony (JNZ) wywołanie Balast dopisanie w to miejsce zaszyfrowanego kodu; kod wykona się gdy powyższy warunek nie zostanie spełniony (zostanie odszyfrowany cały kod wirusa)
Wirusy polimorficzne Prosta procedura Balast Balast proc mov ecx, losowaIloscInstrukcji wstawInstrukcje: mov eax, liczbaPseudolosowa mov al, [tablicaJednobajtowych + eax] stosb ; zapisz kod instrukcji w buforze ES:[EDI] loop wstawInstrukcje ret Balast endp tablicaJednobajtowych db 0F8h ; kod binarny CLC db 0F9h ; STC db 0F5h ; CMC db 0FAh ; CLI db 0FBh ; STI db 0FCh ; CLD db 0FDh ; STD
Wirusy polimorficzne Procedura Balast Procedura Balast nie może wykorzystywać rejestrów używanych przez właściwy kod wirusa albo powinna odkładać je przy wejściu na stos i zdejmować przy wyjściu. Nie powinna wykorzystywać rejestru ESP Zaawansowana procedura Balast wykorzystuje: skoki, procedury, pętle, fałszywe wywołania funkcji bibliotecznych, różne rozkazy (np. MMX) Należy pamiętać, że procedura Balast generuje kod różnej długości a zatem należy uwzględniać w kodzie przesunięcia. W chwili wstawiania instrukcji inicjalizującej indeks, bardzo często generator nie zna tej wartości, a więc może wstawić ją dopiero na końcu.
Wirusy polimorficzne Przykładowy wygenerowany kod polimorficzny cli ; wygenerował Balast clc ; wygenerował Balast mov ecx, 100 ; licznik długości kodu cmc ; wygenerował Balast mov edx, 00402000h ; adres deszyfrowanych danych std ; wygenerował Balast petla: XOR dword ptr[edx], 0ABCDEFh ; deszyfrator nr 1 clc ; wygenerował Balast cli ; wygenerował Balast ROR dword ptr[edx], 1 ; deszyfrator nr 2 std ; wygenerował Balast SUB dword ptr[edx], 12345678h ; deszyfrator nr 3 sti ; wygenerował Balast dec cx ; zmniejszenie licznika stc ; wygenerował Balast add edx, 4 ; zwiększ adres cmc ; wygenerował Balast cmp ecx, 0 ; czy koniec pętli? cld ; wygenerował Balast jnz petla ; NIE = skok i deszyfruj dalej cmc ; wygenerował Balast std ; wygenerował Balast ... ; tutaj zaszyfrowany kod wirusa
Wirusy polimorficzne Wykrywanie wirusów polimorficznych Pomimo oferowanych przez generatory polimorficzne bogatych możliwości szyfrowania, kod tego typu wirusów jest wciąż dość sprawnie wykrywany przez programy antywirusowe. Wykrycie wirusa polimorficznego składa się generalnie z dwóch etapów: kontrolowane wykonanie (emulacja procesora) podejrzanego fragmentu programu (zwykle jego początku) i odszyfrowanie, przy okazji, ewentualnej warstwy polimorficznej wykrycie w odszyfrowanym kodzie, sygnatury wirusa Wirusy polimorficzne mogą wielokrotnie szyfrować kod.
Wirusy polimorficzne Czemu nie można użyć wbudowanego w procesor trybu krokowego? Wirus może wykryć, że jest debuggowany, dlatego autorzy programów antywirusowych muszą tworzyć programowe emulatory procesora. ASSUME CS:KOD,DS:KOD KOD SEGMENT ORG 100H COM: jmp start napis1 db 'Nie jestem śledzony.',10,13,'$‘ napis2 db 'śledzisz mnie !!!',10,13,'$' start: push cs pop ds ;W DS jest CS. db 68H ;kod instukcji PUSH WORD. dw offset debugger mov ax,09C3H ;AL <- kod instrukcji RET. mov byte ptr [TUTAJ],al TUTAJ db 90H ;(90H to NOP) mov dx,offset napis1 int 21H ;Wypisz tekst 1. pop ax ret debugger: mov dx,offset napis2 int 21H ;Wypisz tekst 2. ret KOD ENDS END COM
Wirusy polimorficzne Czemu napisanie emulatora procesora jest trudne ? • Implementacja trybu rzeczywistego procesorów x86 jest prosta (skończony zbiór instrukcji) • Implementacja trybu chronionego (mimo większego, ale również skończonego zbioru instrukcji) jest trudna. Emulator musi sobie poradzić z: wątkami - wirus może uruchamiać fragmenty swego kodu w wątkach, które mogą się ze sobą komunikować i wykonywać na przemian, w sposób nieliniowy i nieprzewidywalny (np. wykonując na przemian zależne od siebie zestawy instrukcji) zaawansowanymi sztuczkami antydebuggerowymi. SEH(Structured Exception Handling) - wirus może świadomie wygenerować wyjątek (np. dzielenie przez zero), który to wyjątek spowoduje przerwanie pracy nieprzygotowanego na taką ewentualność emulatora nowymi instrukcjami procesora - twórcy wirusów są o krok przed twórcami antywirusów. Przez długi czas emulatory nie obsługiwały instrukcji MMX.
Wirusy polimorficzne Mimo, dość złożonej struktury emulatora procesora, wirusy polimorficzne można sprawnie wykrywać. Czy mogą one zatem stawić skuteczny opór programom antywirusowym? Stworzenie antywirusa dla wirusa polimorficznego zajmuje o wiele więcej czasu niż dla wirusa klasycznego. Im więcej wirusów, tym dłużej firmy antywirusowe będą pracować nad antidotum. Dodatkowo, wykrywanie wirusów polimorficznych musi być w 100% sprawne. Pozostawienie na dysku choćby jednej nie wykrytej kopii spowoduje ponowny wzrost liczby zachorowań.
Wirusy polimorficzne Metamorfizm Generowany jest „przypadkowy” kod całego wirusa, a nie tylko procedury deszyfrującej. Metamorfizm jest nowym trendem w dziedzinie wirusologii. Czy w przypadku takich wirusów, dotychczasowe metody skanowania (kontrolowane uruchomienie i odnalezienie odszyfrowanej sygnatury) staną się bezużyteczne ?
Wormy i Trojany ROBAK (Worm) Program samopowielający się. Jego reprodukcja i wędrowanie poprzez Internet (czy sieć lokalną) powodują wzrost ruchu i przez to spowolnienie przesyłania informacji. Odmianą jest Łańcuszek świętego Antoniego, czyli list, który powielają sami użytkownicy komputerów. Inną odmianą "robaka" jest fałszywe ostrzeżenie (najczęściej przed nowym wirusem), który nieświadomi ludzie w najlepszej wierze rozsyłają znajomym. Robaki występują głównie na platformie Windows (zwłaszcza 98) Robaki występują także pod Linuksem (Lion, Adore) Istnieją robaki napisane w PHP (Caracula) Robaki dystrybuują się poprzez e-mail, IRC, WWW, tzw. messengery,… W odróżnieniu od wirusa, robak nie potrzebuje programu nosiciela, a jest samodzielnym programem wykonywalnym.
Wormy i Trojany Trojan (Koń Trojański) Symuluje działanie innego programu, zaś po spełnieniu określonych warunków rozpoczyna działalność destrukcyjną. Klasyczny "koń trojański" zaczyna działalność natychmiast po uruchomieniu.
Ochrona komputera przed wirusami METODY WYKRYWANIA WIRUSÓW Poprzez sumę kontrolną Metoda polega na tym, że przed zarażeniem sprawdza się wielkość plików. Gdy dojdzie do zarażenia wielkość pliku zarażonego ulega zmianie (kod wirusa posiada przecież określoną wielkość), jest to sygnał że plik może być zarażony. Metoda ta jest jednak niewystarczająca, gdyż niektóre wirusy mogą ukrywać swoją wielkość, a poza tym często np. dokumenty zmieniają swoją wielkość podczas ich edycji. Poprzez odnajdywanie kodu wirusa Metoda ta jest obecnie powszechnie używana. Polega ona na tym, że najpierw programista piszący program antywirusowy musi wirusa „złapać”, to znaczy wyodrębnić z nosiciela kod wirusa, a później sprawdzać czy inne pliki nie posiadają takiego kodu. Poprzez kontrolowane wykonanie Kontrolowane wykonanie (emulacja procesora) podejrzanego fragmentu programu i odszyfrowanie, przy okazji, ewentualnej warstwy polimorficznej.
Ochrona komputera przed wirusami JAK ZAPOBIEGAĆ I LECZYĆ Po pierwsze, drugie i trzecie Obowiązkowo należy mieć w komputerze zainstalowany program antywirusowy; trzeba dbać, by baza sygnatur była jak najczęściej aktualizowana. Po czwarte Nie instalować oprogramowania niejasnego pochodzenia. Po piąte Korzystając z poczty elektronicznej - jeśli nie jesteśmy absolutnie pewni źródła - nigdy nie otwierać załączników do listów, będących plikami wykonywalnymi, plikami zawierającymi makropolecenia lub mającymi dwa rozszerzenia. Po szóste Utrzymywać idealny porządek na dysku, regularnie poddawać go defragmentacji; pamiętać o obowiązkowym robieniu kopii zapasowych wszystkich wrażliwych plików i swoich dokumentów.
Ochrona komputera przed wirusami PROGRAMY ANTYWIRUSOWE MKS_VIR; Anti Viren Kit; AntiViral Toolkit Pro; McAfee Virus Scan; Kaspersky Anti-Virus; Norton Antivirus chkrootkit dla Linuksa wykrywa: lrk3, lrk4, lrk5, lrk6 (and some variants); Solaris rootkit; FreeBSD rootkit; t0rn (including some variants and t0rn v8); Ambient's Rootkit for Linux (ARK); Ramen Worm; rh[67]- shaper; RSHA; Romanian rootkit; RK17; Lion Worm; Adore Worm; LPD Worm; kenny-rk; Adore LKM; ShitC Worm; Omega Worm; Wormkit Worm; Maniac-RK; dsc-rootkit; Ducoci rootkit; x.c Worm; RST.b trojan; duarawkz; knark LKM; Monkit; Hidrootkit; Bobkit; Pizdakit; t0rn (v8.0 variant); Showtee; Optickit; T.R.K; MithRa's Rootkit; George; SucKIT; Scalper (FreeBSD/Apache chunked encoding worm); Slapper A, B, C and D (Linux/Apache mod_ssl Worm); OpenBSD rk v1; Illogic rootkit; SK rootkit. sebek LKM; Romanian rootkit; LOC rootkit;