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
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.
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.
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
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.
Oprócz tej zmiany konfiguracji przykład nie korzysta z biblioteki do filtrowania sieci 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
, 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 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ę
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).
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.
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.
Rysunek 6. Odnośniki do funkcji f_decrypt
Ostateczną wersję scenariusza można znaleźć pod adresem
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
Źródło: www.habr.com