Linux i wirusy - Bliss

2009-12-23 00:00:00 +0000


Wirusy komputerowe do niedawna były wyłącznie utrapieniem użytkowników DOSa i wszelkich rodzajów MS Windows. W ciągu kilku lat od powstania koncepcji samopowielającego się kodu infekującego inne programy powstało ich kilka tysięcy.

Użytkownikom Unixów ten problem jest prawie całkowicie nieznany dzięki rozbudowanemu systemowi kontroli dostępu do plików i pamięci, będącemu jednym z podstawowych założeń tego systemu. Wirus napisany według tradycyjnej DOSowej filozofii może co najwyżej zainfekować pliki do których miałby prawa zapisu - czyli praktycznie tylko te należące do użytkownika, który go uruchomił. Kolejnym utrudnieniem dla potencjalnego autora wirusa jest ogromna różnorodność platform sprzętowych na których działają Unixy oraz to, że duża część oprogramowania jest rozpowszechniana w postaci kodu źródłowego.

WIRUSY CZY ROBAKI?

Nieprzyjazne środowisko stworzyło konieczność wyprodukowania wirusa działającego na zupełnie odmiennej zasadzie, niż jego DOSowi pobratymcy. Najsłynniejszym przejawem działania Unixowego mikroba był przypadek "robaka" (ang. worm) Roberta T. Morrisa, który w roku 1988 zainfekował kilka tysięcy Sunów i VAXów w Stanach Zjednoczonych. "Robak" wykorzystywał wszystkie możliwości, jakie daje połączenie komputerów w sieć. Przy użyciu dziur w implementacjach usług finger, rexec i protokołu SMTP wirus kopiował swój kod (część w języku C, część w pliku obiektowym) na kolejne maszyny, wykorzystując ich zasoby do zgadywania haseł na przyszłych ofiarach. Na temat jego działania napisano obszerne rozprawy, z których niektóre wymieniono na końcu artykułu. W późniejszym okresie pojawiło się jeszcze kilka "robaków", jednak epidemie miały znacznie mniejszy zakres.

BLISS

Na początku stycznia 1997 wydawało się, że historia znowu się powtórzyła. W grupach dyskusyjnych poświęconych bezpieczeństwu Linuxa pojawiły się alarmujące listy o nowym wirusie Bliss, napisanym specjalnie pod ten system.

Sprawa stała się na tyle głośna (a może dlatego stała się tak głośna?), że firma McAfee opublikowała informację o pojawieniu się nowego, groźnego wirusa pod Linuxa, który oczywiście jest usuwany przez oferowany przez nią program VirScan.

Tymczasem 7-go lutego na listę best-of-security napisał anonimowy autor wirusa rozwiewając większość plotek, które do tej pory zdążyły narosnąć wokół Blissa. List zaczynał się tak: "To jest wirus. Jeśli go uruchomisz, to masz sporą szansę na zniszczenie swojego systemu". Ale reszta była znacznie mniej sensacyjna.

Obecnie istnieją dwie wersje Blissa - stara i nowa, załączona do wzmiankowanego listu autora wirusa. Bliss jest programem napisanym w C, po skompilowaniu mającym 17892 (stara wersja) lub 18604 (nowa wersja) bajtów długości. Kod źródłowy nie został opublikowany. Wirus nie jest "robakiem" w sensie takim jak program Morrisa, jest nawet bardziej koniem trojańskim niż wirusem. Nie wykracza poza prawa dostępu do plików choć trzeba przyznać, że wykorzystuje je do końca. Wyszukuje wszystkie pliki do których może pisać i infekuje je swoją kopią. Potrafi także wykryć starszą wersję siebie i podmienić ją na aktualną. Próbuje także przywrócić datę modyfikacji zainfekowanego pliku. Przerywa działanie gdy zorientuje się, że jego działanie jest śledzone debuggerem lub programem strace.

Jedna z niewielu rzeczy, które upodabniają go do "robaków" to próba wykorzystania niewłaściwie zabezpieczonej usługi rsh (zapisywalne pliki .rhosts i /etc/hosts.equiv) do uzyskania cudzej tożsamości oraz być może przeniesienia się na inne maszyny. Według firmy McAfee Bliss jest wirusem nadpisującym - tzn. bezpowrotnie zastępuje początek infekowanego programu swoim kodem. W rzeczywistości zarówno stara (opisana przez McAfee) jak i nowa wersja zachowuje oryginał. Uruchomienie zainfekowanego programu nie może pozostać niezauważone, ponieważ Bliss wyświetla szczegółowe informacje co w danej chwili robi.

Bliss poza plikami binarnymi próbuje infekować skrypty shella, jednak tak zarażonych plików potrafi później poprawnie uruchomić. Potrafi je za to wyleczyć.

Charakterystyczną cechą Blissa jest zapisywanie ścieżek do wszystkich zarażonych programów w pliku /tmp/.bliss. Na tej podstawie Bliss uruchomiony z opcją "--bliss-uninfect-files-please" próbuje usunąć swoje kopie ze znajdujących się na liście plików.

Jak widać trafna jest uwaga jednego z czytelników listy linux-security, że "Bliss wygląda raczej na rezultat prac naukowych niż złośliwego wirusa". Nadal nie da się napisać wirusa infekującego system Unixowy w sposób podobny jak DOS lub MS Windows oczywiście pod warunkiem, że nie uruchomi go administrator.

Blissa nie należy jednak lekceważyć - jeśli w naszym systemie znajdują się jakieś zapisywalne przez wszystkich pliki wykonywalne to mogą one zostać zarażone przez zwykłego użytkownika. Późniejsze uruchomienie takiego pliku przez administratora zaowocuje epidemią, która może rozprzestrzenić się na cały system. Może to też być dodatkową motywacją do przestrzegania podstawowej zasady bezpiecznej pracy na Unixie - korzystania z uprawnień administratora tylko wtedy, gdy jest to naprawdę niezbędne.

PROFILAKTYKA

Warto od razu sprawdzić swój system pod kątem obecności infekowalnych plików. Administrator systemu może to zrobić za pomocą dwóch poleceń:
  % find / -type f -perm -003 -exec ls -l {} \;;
  % find /home -name ".[rs]hosts" -exe ls -l {} \; -exec grep "+" {} \;;

Pierwsze z nich znajdzie pliki wykonywalne zapisywalne przez wszystkich i wyświetli ich bliższe dane. Jeśli nie ma szczególnych powodów do zachowania określonych atrybutów pliku, to należy ustawić standardowe:
  % chmod 755 plik      (czyli "-rwxr-xr-x")
Trzeba też pamiętać, że podobne zagrożenie mogą stanowić pliki zapisywalne przez grupę (szukamy ich opcją "-perm -030"). Oczywiście, sprawa w tym wypadku jest znacznie mniej oczywista - zależy kto należy do grupy.

Drugie z wymienionych poleceń znajdzie wszystkie pliki .rhosts oraz .shosts zawierające znaki "+" i wyświetli ich zawartość. Stanowią one poważną dziurę w bezpieczeństwie usług rsh i ssh, wykorzystywaną m.in. przez Blissa. Pliki takie należy usunąć jeśli ich istnienie nie jest w jakiś sposób uzasadnione.

Można wreszcie skorzystać z któregoś z publicznie dostępnych skanerów - SATAN, ISS, COPS lub Tiger. Wszystkie z nich, poza szukaniem konkretnych dziur w konkretnych usługach, sprawdzają także atrybuty plików wykonywalnych.

LECZENIE

W razie infekcji najprostszym rozwiązaniem będzie skorzystanie z usług samego wirusa - uruchomienie go z opcją "--bliss-uninfect-files-please". Warunkiem jest istnienie pliku /tmp/.bliss, w którym znajdują się dane zarażonych plików. Może to wyglądać tak:
% bliss --bliss-uninfect-files-please
bliss type 1 version 0.4.0 (00010004)
Compiled on Feb  5 1997 at 18:35:33
Written by electric eel.
Debugging is ON
using infection log: /tmp/.bliss
/tmp/bliss/autoconf, ver 10002, at Wed Feb 19 23:25:11 1997
disinfecting: /tmp/bliss/autoconf
file.virus_size=18604, x=4513
read 4513 bytes
successfully (i hope) disinfected /tmp/bliss/autoconf
%

ZAKOŃCZENIE

Osoby bliżej zainteresowane Blissem znajdą więcej informacji na stronie http://www.math.ucsb.edu/~boldt/bliss/.

Dostępne są darmowe skanery wyszukujący pliki zainfekowane przez Blissa: abliss (ftp://ftp.secnet.com/pub/tools/abliss.tar.gz) oraz VirScan (ftp://ftp.mcafee.com/pub/antivirus/english/unix/linux/).

Obszerne informacje na temat "robaka" Morrisa można znaleźć w artykule "A Tour of the Worm" (http://www.mmt.bme.hu/~kiss/docs/opsys/worm.html) oraz w archiwum coast.cs.purdue.edu/pub/doc/morris_worm/.

Interesujący artykuł o Unixowych wirusach, "Reflections on Trusting Trust" Kena Thompsona można znaleźć pod adresem http://www.cs.umsl.edu/~sanjiv/sys_sec/security/thompson/hack.html.