Podstawy tworzenia i analizy złośliwego oprogramowania (ang. malware)

Spis treści
- Wprowadzenie
- Instalacja programu Oracle VirtualBox. Krok po kroku
- Bezpieczne uruchomienie próbki w środowisku izolowanym
- MITRE ATT&CK. Podstawowe informacje
- Ładunek (ang. payload) i program wczytujący kolejny etap (ang. stager)
- Wyłączenie ochrony antywirusowej w systemie na maszynie wirtualnej
- Analiza statyczna i dynamiczna
- Wskaźniki infekcji (ang. Indicators of Compromise)
- Typy plików, funkcje skrótu (ang. hash) i ciągi znaków
- Przechwycenie zrzucanych ładunków (ang. payload) za pomocą piaskownicy Sandboxie
- Zakończenie
Wprowadzenie
Na potrzeby tego dokumentu próbowano znaleźć prostą analogię, która pomogłaby łatwiej zrozumieć sposób, w jaki urządzenie wykonuje kod programu. Ostatecznie udało się wymyślić, że jednostkę obliczeniową (CPU) można porównać do postaci w grze komputerowej, która pożera kolorowe kropki. Wykonanie programu to w przenośni takie właśnie „zjadanie bajtów” kodu maszynowego przez moduł w urządzeniu. Natomiast naukowo mówi się, że kod programu jest wykonywany lub urządzenie wykonuje obliczenia.
Złośliwe oprogramowanie (ang. malware) to inaczej szkodliwe bajty programu komputerowego. Jeśli „zjedzone bajty” będą zainfekowane lub złośliwe, to może dojść do uszkodzenia „wnętrzności” systemu operacyjnego lub nawet urządzenia.

Przed rozpoczęciem pracy z niniejszym tekstem warto zapoznać się z dokumentem dołączonym poniżej. Opisano tam podstawowe rodzaje wirusów komputerowych i złośliwego oprogramowania (ang. malware).
Podstawowe rodzaje wirusów komputerowych i malware »
Po tym krótkim wprowadzeniu do zagrożeń związanych z wirusami komputerowymi można przejść dalej, czyli do utworzenia własnego laboratorium.
Instalacja programu Oracle VirtualBox. Krok po kroku
Dla bezpiecznego przeprowadzania eksperymentów i analiz potrzebny będzie osobny system, który można pozwolić zainfekować. Niektórzy przeznaczają do tego celu oddzielne fizyczne urządzenie. Inne rozwiązanie to utworzenie maszyny wirtualnej za pomocą odpowiedniego oprogramowania. Niniejszy dokument jest oparty o bezpłatne rozwiązanie VirtualBox.

Poniżej przygotowana instrukcja prowadząca użytkownika krok po kroku przez proces instalacji narzędzia VirtualBox.
Instalacja programu Oracle VirtualBox. Krok po kroku »
Następne kroki to utworzenie maszyny wirtualnej z systemem Windows w programie VirtualBox co opisuje poniższa instrukcja.
Utworzenie maszyny wirtualnej z systemem Windows w programie VirtualBox. Krok po kroku »

Jeśli system operacyjny Windows nie wyświetla rozszerzeń nazw plików, to należy zmienić tę opcję zgodnie z poniższą instrukcją. Najwyższy czas zacząć się przyzwyczajać, że ikona pliku nie świadczy o tym jak system traktuje plik i co ten plik zawiera.

Warto też utworzyć maszynę wirtualną z bezpłatnym systemem z rodziny Linux takim jak np. Ubuntu Desktop. Poniższa instrukcja opisuje ten proces krok po kroku.
Utworzenie maszyny wirtualnej z systemem Linux (Ubuntu) w programie VirtualBox. Krok po kroku »
Po wykonaniu powyższych instrukcji można przejść dalej.
Bezpieczne uruchomienie próbki w środowisku izolowanym
Podstawowa wiedza, która jest wymagana już na samym początku i od której zależy bezpieczeństwo naszych urządzeń, to odpowiednie obchodzenie się z próbkami – plikami, które mogą być wirusem komputerowym.
Próbki przechowujemy w postaci skompresowanej (np. *.zip) z ustawionym hasłem. Wymyślenie hasła dla archiwum plików i podanie go obok nie jest bez sensu. Zabezpieczenie hasłem ma za zadanie chronić przed przypadkowym uruchomieniem niebezpiecznego pliku. Działa to w taki sposób, że podwójne kliknięcie na plik nie spowoduje automatycznego otworzenia, ale wyświetli monit o wpisanie hasła.
Podsumowanie. Próbki przechowujemy w postaci skompresowanej z nadanym hasłem. W takiej samej postaci wymieniamy się próbkami i przesyłamy je. Wyodrębnienie plików z archiwum następuje tylko w izolowanym środowisku (np. maszyna wirtualna) z wyłączonym dostępem do internetu.
Próbka (ang. sample)
ethicalblue-sample.zip [223 841 bajtów]
Hasło (ang. password)
NOT-A-VIRUS.Education.Win64.ethical.blue.Magazine
Jeśli nie można określić czy próbka jest wormable, czyli może zainfekować inne urządzenia przez sieć, to przed eksperymentami należy wyłączyć maszynie wirtualnej dostęp do internetu. Dość dobrym rozwiązaniem jest wejście w ustawienia maszyny wirtualnej i całkowite wyłączenie karty sieciowej.


W celu aktywacji przesyłania plików z głównego systemu do maszyny wirtualnej należy zainstalować dodatki gościa nazywane Guest Additions.
Poniżej przygotowana instrukcja prowadząca użytkownika krok po kroku przez proces instalacji dodatków do programu VirtualBox.
Instalacja dodatków gościa (ang. guest additions) w programie VirtualBox. Krok po kroku »
Opcję przeciągania i upuszczania (ang. drag & drop) plików z systemu gospodarza do systemu gościa można aktywować wybierając z górnego menu Urządzenia / Przeciąganie i upuszczanie / Gospodarz do gościa

Przykładowa próbka jest zabezpieczona hasłem przed przypadkowym uruchomieniem. Z tego powodu można ją pobrać bezpiecznie na główny system i przeciągnąć do odłączonej od sieci maszyny wirtualnej.
Próbka (ang. sample)
ethicalblue-sample.zip [223 841 bajtów]
Hasło (ang. password)
NOT-A-VIRUS.Education.Win64.ethical.blue.Magazine

Próbkę można teraz przekopiować z głównego systemu do systemu gościa na maszynie wirtualnej dzięki zainstalowanym wcześniej dodatkom nazywanym Guest Additions.

Próbka jest zabezpieczona przed przypadkowym uruchomieniem dlatego należy kliknąć na archiwum prawym przyciskiem myszy i wybrać opcję Wyodrębnij wszystkie.

Następnie należy wybrać folder do którego zostaną wypakowane pliki z archiwum *.zip.

Powinno pojawić się okno z prośbą o wprowadzenie hasła, którym jest zabezpieczona próbka przed przypadkowym uruchomieniem.
Hasło (ang. password)
NOT-A-VIRUS.Education.Win64.ethical.blue.Magazine

Przykładowa próbka to plik wykonywalny o nazwie ethicalblue.exe, który zostanie uruchomiony w izolowanym środowisku. Plik można otworzyć podwójnym kliknięciem lewym przyciskiem myszy lub pojedynczym kliknięciem prawym przyciskiem myszy i wybraniem opcji Otwórz.

Program antywirusowy w systemie Windows przeniósł plik do kwarantanny, ponieważ prawdopodobnie rozpoznał w nim coś nietypowego dla zwykłych programów. Próbka ethicalblue.exe zdążyła jednak zmienić obraz tła w systemie na maszynie wirtualnej.


Teraz za pomocą wcześniej utworzonej migawki (ang. snapshot) można przywrócić czystą postać systemu sprzed prezentowanej infekcji. W tym celu należy w oknie maszyny wirtualnej wybrać z górnego menu Plik / Zamknij.

W oknie dialogowym potwierdzającym wyłączenie maszyny wirtualnej należy zaznaczyć Przywróć aktualną migawkę (ang. snapshot) i kliknąć przycisk OK.

Teraz można ponownie uruchomić maszynę wirtualną w stanie takim jak zaznaczona migawka (ang. snapshot).


Sytuacja w której infekcja wirusem komputerowym przetrwa ponowną instalację systemu jest możliwa, lecz mało prawdopodobna. Nie ma powodu do paniki. Jednak istnieje złośliwe oprogramowanie (ang. malware) typu bootkit. Podstawowe metody ochrony przed tego rodzaju zagrożeniem zostały opisane w dokumencie poniżej.
Bezpieczeństwo BIOS-u, UEFI oraz złośliwe oprogramowanie typu bootkit »
MITRE ATT&CK. Podstawowe informacje
Pod adresem https://attack.mitre.org/ dostępna jest globalna baza danych taktyk i technik używanych m.in. przez podmioty zagrażające (ang. threat actor). Już na początku przeglądania wspomnianej witryny można przeczytać, że wiedza ta pochodzi z obserwacji rzeczywistych ataków i jest gromadzona dla zwiększenia poziomu bezpieczeństwa cybernetycznego na świecie.
Macierz (ang. matrix) zawiera czternaście taktyk.
- Reconnaissance – etap rozpoznania. Rekonesans celu ataku.
- Resource Development – etap przygotowania zasobów np. kradzież lub kupowanie kont, dostępów, narzędzi.
- Initial Access – etap początkowego dostępu. Zanim dojdzie do rozległej infekcji uzyskiwany jest początkowy dostęp np. przejęcie konta czy urządzenia jednego z pracowników.
- Execution – etap wykonania określonego kodu np. skrypt PowerShell przez podmiot zagrażający.
- Persistence – etap utrzymania trwałego dostępu. Działania polegające na przetrwaniu restartu urządzeń, zmian haseł i innych działań, które mogą spowodować utratę kontroli nad celem ataku.
- Privilege Escalation – etap podniesienia uprawnień np. uzyskanie praw administratora w atakowanym systemie lub sieci.
- Defense Evasion – etap uniknięcia wykrycia przez systemy obronne. Zmiana ustawień zabezpieczeń, zaciemnianie złośliwego kodu (ang. obfuscation), wstrzykiwanie kodu do zaufanych procesów aplikacji i inne.
- Credential Access – etap uzyskiwania dostępów takich jak loginy i hasła, kody PIN i inne.
- Discovery – etap rozpoznawania infrastruktury posiadając już dostęp do zaatakowanych systemów.
- Lateral Movement – etap przemieszczania się wewnątrz infrastruktury, aby zdobyć dostępy do kolejnych systemów.
- Collection – etap zbierania danych z zaatakowanych systemów i np. szyfrowanie lub dzielenie na fragmenty w celu późniejszej eksfiltracji.
- Command and Control – etap zdalnej komunikacji z zainfekowanymi urządzeniami w celu sprawowania kontroli. Do tego celu często jest przygotowywana specjalna infrastruktura nazywana w skrócie C&C lub C2.
- Exfiltration – etap wyprowadzania zdobytych informacji w niezauważalny sposób do infrastruktury atakujących.
- Impact – etap końcowy określający jaki był wpływ operacji np. kradzież danych, zniszczenie danych, manipulacja, podmiana, przerwanie procesów biznesowych i inne.
Każda z prezentowanych taktyk zawiera techniki np. wiadomość wyłudzająca dane (ang. phishing) to technika z kategorii Initial Access, czyli etap początkowego dostępu. Jeśli taka wiadomość zawiera złośliwy kod i zostanie on uruchomiony, to zaczyna się etap Execution. Jednak użytkownik lub program obronny może usunąć plik. Dlatego podmiot zagrażający będzie dążył do utrzymania trwałego dostępu (ang. persistence). Taki prosty przypadek doskonale prezentuje, że taktyki oraz techniki zawarte w macierzy ATT&CK układają się w logiczną całość. Nie trzeba też nikogo przekonywać jakie korzyści może dać przeglądanie tej rozległej, globalnej bazy wiedzy.
Ładunek (ang. payload) i program wczytujący kolejny etap (ang. stager)
Słowem ładunek (ang. payload) w kontekście bezpieczeństwa cybernetycznego najczęściej określa się fragment kodu, który jest dostarczany na atakowany system w celu wykonania poleceń przygotowanych przez podmiot zagrażający (ang. threat actor).
Plik z ładunkiem (ang. payload) może być niezależny i self-contained np. jeśli atakowany system nie ma połączenia z siecią. Inne rozwiązanie to stworzenie małego fragmentu kodu (ang. stager), który po uruchomieniu pobiera przez sieć kolejne moduły.

Wyłączenie ochrony antywirusowej w systemie na maszynie wirtualnej
Utworzone wcześniej środowisko izolowane, które służy jako laboratorium posiada domyślnie zabezpieczenia antywirusowe. Jeśli nie zostaną one wyłączone, to ciężko będzie przeprowadzać eksperymenty i analizy, ponieważ próbki będą usuwane. Rozpocznijmy od przywrócenia ostatniej migawki maszyny wirtualnej, czyli czystego systemu.

Po uruchomieniu maszyny wirtualnej należy znaleźć ustawienia ochrony przed wirusami i zagrożeniami.

Tutaj należy wybrać łącze Zarządzaj ustawieniami.

Kolejny krok to wyłączenie ochrony w czasie rzeczywistym, aby nie pojawiały się alarmy oprogramowania antywirusowego.

Dla pewności, że nie będzie alarmów programu antywirusowego należy dodać wykluczenia, czyli wpisy decydujące o pomijaniu skanowania określonym elementów.

Najpierw dodajmy do wykluczeń cały dysk C:\.

Otwórzmy okno dodawania wykluczeń według rozszerzenia pliku.

Tutaj należy wprowadzić wykluczenie wszystkich rozszerzeń plików, czyli *.*
.

Dodajmy jeszcze wykluczenie wszystkich procesów.

Wzorzec jest taki sam jak w przypadku wykluczania według rozszerzenia, czyli *.*
.

Teraz można wyodrębnić z archiwum *.zip przykładową próbkę.

Próbka (ang. sample)
ethicalblue-sample.zip [223 841 bajtów]
Hasło (ang. password)
NOT-A-VIRUS.Education.Win64.ethical.blue.Magazine
Próbka jest zabezpieczona hasłem przed przypadkowym uruchomieniem.

Próbka jest już przygotowana do eksperymentów i analizy.

Teraz można bezpiecznie wyłączyć maszynę wirtualną.

W celu zachowania wprowadzonych zmian i ustawień należy utworzyć migawkę (ang. snapshot) przyciskiem Zrób (ang. take).

Analiza statyczna i dynamiczna
Analizę próbek można podzielić na dwa podstawowe rodzaje: statyczna i dynamiczna. W przypadku analizy statycznej wykonywane jest badanie właściwości próbki bez wykonywania zawartego w niej kodu. Natomiast analiza dynamiczna to uruchamianie próbki w izolowanym i kontrolowanym środowisku w celu poznania jej zachowania. Niektóre próbki mogą stosować różne metody ochrony kodu zarówno przed analizą statyczną jak i dynamiczną. Popularne metody utrudniania analizy to m.in. szyfrowanie fragmentów kodu, wykrywanie środowiska wirtualnego, opóźnienie w uruchamianiu, wyzwalacze logiczne, różne zachowanie zależne od wykrytych ustawień systemowych i inne.
Wskaźniki infekcji (ang. Indicators of Compromise)
Skrótem IoC nazywane są artefakty, które świadczą o infekcji systemu. To takie cyfrowe ślady do których można zaliczyć adresy serwerów Command & Control, utworzone pliki, specyficzne wzorce w ruchu sieciowym, sygnatury, zmiany ustawień systemowych i inne.
Typy plików, funkcje skrótu (ang. hash) i ciągi znaków
Rozszerzenie nazwy pliku określa jego rodzaj i często skojarzenie z odpowiednim programem. Dlatego obrazy otwierają się domyślnie w przeglądarce zdjęć, a pliki dźwiękowe w odtwarzaczu muzyki.
W przypadku eksperymentów z wirusami komputerowymi i analizie próbek często można spotkać fragment kodu lub po prostu plik, który nie jest skojarzony z żadnym narzędziem. Na przykład: ethicalblue.bin, ethicalblue.hex lub nawet plik bez rozszerzenia. Na szczęście istnieją sposoby rozpoznania typu danych na podstawie bazy sygnatur. Można do tego celu zastosować np. program TrID.
Na początek spróbujmy zmienić rozszerzenie pliku wykonywalnego *.exe na jakieś nietypowe.

Pojawia się komunikat ostrzegawczy. Zatwierdzamy przyciskiem Tak.

TrID – File Identifier
trid_w32.zip [2 432 187 bajtów]
Narzędzie TrID na podstawie bazy definicji potrafi procentowo określić jakiego rodzaju mogą być nieznane dane (plik). Program uruchamia się za pomocą Wiersza polecenia lub PowerShell. Folder z pobranym narzędziem ma nazwę trid_w32 i znajduje się na Pulpicie. Przejdźmy do tego folderu za pomocą polecenia cd %USERPROFILE%\Desktop\trid_w32\. Próbka ethicalblue.vx znajduje się o jeden katalog wyżej, dlatego zastosowano tutaj dwie kropki (..\), czyli polecenie wygląda trid.exe ..\ethicalblue.vx.

Narzędzie poprawnie rozpoznało, że większa część zawartości pliku to bajty wyglądające na plik wykonywalny *.exe.

Identyfikacja próbek za pomocą funkcji skrótu (ang. hash)
Suma kontrolna (ang. hash) nazywana też funkcją skrótu to wartość obliczana według określonego algorytmu, który jeśli jest bezpieczny kryptograficznie, to dla takich samych danych zwróci taką samą sumę kontrolną. W prostych słowach: Zmiana choćby jednego bajta powinna dać inną sumę kontrolną.
Istnieją różne narzędzia do obliczania sum kontrolnych. W tym eksperymencie obliczamy funkcję skrótu SHA512 za pomocą narzędzia PowerShell, które jest domyślnie dostępne w systemie Windows.
Najpierw przejdźmy do folderu z próbką za pomocą polecenia cd podając za parametr ścieżkę do Pulpitu (w ścieżce jest nazwa użytkownika).
cd C:\Users\n\Desktop
Polecenie obliczenia funkcji skrótu (sumy kontrolnej) SHA512 jest następujące:
(Get-FileHash ethicalblue.vx -Algorithm SHA512).Hash;
Nazwę pliku należy podać według własnego systemu (tutaj jest to ethicalblue.vx).
Na konsoli tekstowej programu PowerShell powinna się pojawić wartość funkcji skrótu SHA512.
830C9680DA6ED79AA54FB03BB328E10CD1B27749053FD5B68123C90421DA2FE7A6C01BEE68DC05C9DADD01DADB994A77F78C67CB7349FDF06761E5F7F91E2DEA
Podstawowa korzyść obliczania funkcji skrótu (ang. hash) z pliku to możliwość sprawdzenia czy ktoś już nie wykonał analizy określonej próbki lub nie utworzył narzędzia do pracy z określoną próbką.

Odczytanie ciągów znaków zawartych w próbce
Rozpoznanie wstępne w postaci wyciągnięcia napisów, które są zawarte w pliku to często stosowana metoda. Można do tego zastosować narzędzie FLARE Obfuscated String Solver (FLOSS), które służy do automatycznej analizy statycznej.
https://github.com/mandiant/flare-floss/releases
Po pobraniu i wyodrębnieniu plików z archiwum *.zip otrzymujemy plik narzędzia floss.exe. Uruchamiamy Wiersz polecenia (ang. command prompt) i kursorem myszy trzymając lewy przycisk przeciągamy plik floss.exe nad okno Wiesza polecenia i zwalniamy lewy przycisk myszy. Na konsoli tekstowej powinna się wstawić ścieżka do floss.exe. Teraz wciskamy spację na klawiaturze i podobnie przeciągamy próbkę ethicalblue.exe, która jest parametrem dla narzędzia floss.exe.

Po zakończeniu automatycznej analizy przez narzędzie floss.exe na ekranie Wiersza polecenia powinny pojawić się wydobyte ciągi znaków.

Przechwycenie zrzucanych ładunków (ang. payload) za pomocą piaskownicy Sandboxie
Program Sandboxie to bezpłatna piaskownica, która izoluje wykonanie programu od systemu operacyjnego.
Narzędzie to można pobrać z adresu https://sandboxie-plus.com/downloads/
Instalacja programu Sandboxie nie powinna sprawić kłopotu, ale poniżej jest instrukcja jeśli ktoś potrzebuje.
Instalacja piaskownicy Sandboxie. Krok po kroku »
Po zakończonej instalacji należy kliknąć prawym przyciskiem myszy na próbkę ethicalblue.exe i wybrać nową opcję Uruchom w piaskownicy.

Zostawiamy zaznaczoną domyślną piaskownicę (Default Box) i zatwierdzamy przyciskiem OK.

Program ethicalblue.exe został uruchomiony pod kontrolą piaskownicy Sandboxie. Okno sterowania piaskownicą Sandboxie jest dostępne po kliknięciu ikony w zasobniku systemowym i wybraniu opcji Pokaż okno.

W oknie sterowania zmieniamy widok z Programy na pozycję Pliki i foldery.

Rozwijając kolejne elementy struktury katalogów można dojść do pliku ethicalblue.png. Jest to niegroźny ładunek (ang. payload) zrzucony przez próbkę ethicalblue.exe.

Próbka ethicalblue.exe pod kontrolą piaskownicy Sandboxie nie zmieniła tła ekranu, gdyż wykonanie zostało wyizolowane od systemu. Utworzony plik również został odizolowany od systemu oraz dodatkowo można go w miarę łatwo odnaleźć.
Zakończenie
Niniejszy tekst powstał, aby zainteresowane osoby poznały jak w celach edukacyjnych bezpiecznie wymieniać się próbkami oraz jak bezpłatnie stworzyć małe laboratorium do analizy i eksperymentów z wirusami komputerowymi.
Warto przeczytać
- Podstawowe rodzaje wirusów komputerowych i malware
- Bezpieczeństwo BIOS-u, UEFI oraz złośliwe oprogramowanie typu bootkit
- Wstęp do PowerShell dla użytkowników systemu Microsoft Windows
- Esencja wiedzy o Asemblerze x64 w błękitnej szklanej fiolce
- Asembler Arm64 dla Windows. Podstawowa wiedza w kapsułce
- Common Intermediate Language i kod generowany dynamicznie dla .NET
- ethical.blue Magazine Volume 2. Podatności (ang. vulnerability)