23.08.2012 | 15:37

Adam Haertle

Wirus jak Frankenstein, sam zbuduje się z kawałków cudzego kodu

Istniejące metody zabezpieczania wirusów przed wykryciem są dalekie od skuteczności. Programy antywirusowe coraz lepiej radzą sobie z rozpoznaniem zagrożeń. A co by było, gdyby wirusy potrafiły budować swój kod z fragmentów niewinnych aplikacji?

Odpowiedź na to pytanie przyniosła bardzo ciekawa prezentacja wygłoszona niedawno na konferencji WOOT ’12. Naukowcy z uniwersytetu w Dallas przedstawili w niej rewolucyjną metodę tworzenia oprogramowania na podstawie mikroskopijnych fragmentów istniejących aplikacji.

Jak ukryć wirusa

Istniejące metody ukrywania wirusów przed narzędziami antywirusowymi mają wiele wad. Szyfrowanie i kompresja od razu proszą o zainteresowanie plikiem, wirtualizacja wymaga sporej ilości kodu a polimorfizm co prawda pomaga tworzyć pliki z których każdy ma inną sygnaturę, ale dalej posiadają pewne wspólne cechy. Naukowcy zaproponowali zatem nową metodę budowania kodu wirusów – z tzw. gadżetów.

Inspektor Gadżet

Gadżetem nazwali mikroskopijny fragment całkiem niewinnego programu, wykonujący jedynie podstawową operację semantyczną i kończący się instrukcją powrotu. Przykładem gadżetu może być sekwencja bitów, która wykonuje operację przeniesienia wartości między dwoma rejestrami jak poniżej.

mov eax, ebx
ret

Zaletą gadżetów jest ich całkowita niewinność oraz dostępność. W trakcie swoich analiz naukowcy odkryli, że w plikach znajdujących się w katalogu /windows/system32 są w stanie zlokalizować w krótkim czasie tysiące użytecznych gadżetów. Następnie, w oparciu o opracowany szablon funkcjonalności złośliwego kodu, mogą wybrać potrzebne gadżety i skleić je w nowy działający plik. Co ważne, ze względu na powszechną dostępność gadżetów, można przygotować wiele kopii pliku, z których każda będzie składać się z innych ciągów bitów.


Schemat budowania złośliwego kodu

To działa!

W swoim eksperymencie naukowcy opracowali szablon funkcjonalności obliczania kąta nachylenia odcinka w oparciu o współrzędne jego końców. Opracowany przez nich algorytm wykrywania gadżetów zidentyfikował średnio 46 gadżetów w 1 KB kodu pliku explorer.exe. Okazało się, że w oparciu jedynie o kod binarny zawarty w tym pliku można było stworzyć ogromną ilość mutacji, wykonujących zlecone zadanie.

Działające programy, stworzone dla celów demonstracji technologii, mają dość prostą funkcjonalność, jednak nic nie stoi na przeszkodzie, by wykonywały dużo bardziej skomplikowane funkcje. Nie jest zatem wykluczone, że za jakiś czas zobaczymy następcę Stuxnetu, budującego swoje binaria na żywo.

Wszystkim czytelnikom zainteresowanym szczegółami projektu polecamy lekturę referatu naukowego tych samych autorów.

Powrót

Komentarze

  • 2012.08.24 10:18 marcin

    Rewolucja ? Bullshit. Metoda zbytnio nie rozni sie od polimorfizmu, poza faktem ze jest bardziej zlozona obliczeniowo, bo trzeba jeszcze wyszukiwac te gadzety w plikach binarnych (czyli otwarcie pliku, disasemblacja, wybranie gadzetow i zapamietanie je w odpowiedniej strukturze danych). Po drugie, same operacje arytmetyczne, bo takie da sie tutaj głownie zbudowac, nie wystarcza do stworzenia malwaru, ktory ma miec jakies funkcjonalnosci. Predzej czy pozniej, malware musi wywolac jakas funkcje API. Jest zatem podatny na wykrycie podczas emulacji – a dobre programy AV posiadaja rozbudowane emulatory. Pisanie ze „nic nie stoi na przeszkodzie by wykonywały duzo bardziej zlozone funkcje” jest niczym nie poparte, bo w pierwszej kolejnosci, metoda musiala by analizowac kod, który chce przeszczepic z innego pliku i dopasowywac do swoich wymagan (zdefiniowanych w tym „blue princie”). Tego nie da sie latwo (jesli w ogole) zautomatyzowac.
    Podsumowujac: metoda ewidentnie czysto akademicka i jedyna jej uzytecznosc to taka ze mozna zrobic prezentacje i pojechac na konferencje jako prelegent.

    Odpowiedz
  • 2012.08.24 20:01 SARIN

    Pierdolenie o szopenie.
    Jesli aplikacja ma miec jakies okreslone zadanie to gdzies to przechowuje…. i jakos ma pobierac odpowiednie dane z innych plikow…i jest kod ktory to pobiera i sklada, wiec sama ma jakis pewien okreslony przebieg. Takze bullshit i nic wiecej. Zadna
    rewolucyjna metoda. To ze tworzy dany plik z innych to sama ma jakis okreslony 'flow’, ktory pewnie nie rozni sie niczym innym od zwyklego programu.
    Mowie tu o rzeczach typu chcemy osiagnac to i to…i AV beda wykrywac sam program je tworzacy. Wiec tak jak mowilem …pierdolenie o szopenie…ch*ja warte :)

    Odpowiedz
  • 2012.08.24 20:52 minus1

    „wykonujący jedynie podstawową operację semantyczną i kończący się instrukcją powrotu” toż to nie ma lepszej „sygnatury” w bazie :P

    Odpowiedz

Zostaw odpowiedź do marcin

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Wirus jak Frankenstein, sam zbuduje się z kawałków cudzego kodu

Komentarze