Wirusy w systemie Linux Konrad Olczak
Plan prezentacji Różnice w bezpieczeństwie Windowsa i Linuxa. Pokazanie możliwości implemetacji wirusa.
Windows vs. Linux Uruchamianie plików. Różnorodność oprogramowania. Uprawnienia administracyjne. Ilość odwołań systemowych. Źródła. Popularność. Społeczność użytkowników. Zbytnia pewność bezpieczeństwa.
Uruchamianie plików LINUX WINDOWS Zapisanie pliku. Zapisanie pliku. Nadanie praw. Uruchomienie go. Uruchomienie pliku.
Różnorodność oprogramowania LINUX WINDOWS Dużo różnych programów. Brak standardów. Rozproszone cele dla atakującego. Większość użytkowników korzysta z tego samego oprogramowania. np. Outlook korzysta z mechanizmów IE.
Uprawnienia administracyjne LINUX WINDOWS Każde odwołanie do zasobów systemowych jest uwierzytelniane. Pod systemem Windows programy instalowane przez nieuprzywilejowanego użytkownika nadal mogą dodawać DLL'e i inne pliki systemowe.
Ilość odwołań systemowych LINUX WINDOWS
Źródła LINUX Otwarte. Każdy może zrobić i przesłać łatkę. Różne pomysły zabezpieczenia systemu. WINDOWS Zamknięte. Stała zamknięta grupa programistów. Nie trzeba dekompilować i szukać dziur na poziomie asemblera.
Popularność
Społeczność użytkowników LINUX WINDOWS Zaawansowani użytkownicy. Znający się na działaniu systemu. Każdy, kto zaczyna przygodę z komputerem.
Zbytnia pewność bezpieczeństwa Brak zwyczaju korzystania z jakiegokolwiek oprogramowania antywirusowego i zbytnie poczucie bezpieczeństwa większości użytkowników "pingwina" sprawia, że raz zainstalowany rootkit może egzystować w systemie znacznie dłużej, niż na przeciętnym komputerze z Windowsem, gdzie program antywirusowy to wymuszona codzienność.
Scott Granneman z Security Focus Żeby zepsuć system Linux trzeba nad tym popracować. Żeby zepsuć system Windows wystarczy popracować na nim.
Tworzenie prostego wirusa.
Co trzeba wiedzieć Zdecydować się na konkretną architekturę. Znać strukturę plików wykonywalnych ELF. Wywołania systemowe. Znać asemblera.
ELF (Executable and Linking Format) Stosowany w różnych systemach uniksowych. Odmiana 32-bitową oraz 64-bitowa. Zasięg: Pliki wykonywalne. Biblioteki dynamiczne. Zrzuty pamięci. Pliki obiektowe.
Budowa ELF Nagłówek zawiera przesunięcie ważnych tablic. Tablica nagłówków - decydują o kształcie i treści przestrzeni adresowej tworzonego procesu. segmenty typu PT_LOAD tworzą i inicjalizują segmenty w pamięci wirtualnej. Tablica sekcji.
Nagłówek ELF Najważniejsze pole e_entry jest adresem wirtualnym punktu wejścia programu. Od instrukcji, która się tam znajduje, rozpocznie się jego wykonywanie. Pole to będzie nam przydatne, gdyż za jego pomocą przekierujemy wykonanie do kodu wirusa.
Wykorzystanie tablicy sekcji Tablica sekcji może zostać usunięta bez wpływu na działanie programu. Duży rozmiar (ok jednego kilobajta) na końcu pliku. Można rozszerzyć ostatni segment typu PT_LOAD, tak aby swoim zasięgiem objął dodatkowy obszar pliku, w którym umieścimy wirusa, co umożliwia załadowanie do pamięci danych, które nie powinny się tam znaleźć.
Wywołania systemowe Przerwania o wektorze 128. Identyfikator przerwania należy umieścić w rejestrze EAX przed wywołaniem przerwania (identyfikatory są w pliku nagłówkowym syscall.h), a jego argumenty w innych rejestrach. Użycie otoczek odpowiada ona za przygotowanie argumentów i wywołanie przerwania 128 oraz obsługę błędów. Stworzenie wirusa wymaga stworzenia własnych otoczek.
Przykładowa otoczka _exit, biblioteki libc.so.6 mov 0x4(%esp),%ebx mov $0xfc,%eax ;kod zakonczenia ;procesu zapisany w ;EBX ;nr wywolania sys. int $0x80 ;przerwanie 128 hlt
Otoczki wywołań w wirusie Główną funkcją wirusa będzie rozmnażanie się poprzez infekcję innych plików. Otwieranie i zamykanie plików i katalogów (open, close). Wyliczanie zawartości katalogu (getdents). Pobieranie informacji o obiektach systemu plików (stat). Wczytywanie i usuwanie plików z pamięci (mmap, munmap).
Odsyłacz Po szersze informacje wraz z implementacją odsyłam do czasopisma HACKIN9 z października 2010.
Bibliografia Hackin9 9-10-2010 http://tech.wp.pl/kat,1009785,title,czy-linuxjest-takibezpieczny,wid,11188033,wiadomosc.html http://www.linux.pl/?id=article&show=329
Dziękuje PYTANIA?