Metody włamań do systemów komputerowych.

Złośliwe programy

Autor: Błażej Chodarcewicz



Opis ogólny

Program zużywający zasoby systemu przez rozmnażanie się.

Fragment programu komputerowego sprawdzający, czy w systemie jest spełniony określony zbiór warunków. Jeżeli warunki te s± spełnione, doprowadza on do wykonania niedozwolonych czynności.

Tajne, nie opisana w dokumentacji "wejście" do programu, pozwalające na uzyskanie dostępu z pominięciem normalnych procedur uwierzytelniania.

Tajna, nie opisana w dokumentacji procedura, zawarta w użytecznym programie. Wykonanie programu powoduje wykonanie tej tajnej procedury.

Kod zawarty w programie, który powoduje wstawienie kopii samego siebie do jednego lub więcej innych programów. Oprócz rozprzestrzeniania się wirus zazwyczaj wykonuje pewne niepożądane czynności.

Program, który może się powielać i wysyłać swoje kopie między komputerami za pośrednictwem połączeń sieciowych. W momencie dotarcia do komputera worm może się uaktywnić, powielić się i dalej rozprzestrzeniać. Oprócz rozprzestrzeniania się worm zazwyczaj wykonuje pewne niepożądane czynności.



Wormy

Większość robaków jest dedykowana na platformę Windows zwłaszcza w wersji 98. Jednak nieuwaga użytkowników jest wykorzystywana przez "robako-pisarzy" wszędzie, gdzie tylko to jest możliwe. Jeśli chodzi o Linux'a to narażona jest szczególnie dystrybucja RedHat (np. robaki Lion, Adore atakują tą dystrybucję).

Osoby tworzące robaki ciągle pracują nad stworzeniem robaka, który byłby niezależny od platformy systemowej. Efekt ten jest możliwy dzięki pisaniu robaków w językach skryptowych np. PHP (dla przykładu Caracula, który do rozpowszechniania się używał programu mIRC, był napisany w PHP), a także dzięki stosowaniu Javy (np. Strange Brew).

Przełomowym momentem w tworzeniu robaków było napisanie pierwszego samopowielającego się programu w języku skryptowym. Programy napisane w postaci skryptów są łatwe do podejrzenia (źródeł) i analizy. Dzięki temu dochodzi do tworzenia coraz to nowych mutacji istniejących robaków skryptowych. Nawet początkowy twórca robaków może podejrzeć rozwiązania stosowane przez tych zaawansowanych i zastosować je w całości lub po drobnej przeróbce w swoim insekcie. Przykładem robaka, który doczekał się niesamowitej liczby mutacji jest słynny robak z 2000 r. - LoveLetter.

Budowa robaka jest zależna od jego funkcjonalności oraz sposobu działania, ale w większości robaków można wyróżnić część wspólną. Przedstawia się ona następująco (poniżej opisano główne części robaka w odniesieniu do systemu Windows ze szczególnym uwzględnieniem robaków skryptowych):

Procedura instalacji w systemie to najczęściej pierwsza rzecz jaką robi insekt. Chociaż nie jest tak zawsze np. część robaków pocztowych nie instaluje się w systemie.

Jest kilka sposobów instalacji w systemie. Oto najczęściej stosowane:

Główną częścią, istotą działania worm'a jest rozmnażanie - dystrybucja. Robaki wykorzystują różne kanały jakimi się przenoszą (jednocześnie powielając się).

Punkt ten został szczegółowo omówiony niżej.

Jest to funkcja, która odpowiedzialna jest za dodatkowe efekty robaka. Mogą one być mniej lub bardziej szkodliwe, czasami jest to tylko jakiś zabawny tekst wypisywany przy zaistnieniu określonego warunku, a czasami są to poważne szkody.

Najbardziej skutecznym, najszerzej stosowanym i najprostszym kanałem dystrybucji jest poczta elektroniczna. Do rozmnażania wykorzystywany jest program pocztowy. Najczęściej (zawiera najwięcej dziur) stosowany jest Microsoft Outlook lub OutlookExpress (są też robaki wykorzystujące program Eudora). Mechanizm jest stosunkowo prosty: robak przegląda całą książkę adresową programu i wysyła maila z załączonym naszym robakiem. Tekst listu zachęca do uruchomienia załączonego pliku (i tym samym do uaktywnienia robaka). Jeśli użytkownik uruchomi (otworzy) załącznik, robak może zostać uruchomiony. Wykonanie robaka skryptowego wymaga aktywnej usługi Windows Script Host, jednak Windows 98 i nowsze mają tę usługę standardowo aktywną.

Z uwagi na mniejszą liczbę użytkowników IRC w stosunku do użytkowników maili metoda ta jest przeważnie stosowana jako uzupełnienie do poprzedniej. Robaki przesyłane przez IRC wykorzystują dwa programy mIRC i Prich. Zasada działania jest taka sama dla obu tych programów: dodajemy do pliku konfiguracyjnego programu skrypt, który będzie automatycznie wysyłał plik z kodem robaka do osób znajdujących się na kanale. Aby to uczynić przechwytywane jest zdarzenie JOIN (czyli wejście nowej osoby na kanał), ewentualnie PART (opuszczenie kanału); w procedurze obsługi tego zdarzenia następuje próba wysłania tej osobie naszego robaka. Jest to tylko próba, ponieważ do faktycznej wysyłki jeszcze kawałek drogi. Użyte w skrypcie polecenie dokonuje zestawienia połączenia. Połączenie to nie będzie możliwe jeśli jedna ze stron posiada nierutowalny adres IP. Domyślna konfiguracja programu mIRC powoduje ignorowanie odbierania jakichkolwiek plików poza obrazkami, plikami dźwiękowymi i archiwami ZIP. Jeśli użytkownik będzie na tyle nie rozsądny i wyłączy tą blokadę, to dopiero połowa sukcesu. Następuje transfer pliku (do domyślnego katalogu np. download), teraz jeszcze trzeba zmusić ofiarę do uruchomienia tego pliku.

Metoda ta zadziała jedynie pod przeglądarką Internet Explorer. Moduł ten jest wykorzystywany także przez programy Outlook i Outlook Express, więc poniższe uwagi dotyczą także maili w formacie HTML. Pliki HTML są wykorzystywane przez robaki na różne sposoby. Pierwszy z nich to wykorzystanie do transportu. W momencie oglądania tak przygotowanego dokumentu wykona się skrypt, który oprócz rzeczy widocznych na zewnątrz, zapisuje treść robaka w osobnym pliku i uruchamia go. Drugi sposób to robaki czysto HTML'owe. Takie robaki w całości są zapisane w pliku HTML. Kod insekta jest zawarty w ciele dokumentu pomiędz znacznikami <script></scriopt> i obudowany zawartością dokumenty HTML. Obie te metody mają istotną wadę: przy standardowych ustawieniach przeglądarki, podczas próby tworzenia obiektu Scripting.FileSystemObject (obiekt ten umożliwia operacje na systemie plików) lub innego uznanego za niebezpieczny, wyświetli ona ostrzeżenie i zażąda zgody użytkownika systemu na stworzenie tych obiektów.

Kolejny sposób jest troszkę lepszy, ale zadziała jedynie dla przeglądarki IE w wersjach od 4.0 do 5.0. Wykorzystuje on klasę Scriptlet.TypeLib, umożliwia ona wykorzystywanie zaawansowanych operacji systemowych takich jak np. tworzenie plików. W tych wersjach IE klasa ta uważana jest za bezpieczną, więc system nie będzie o nic pytał przy tworzeniu obiektów tej klasy. Od wersji 5.5 IE niestety obiekty tej klasy uznano za niebezpieczne i użytkownik będzie musiał potwierdzać ich utworzenie.

Jeśli nieuważny użytkownik udostępni swoje zasoby przez sieć np. katalog Autostart, to robak bez problemów może się skopiować do tego katalogu i przy kolejnym uruchomieniu systemu, zostanie odpalony. Przykładem takiego działania jest robak Antiqfx.

Są też robaki, które rozprzestrzeniają się za pomocą programu wymiany komunikatów, takie jak Netscape Messenger. Przykładem jest tu robak NewApt.

 

Ciekawe jest porównanie pakietów IE + OE z Netscape:

Cecha

Iternet Explorer i Outlook Express

Netscape Communicator

Integracja z systemem operacyjnym

Mocno zintegrowany z systemem Windows

Ma własne środowisko, niezależne od systemu operacyjnego

Obsługa skryptów

Obsługuje skrypty Jscript (rozszerzony JavaScript) i VBScript, które mogą mieć dostęp do wszystkich składników systemu za pomocą obiektów ActiveX

Obsługuje skrypty JavaScript, które są bezpieczne, ponieważ operują jedynie na środowisku przeglądarki

Osadzanie obiektów ActiveX na stronach HTML

IE umożliwia osadzanie na stronach obiektów ActiveX

Nie udostępnia takiej opcji

Próba otwarcia załącznika

Outlook (OE) domyślnie uruchamia wszystkie załączniki bez pytania

Netscape Mail pyta użytkownika, co zrobić z plikiem: zapisać na dysk (domyślnie) czy uruchomić

Serwer OLE

Outlook (OE) rejestruje się jako serwer OLE, co umożliwia przeprowadzenie automatycznej wysyłki maili przez robaki

Communicator nie rejestruje się jako serwer OLE

 


Wirusy

      1. Faza uśpienia
      2. W tej fazie wirus jest bezczynny - śpi. Zostanie on w końcu zaktywowany przez jakieś zdarzenie, np. datę, obecność innego programu czy pliku. Stadium to nie występuje u wszystkich wirusów.

      3. Faza rozprzestrzeniania się
      4. Podczas tej fazy wirus umieszcza swoją identyczną kopię w innym programie lub w określonych obszarach systemowych na dysku. Każdy zarażony program zawiera klon wirusa, który następnie wejdzie w fazę rozprzestrzeniania.

      5. Faza uaktywniania się
      6. W taj fazie wirus wykonuje czynności zamierzone przez twórcę. Tak jak faza uśpienia, faza ta może zostać pobudzona przez różne wydarzenia, w tym dojście do pewnej liczby skopiowań danego egzemplarza wirusa.

      7. Faza wykonania

Wirus będący w takiej fazie wypełnia swoją funkcję. Może ona mieć charakter nieszkodliwy, np. pojawienie się komunikatu na ekranie, lub szkodliwy, np. niszczenie programów i plików z danymi.

Wirus może być dołączony na początku lub na końcu programu wykonywalnego, lub może być doń wbudowany w inny sposób. W rezultacie zainfekowany program wywoła najpierw kod wirusa, a następnie wykona właściwy kod programu.

program V:=
{
goto main:
procedura zaraz
/* tresc procedury zarażającej */
procedura zaszkodz
/* treść procedury wywołującej szkody */
funkcja wyzwalacz
/* funkcja zwraca true jeśli zachodzi jakiś warunek */

main: program_główny:=
{
zaraz;
if wyzwalacz then zaszkodz;
goto dalej;
}
 
dalej:
/* treść programu przed zarażeniem */
}

      1. Pasożytniczy
      2. Tradycyjna i wciąż najpospolitsza forma wirusa. Wirus pasożytniczy dołącza się do wykonywalnych plików, wykonuje się zainfekowany program, powiela się, znajdując inne wykonywalne programy.

      3. Rezydentny
      4. Zagnieżdża się w pamięci głównej jako część rezydentnego programu systemowego. Od tego momentu zaraża wszystkie wykonywane programy.

      5. Sektora ładowania początkowego
      6. Zaraża główny rekord wprowadzający (master boot record) lub rekord wprowadzający (boot record) i przenosi się gdy system jest uruchamiany z dysku zawierającego wirusa.

      7. Polimorficzny

Wirus, który mutuje za każdym razem, gdy zakaża, co uniemożliwia wykrycie go według "sygnatury".


Konie trojańskie

Koń trojański to użyteczny lub pozornie użyteczny program, lub też polecenie, zawierający ukryty kod, który, w przypadku wywołania, wykonuje niepożądaną lub szkodliwą czynność.

Konie trojańskie mogą być stosowane do pośredniego wykonania funkcji, które nie mogą zostać wykonane bezpośrednio przez niepowołanego użytkownika. Na przykład, aby uzyskać dostęp do plików innego użytkownika w systemie dzielonym, użytkownik może stworzyć konia trojańskiego, który, w razie uruchomienia, zmieni zabezpieczenia dostępu plików uruchamiającego go użytkownika w taki sposób, by wszyscy wżytkownicy mogli je odczytywać. Autor może następnie skłaniać użytkownika do uruchamiania programu przez umieszczenie go we wspólnym katalogu i nadanie mu nazwy sugerującej, że jest to pożyteczne narzędzie.

Przykładem trudno wykrywalnego konia trojańskiego może być kompilator, który został zmodyfikowany tak, by wstawiał dodatkowy kod do pewnych programów w trakcie ich kompilacji, np. do programu umożliwiającego rozpoczęcie pracy z systemem (login). Kod tworzy w tym programie boczne wejście, które pozwala autorowi rozpocząć pracę z systemem przy użyciu specjalnego hasła. Takiego konia trojańskiego nie można wykryć przez czytanie kodu źródłowego programu.

Inną częstą funkcją koni trojańskich jest niszczenie danych. Program pozornie wykonuje normalną, pożyteczną czynność (np. kalkulator), lecz być może "po cichu" kasuje pliki użytkownika.


Bibliografia