OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS

W marcu 2019 r. do VirusTotal, popularnej usługi skanowania online, przesłano nową próbkę złośliwego oprogramowania dla systemu macOS od cybergrupy OceanLotus. Plik wykonywalny backdoora ma te same możliwości, co poprzednia wersja badanego przez nas szkodliwego oprogramowania dla systemu macOS, ale jego struktura uległa zmianie i jego wykrycie stało się trudniejsze. Niestety nie udało nam się znaleźć kroplomierza powiązanego z tą próbką, więc nie znamy jeszcze wektora infekcji.

Niedawno opublikowaliśmy post o OceanLotus oraz jak operatorzy starają się zapewnić trwałość, przyspieszyć wykonywanie kodu i zminimalizować obciążenie systemów Windows. Wiadomo również, że ta grupa cybernetyczna ma również komponent dla systemu macOS. W tym poście szczegółowo opisano zmiany w najnowszej wersji szkodliwego oprogramowania dla systemu macOS w porównaniu z poprzednią wersją (opisane przez Trend Micro), a także opisuje, w jaki sposób można zautomatyzować deszyfrowanie ciągów znaków podczas analizy przy użyciu interfejsu API IDA Hex-Rays.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS

Analiza

Kolejne trzy części opisują analizę próbki za pomocą skrótu SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Plik nazywa się latarka, produkty antywirusowe ESET wykrywają go jako OSX/OceanLotus.D.

Ochrona przed debugowaniem i piaskownicą

Podobnie jak wszystkie pliki binarne macOS OceanLotus, próbka jest spakowana w formacie UPX, ale większość narzędzi do identyfikacji programu pakującego nie rozpoznaje go jako takiego. Dzieje się tak prawdopodobnie dlatego, że w większości zawierają one sygnaturę zależną od obecności ciągu znaków „UPX”, ponadto sygnatury Mach-O są mniej powszechne i nie są tak często aktualizowane. Ta funkcja utrudnia wykrywanie ładunków statycznych. Co ciekawe, po rozpakowaniu punkt wejścia znajduje się na początku sekcji __cfstring w segmencie .TEXT. Ta sekcja ma atrybuty flagi, jak pokazano na obrazku poniżej.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 1. Atrybuty sekcji MACH-O __cfstring

Jak pokazano na rysunku 2, lokalizacje kodów w sekcji __cfstring pozwala oszukać niektóre narzędzia do demontażu, wyświetlając kod w postaci ciągów znaków.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 2. Kod backdoora wykryty przez IDA jako dane

Po wykonaniu plik binarny tworzy wątek jako moduł zapobiegający debugowaniu, którego jedynym celem jest ciągłe sprawdzanie obecności debugera. Dla tego przepływu:

— Próbuje odczepić dowolny debuger, wywołując ptrace с PT_DENY_ATTACH jako parametr żądania
- Sprawdza, czy niektóre ekskluzywne porty są otwarte, wywołując funkcję task_get_exception_ports
- Sprawdza, czy debugger jest podłączony, jak pokazano na poniższym rysunku, sprawdzając obecność flagi P_TRACED w bieżącym procesie

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 3. Sprawdzanie połączenia debugera za pomocą funkcji sysctl

Jeśli watchdog wykryje obecność debugera, funkcja zostanie wywołana exit. Dodatkowo przykład sprawdza następnie środowisko, uruchamiając dwa polecenia:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

Następnie próbka porównuje zwracaną wartość z zakodowaną na stałe listą ciągów ze znanych systemów wirtualizacji: ak, vmware, VirtualBox lub paralele. Na koniec następne polecenie sprawdza, czy maszyna należy do jednego z następujących „MBP”, „MBA”, „MB”, „MM”, „IM”, „MP” i „XS”. Są to kody modeli systemów, na przykład „MBP” oznacza MacBooka Pro, „MBA” oznacza MacBooka Air itp.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Główne dodatki

Chociaż polecenia backdoora nie zmieniły się od czasu badań Trend Micro, zauważyliśmy kilka innych modyfikacji. Serwery kontroli i kontroli użyte w tym przykładzie są całkiem nowe i zostały utworzone 22.10.2018 r.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

Adres URL zasobu został zmieniony na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Pierwszy pakiet wysłany do serwera C&C zawiera więcej informacji o maszynie hosta, w tym wszystkie dane zebrane przez polecenia zawarte w poniższej tabeli.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS

Oprócz tej zmiany konfiguracji przykład nie korzysta z biblioteki do filtrowania sieci libcurl, ale biblioteka zewnętrzna. Aby go znaleźć, backdoor próbuje odszyfrować każdy plik w bieżącym katalogu przy użyciu AES-256-CBC z kluczem gFjMXBgyXWULmVVVzyxy, uzupełnione zerami. Każdy plik jest odszyfrowywany i zapisywany jako /tmp/store, a próba załadowania jej jako biblioteki odbywa się za pomocą funkcji dlopen. Gdy próba odszyfrowania kończy się pomyślnym połączeniem dlopen, backdoor wyodrębnia wyeksportowane funkcje Boriry и ChadylonV, które najwyraźniej odpowiadają za komunikację sieciową z serwerem. Nie mamy droppera ani innych plików z oryginalnej lokalizacji próbki, więc nie możemy przeanalizować tej biblioteki. Co więcej, ponieważ komponent jest zaszyfrowany, reguła YARA oparta na tych ciągach nie będzie pasować do pliku znalezionego na dysku.

Jak opisano w powyższym artykule, tworzy Identyfikator klienta. Ten identyfikator to skrót MD5 wartości zwracanej przez jedno z następujących poleceń:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (uzyskaj adres MAC)
- nieznany zespół („x1ex72x0a"), który jest używany w poprzednich próbkach

Przed hashowaniem do zwracanej wartości dodawane jest „0” lub „1”, aby wskazać uprawnienia roota. Ten Identyfikator klienta przechowywane w /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, jeśli kod jest uruchamiany jako root lub w ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML we wszystkich pozostałych przypadkach. Plik jest zwykle ukrywany za pomocą funkcji _chflagi, jego znacznik czasu zmienia się za pomocą polecenia touch –t z losową wartością.

Dekodowanie ciągów

Podobnie jak w przypadku poprzednich opcji, ciągi znaków są szyfrowane przy użyciu AES-256-CBC (klucz szesnastkowy: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 dopełnione zerami i IV wypełnione zerami) poprzez funkcję CCCrypt. Klucz zmienił się w porównaniu z poprzednimi wersjami, ale ponieważ grupa nadal używa tego samego algorytmu szyfrowania ciągów, deszyfrowanie można zautomatyzować. Oprócz tego posta udostępniamy skrypt IDA, który wykorzystuje interfejs API Hex-Rays do odszyfrowania ciągów znajdujących się w pliku binarnym. Skrypt ten może pomóc w przyszłej analizie OceanLotus i analizie istniejących próbek, których nie udało nam się jeszcze uzyskać. Skrypt opiera się na uniwersalnym sposobie odbierania argumentów przekazywanych do funkcji. Dodatkowo sprawdza przypisania parametrów. Metodę można ponownie wykorzystać, aby uzyskać listę argumentów funkcji, a następnie przekazać ją do wywołania zwrotnego.

Znajomość prototypu funkcji odszyfrować, skrypt znajduje wszystkie odniesienia do tej funkcji, wszystkie argumenty, następnie odszyfrowuje dane i umieszcza zwykły tekst w komentarzu pod adresem odsyłacza. Aby skrypt działał poprawnie, musi być ustawiony na własny alfabet używany przez funkcję dekodowania base64 oraz musi być zdefiniowana zmienna globalna zawierająca długość klucza (w tym przypadku DWORD, patrz rysunek 4).

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 4. Definicja zmiennej globalnej key_len

W oknie Funkcja możesz kliknąć prawym przyciskiem myszy funkcję deszyfrującą i kliknąć „Wyodrębnij i odszyfruj argumenty”. Skrypt powinien umieścić odszyfrowane linie w komentarzach, jak pokazano na rysunku 5.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 5. Odszyfrowany tekst umieszczany jest w komentarzach

W ten sposób odszyfrowane ciągi znaków są wygodnie umieszczane razem w oknie IDA odnośniki zewnętrzne dla tej funkcji, jak pokazano na rysunku 6.

OceanLotus: aktualizacja złośliwego oprogramowania dla systemu macOS
Rysunek 6. Odnośniki do funkcji f_decrypt

Ostateczną wersję scenariusza można znaleźć pod adresem Repozytorium Github.

Wniosek

Jak już wspomniano, OceanLotus stale ulepsza i aktualizuje swój zestaw narzędzi. Tym razem grupa cybernetyczna ulepszyła szkodliwe oprogramowanie, aby współpracowało z użytkownikami komputerów Mac. Kod nie zmienił się zbytnio, ale ponieważ wielu użytkowników komputerów Mac ignoruje produkty zabezpieczające, ochrona złośliwego oprogramowania przed wykryciem ma drugorzędne znaczenie.

Produkty firmy ESET wykrywały ten plik już w momencie przeprowadzania badań. Ponieważ biblioteka sieciowa używana do komunikacji C&C jest teraz zaszyfrowana na dysku, dokładny protokół sieciowy używany przez atakujących nie jest jeszcze znany.

Wskaźniki kompromisu

Dostępne są również wskaźniki kompromisu oraz atrybuty MITRE ATT&CK GitHub.

Źródło: www.habr.com

Dodaj komentarz