Skupiona głównie na Azji, ta nowa grupa cyberszpiegowska używa nieudokumentowanych narzędzi, w tym steganograficznego wyodrębniania ładunków PowerShell z plików PNG
Badacze z firmy ESET odkryli niedawno ataki ukierunkowane, które wykorzystywały nieudokumentowane narzędzia przeciwko różnym znanym firmom i samorządom, głównie w Azji. Ataki te zostały przeprowadzone przez wcześniej nieznaną grupę szpiegowską, którą nazwaliśmy Worok i która jest aktywna od co najmniej 2020 roku. Zestaw narzędzi Woroka zawiera program ładujący C++ CLRLoad, backdoora PowerShell PowHeartBeat oraz program ładujący C# PNGLoad, który wykorzystuje steganografię do wyodrębniania ukrytych złośliwych ładunki z plików PNG.
Kim jest Worok?
Podczas ProxyShell (CVE-2021-34523) zaobserwowaliśmy ujawnienie podatności na początku 2021 r. aktywność z różnych grup APT. Jeden wykazywał cechy wspólne z TA428:
- Czasy aktywności
- Branże docelowe
- Korzystanie z ShadowPad
Reszta zestawu narzędzi jest zupełnie inna: na przykład TA428 wzięła udział w Kompromis w stanie Desktop w 2020 r. Uważamy, że powiązania nie są wystarczająco silne, aby uznać Worok za tę samą grupę co TA428, ale obie grupy mogą mieć wspólne narzędzia i mieć wspólne interesy. Postanowiliśmy stworzyć klaster i nazwać go Worok. Nazwa została wybrana po muteksie w programie ładującym używanym przez grupę. Z tą grupą powiązano następnie dalszą działalność z wariantami tych samych narzędzi. Zgodnie z telemetrią ESET, Worok jest aktywny od końca 2020 roku i nadal jest aktywny w chwili pisania tego tekstu.
Pod koniec 2020 roku Worok atakował rządy i firmy w wielu krajach, w szczególności:
- Firma telekomunikacyjna w Azji Wschodniej
- Bank w Azji Centralnej
- Firma z branży morskiej w Azji Południowo-Wschodniej
- Jednostka rządowa na Bliskim Wschodzie
- Prywatna firma w Afryce Południowej
Nastąpiła znaczna przerwa w obserwowanych operacjach od 2021-05 do 2022-01, ale aktywność Woroków powróciła w 2022-02, ukierunkowana na:
- Firma energetyczna w Azji Centralnej
- Podmiot sektora publicznego w Azji Południowo-Wschodniej
Rysunek 1 przedstawia wizualną mapę termiczną docelowych regionów i branż.
Biorąc pod uwagę profile celów i narzędzia, które widzieliśmy przeciwko tym ofiarom, uważamy, że głównym celem Woroka jest kradzież informacji.
Analiza techniczna
Chociaż większość początkowych dostępów jest nieznana, w niektórych przypadkach w latach 2021 i 2022 widzieliśmy exploity wykorzystywane przeciwko lukom ProxyShell. W takich przypadkach zazwyczaj webshelle są ładowane po wykorzystaniu tych luk w celu zapewnienia trwałości w sieci ofiary. Następnie operatorzy używali różnych implantów, aby uzyskać dalsze możliwości.
Po uzyskaniu dostępu operatorzy wdrożyli wiele publicznie dostępnych narzędzi rozpoznawczych, w tym: Mimikatz, Dżdżownica, Jerzy, Skanowanie NBT, a następnie wdrożyły własne implanty: program ładujący pierwszego etapu, a następnie program ładujący .NET drugiego etapu (PNGLoad). Niestety nie udało nam się odzyskać żadnego z ostatecznych ładunków. W 2021 pierwszym etapem programu ładującego był zespół CLR (CLRLoad), natomiast w 2022 został on w większości przypadków zastąpiony w pełni funkcjonalnym backdoorem PowerShell (PowHeartBeat) – oba łańcuchy wykonania przedstawiono na rysunku 2. Te trzy narzędzia są szczegółowo opisane w kolejnych podrozdziałach.
CRLLoad: moduł ładujący zespół CLR
CRLLoad to ogólny system Windows PE, który widzieliśmy zarówno w wersjach 32-, jak i 64-bitowych. Jest to loader napisany w C++, który ładuje następny etap (PNGLoad), który musi być Zespół środowiska uruchomieniowego języka wspólnego (CLR) Plik DLL. Ten kod jest ładowany z pliku znajdującego się na dysku w legalnym katalogu, prawdopodobnie po to, by zmylić ofiary lub osoby odpowiadające na incydenty, myśląc, że jest to legalne oprogramowanie.
Niektóre próbki CRLLoad zaczynają się od dekodowania pełnej ścieżki pliku, którego zawartość zostaną załadowane w następnym etapie. Te ścieżki plików są zakodowane za pomocą jednobajtowego XOR, z innym kluczem w każdej próbce. Dekodowane lub jawne, te ścieżki plików są bezwzględne, a następujące to te, które napotkaliśmy:
- C:Pliki programówVMwareVMware ToolsVMware VGAuthxsec_1_5.dll
- C:Pliki programówUltraViewermsvbvm80.dll
- C:Pliki programówInternet ExplorerJsprofile.dll
- C:Program FilesWinRarRarExtMgt.dll
- C:Pliki programów (x86)Foxit SoftwareFoxit Readerlucenelib.dll
Następnie tworzony jest muteks i w każdej próbce widzieliśmy inną nazwę. Program ładujący sprawdza ten mutex; jeśli zostanie znaleziony, kończy działanie, ponieważ program ładujący jest już uruchomiony. W jednej z próbek mutex Wo0r0KGWhYGO został napotkany, co dało grupie nazwę Worok.
Następnie CLRLoad ładuje zestaw CLR z prawdopodobnie zdekodowanej ścieżki pliku. Jako kod niezarządzany CRLLoad osiąga to poprzez CorBindToRuntimeEx Wywołania Windows API w 32-bitowych wariantach lub CLRCreateInstancja wywołania w wariantach 64-bitowych.
PowHeartBeat: backdoor PowerShell
PowHeartBeat to w pełni funkcjonalny backdoor napisany w PowerShell, zaciemniony przy użyciu różnych technik, takich jak kompresja, kodowanie i szyfrowanie. Na podstawie telemetrii ESET uważamy, że PowHeartBeat zastąpił CRLLoad w nowszych kampaniach Woroka jako narzędzie używane do uruchamiania PNGLoad.
Pierwsza warstwa kodu backdoora składa się z wielu fragmentów kodu PowerShell zakodowanego w base64. Po zrekonstruowaniu ładunku jest on wykonywany przez IEX. Po zdekodowaniu wykonywana jest kolejna warstwa zaciemnionego kodu, co widać na rysunku 3.
Druga warstwa backdoora pierwsza base64 dekoduje następną warstwę jego kodu, który jest następnie odszyfrowywany za pomocą Potrójny DES (tryb CBC). Po odszyfrowaniu ten kod jest dekompresowany za pomocą gzip algorytm, dając w ten sposób trzecią warstwę kodu PowerShell, która jest faktycznym backdoorem. Jest podzielony na dwie główne części: konfigurację i obsługę poleceń backdoora.
Główna warstwa kodu backdoora jest również napisana w PowerShell i używa protokołu HTTP lub ICMP do komunikacji z serwerem C&C. Działa tak, jak pokazano na rysunku 4.
systemu
Konfiguracja zawiera wiele pól, w tym numer wersji, opcjonalną konfigurację proxy i adres C&C. Tabela 1 opisuje znaczenie pól konfiguracyjnych w różnych obserwowanych przez nas wersjach.
Tabela 1. Znaczenie pól konfiguracji
Nazwa pola | Opis |
---|---|
nouse / ikuyrtydyfg (inne próbki) |
Nie używany. |
Identyfikator klienta | Identyfikator Klienta, wykorzystywany w następujących celach: · Jako wartość przy konstruowaniu Nagłówek pliku cookie do komunikacji C&C. · Jako artefakt kryptograficzny do szyfrowania przesyłanych danych. |
Wersja | Numer wersji PowHeartBeat. |
ExecTimes | Liczba dozwolonych prób wykonania przy wydawaniu UruchomCmd (polecenie uruchomione). |
Agent użytkownika | Agent użytkownika używany do komunikacji z C&C. |
Referer | Referer nagłówek używany do komunikacji C&C. |
AkceptujKodowanie | Nie używany. |
Identyfikator klienta cookie Identyfikator zadania cookie CookieTerminalId |
Wartości użyte do skonstruowania Cookies nagłówek komunikacji C&C. |
URLHttps | Protokół używany do komunikacji C&C. |
Domena URL Adres IP domeny |
Adres URL, domena(y) lub adres IP używany jako serwer C&C. Jeśli domeny nie jest pusty, jest wybierany zamiast Adres IP. W innych sprawach, Adres IP jest zajęty. |
UrlWyślijSerceBeat | Ścieżka URL używana, gdy backdoor prosi serwer C&C o polecenia. |
UrlWyślijWynik | Ścieżka URL używana, gdy backdoor wysyła wyniki polecenia z powrotem do serwera C&C. |
PobierzUrl | Pełny adres URL używany przez PowHeartBeat do żądania poleceń z serwera C&C. Jest to konkatenacja powyższych elementów adresu URL. |
UmieśćUrl | Taki sam jak PobierzUrl ale używany do wysyłania wyników polecenia z powrotem do serwera C&C. |
obecna ścieżka | Nie używany. |
Flaga Włącz proxy | Flaga wskazująca, czy backdoor musi korzystać z serwera proxy, czy nie, aby komunikować się z serwerem C&C. |
Proxyg | Adres proxy do użycia, jeśli Flaga Włącz proxy jest ustawione na $prawda. |
Przedział | Czas uśpienia skryptu w sekundach między żądaniami GET. |
Podstawowa ścieżka konfiguracji | Ścieżka do opcjonalnego pliku konfiguracyjnego zawierającego Czas pracy, Przestój, Domyślny przedział, domeny. Te wartości zostaną nadpisane, jeśli plik będzie obecny. |
Czas pracy | Pora dnia, od której backdoor zaczyna działać, co oznacza, że zaczyna wysyłać żądania GET do serwera C&C. |
Przestój | Pora dnia, do której backdoor może działać, czyli czas, w którym przestaje wysyłać żądania do serwera C&C. |
Indeks domeny | Indeks bieżącej nazwy domeny, która ma być używana do komunikacji z serwerem C&C. W przypadku, gdy żądanie zwraca komunikat o błędzie inny niż 304 ("Niezmodyfikowany"), Indeks domeny jest zwiększony. |
Sekretny klucz | Klucz używany do odszyfrowania/szyfrowania konfiguracji. Konfiguracja jest szyfrowana wielobajtowym XOR. |
Jeśli log | Nie używany. |
Jeśli ścieżka do pliku dziennika | Flaga wskazująca, czy rejestrowanie jest włączone. |
ścieżka dziennika | Ścieżka do pliku dziennika. |
Plik proxy | Ścieżka do pliku opcjonalnej konfiguracji proxy. Jeśli jest pusty lub nie został znaleziony w systemie plików, backdoor pobiera ustawienia proxy użytkownika z wartości rejestru HKCUOprogramowanieMicrosoftWindowsAktualna wersjaUstawienia internetoweProxyServer . |
JeśliKonfig | Flaga wskazująca, czy użyć pliku konfiguracyjnego. |
Rysunek 5 przedstawia przykład konfiguracji wyodrębnionej z próbki PowHeartBeat (SHA-1: 757ABA12D04FD1167528FDD107A441D11CD8C427).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$Script:nouse = 100; if(Test-Path $MyInvocation.MyCommand.Path){Remove-item $MyInvocation.MyCommand.Path -Force;} $Script:ClientId = “83”; $Script:Version = “2.1.3.0003”; $Script:ExecTimes = 10; $Script:UserAgent = “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3487.100 Safari/537.36”; $Script:Referer = “www.adobe.com”; $Script:AcceptEncoding = “text/html,app1ication/xhtml+xml,app1ication/xml;q=0.9,*/*;q=0.8”; $Script:CookieClientId = “s_ecid”; $Script:CookieTaskId = “aam_uuid”; $Script:CookieTerminalId = “AAMC_adobe_0”; $Script:UrlHttps = “http://”; $Script:UrlDomain= ” 118.193.78[.]22:443″; $Script:UrlSendHeartBeat = “/latest/AdobeMessagingClient.js”; $Script:UrlSendResult = “/content/dam/offers-homepage/homepage.jpg”; $Script:GetUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendHeartBeat; $Script:PutUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendResult; $Script:currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition; $Script:ProxyEnableFlag = $false; $Script:Proxymsg; $Script:Interval = 10 ; $Script:BasicConfigPath = “C:ProgramDataunins.dat”; $Script:UpTime = 0; $Script:DownTime = 24; $Script:Domains; $Script:DomainIndex; $Script:SecretKey = “###ConfigKey###”; #$Script:IfLog = $true; $Script:IfLogFilePath = “C:ProgramDatatpncp.dat”; $Script:logpath = “C:ProgramDataunins000.dat”; $Script:ProxyFile = “C:ProgramDatahwrenalm.dat”; $Script:IfConfig = $false; |
Rysunek 5. Przykład konfiguracji
Szyfrowanie danych
PowHeartBeat szyfruje logi i dodatkową zawartość pliku konfiguracyjnego.
Zawartość pliku dziennika jest szyfrowana za pomocą wielobajtowego XOR z kluczem określonym w postaci zwykłego tekstu w próbce. Co ciekawe, Identyfikator klienta jest używany jako sól dla indeksu w tablicy kluczy. Kluczem jest 256-bajtowa tablica, która była identyczna w każdej napotkanej próbce. Dodatkowa zawartość pliku konfiguracyjnego jest szyfrowana za pomocą wielobajtowego XOR o wartości od Sekretny klucz jako jego klucz.
Komunikacja C&C
PowHeartBeat używał protokołu HTTP do komunikacji z C&C do wersji 2.4, a następnie przełączył się na ICMP. W obu przypadkach komunikacja nie jest szyfrowana.
HTTP
W nieskończonej pętli backdoor wysyła żądanie GET do serwera C&C, prosząc o wydanie polecenia. Zaszyfrowana odpowiedź jest odszyfrowywana przez backdoora, który przetwarza polecenie i zapisuje dane wyjściowe polecenia w pliku, którego zawartość jest następnie wysyłana do serwera C&C za pośrednictwem żądania POST.
Format żądań GET jest następujący:
GET <UrlSendHeartBeat> HTTP/1.1 User-Agent: <UserAgent> Referer: <Referer> Host: <Domain> Cookie: <CookieClientId>=<ClientId> Connection: close |
Zwróć uwagę, że żądanie jest tworzone przy użyciu tytułowych pól konfiguracji.
W odpowiedzi z serwera C&C trzeci bajt treści to identyfikator polecenia, który wskazuje polecenie, które ma zostać przetworzone przez backdoora. Nazwiemy to polecenie_id. Pozostała zawartość odpowiedzi zostanie przekazana jako argument do przetwarzanego polecenia. Ta treść jest zaszyfrowana algorytmem pokazanym na rysunku 6, identyfikator zadania będąca wartością pliku cookie o nazwie Identyfikator zadania cookiewartość z konfiguracji.
1 2 3 4 5 6 7 8 9 10 |
o[int] $pos = $taskId % 256; for ($i = 0; $i -lt $tmpBytes.Value.Length; $i++) { $pos = $pos + $clientId; if ($pos -ge 256) { $pos = $pos % 256; } $tmpBytes.Value[$i] = [byte]($tmpBytes.Value[$i] -bxor $hexEnc[$pos]); } |
Rysunek 6. Algorytm szyfrowania danych treści żądań
Odpowiedź z serwera C&C zawiera również inne ciasteczko, którego nazwa jest określona przez backdoora CookieTerminalId zmienna konfiguracyjna. Wartość tego pliku cookie jest powtarzana w żądaniu POST z tylnego wejścia i nie może być pusta. Po wykonaniu polecenia backdoora PowHeartBeat wysyła wynik jako żądanie POST do serwera C&C. Wynik jest wysyłany jako plik o nazwie .png.
ICMP
Począwszy od wersji 2.4 PowHeartBeat, HTTP został zastąpiony przez ICMP, wysyłał pakiety z limitem czasu wynoszącym sześć sekund i niefragmentowany. Komunikacja przez ICMP jest najprawdopodobniej sposobem na uniknięcie wykrycia.
Nie ma większych zmian w wersjach 2.4 i późniejszych, ale zauważyliśmy pewne modyfikacje w kodzie:
- PowHeartBeat wysyła pakiet pulsu w każdej pętli zawierającej ciąg ABCDEFGHIJKLMNOPQRSTU VWXYZ, przed żądaniem polecenia. Informuje to serwer C&C, że backdoor jest gotowy do odbierania poleceń.
- Żądania pobrania poleceń wykonywanych przez backdoora zawierają ciąg abcdefghijklmnop.
Pakiety bicia serca mają format opisany na rysunku 7.
Różnica pomiędzy Identyfikator klienta i flaga klienta jest to, że Identyfikator klienta różni się w każdej próbce, podczas gdy flaga klienta jest taki sam w każdej próbce, która używa ICMP. flaga bicia serca wskazuje, że backdoor wysyła puls. Odpowiedź z serwera C&C ma format opisany na rysunku 8.
flaga tutaj wskazuje, czy istnieje polecenie do wydania backdoorowi. Żądania pobrania poleceń mają format opisany na rysunku 9.
Zwróć uwagę, że tryb ICMP backdoora umożliwia odbieranie nieograniczonej ilości danych podzielonych na porcje i zmienne długość danych, aktualna pozycja i długość całkowita służą do śledzenia przesyłanych danych. Odpowiedzi na te prośby mają format opisany na rysunku 10.
Podobnie jak w odpowiedziach HTTP, identyfikatorem polecenia jest trzeci bajt dane.
Po siedmiu kolejnych odpowiedziach ICMP zawierających pustą lub niespójnie sformatowaną treść, transfery między backdoorem a serwerem C&C są uważane za zakończone.
W przypadku żądań wysłania wyniku wydanego polecenia do serwera C&C tryb serwera zmienia się na tryb post, a końcowy ciąg (abcdefghijklmnop) zmienia się dla danych wynikowych.
Polecenia tylnego wejścia
PowHeartBeat ma różne możliwości, w tym wykonywanie poleceń/procesów i manipulację plikami. W tabeli 2 wymieniono wszystkie polecenia obsługiwane przez różne analizowane próbki.
Tabela 2. Opisy poleceń PowHeartBeat
Imię | Identyfikator polecenia | Opis |
---|---|---|
Cmd | 0x02 | Wykonaj polecenie PowerShell. |
Exe | 0x04 | Wykonaj polecenie jako a wygląda tak. |
Udostępnianie pliku | 0x06 | Prześlij plik na zaatakowaną maszynę. Zawartość pliku jest skompresowana w formacie gzip. |
Pobieranie pliku | 0x08 | Pobierz plik z zaatakowanej maszyny i zwróć ścieżkę pliku, długość pliku, czas utworzenia, czas dostępu oraz zawartość pliku na serwer C&C. |
Widok pliku | 0x0A | Uzyskaj informacje o plikach z określonego katalogu, w szczególności: · Nazwy plików · Atrybuty plików · Czasy ostatniego zapisu · Zawartość pliku |
Usuń plik | 0x0C | Usuń plik. |
Zmień nazwę pliku | 0x0E | Zmień nazwę lub przenieś plik. |
Zmień reż | 0x10 | Zmień bieżącą lokalizację roboczą backdoora. |
Informacia | 0x12 | Uzyskaj kategorię informacji zgodnie z podanym argumentem: · "Podstawowe informacje": Identyfikator klienta, Wersja, nazwa hosta, adresy IP, explorer.exe informacje o wersji i rozmiarze, system operacyjny (architektura i flaga wskazująca, czy maszyna jest serwerem), Przedział, bieżący katalog, informacje o dysku (nazwa, typ, wolne miejsce i całkowity rozmiar), aktualny czas · „Informacje o przedziale czasowym”: Przedział i aktualny czas · „Informacje o domenie”: odszyfrowana zawartość pliku konfiguracyjnego |
Config | 0x14 | Zaktualizuj zawartość pliku konfiguracyjnego i ponownie załaduj konfigurację. |
N / A | 0x63 | Wyjście tylnymi drzwiami. |
W przypadku błędów po stronie backdoora, backdoor używa określonego identyfikatora komendy 0x00 w żądaniu POST do serwera C&C, co wskazuje na wystąpienie błędu.
Zwróć uwagę, że przed wysłaniem informacji z powrotem do serwera C&C, dane są kompresowane w formacie gzip.
PNGLoad: ładowarka steganograficzna
PNGLoad to ładunek drugiego etapu wdrożony przez Worok w zaatakowanych systemach i, zgodnie z telemetrią ESET, ładowany przez CRLLoad lub PowHeartBeat. Chociaż nie widzimy żadnego kodu w PowHeartBeat, który bezpośrednio ładuje PNGLoad, backdoor ma możliwość pobierania i wykonywania dodatkowych ładunków z serwera C&C, co jest prawdopodobnym sposobem, w jaki osoby atakujące wdrożyły PNGLoad w systemach zaatakowanych przez PowHeartBeat. PNGLoad to program ładujący, który używa bajtów z plików PNG do tworzenia ładunku do wykonania. Jest to 64-bitowy plik wykonywalny .NET – zaciemniony za pomocą Reaktor .NET – który podszywa się pod legalne oprogramowanie. Na przykład Rysunek 11 pokazuje nagłówki CLR przykładu maskującego się jako WinRAR DLL.
Po usunięciu zaciemnienia obecna jest tylko jedna klasa. W tej klasie jest GłównaŚcieżka atrybut zawierający ścieżkę katalogu, który backdoor przeszukuje, łącznie z jego podkatalogami, w poszukiwaniu plików z . PNG przedłużenie, jak pokazano na rysunku 12.
Każdy . PNG plik zlokalizowany przez to wyszukiwanie GłównaŚcieżka jest następnie sprawdzany pod kątem zawartości osadzonej steganograficznie. Po pierwsze, najmniej znaczący bit wartości R (czerwony), G (zielony), B (niebieski) i A (alfa) każdego piksela jest pobierany i składany w buforze. Jeśli pierwsze osiem bajtów tego bufora pasuje do magicznej liczby widocznej na rysunku 13, a następna ośmiobajtowa wartość control nie będzie pusta, plik przejdzie kontrolę zawartości steganograficznej PNGLoad. W przypadku takich plików przetwarzanie jest kontynuowane z pozostałą częścią bufora odszyfrowaną wielobajtowym XOR przy użyciu klucza przechowywanego w PNGLoad Tajne bajty kluczy atrybut, a następnie odszyfrowany bufor jest dekompresowany w formacie gzip. Oczekuje się, że wynikiem będzie skrypt PowerShell, który jest uruchamiany natychmiast.
Co ciekawe, operacje wykonywane przez PNGLoad są rejestrowane w pliku, którego ścieżka jest zapisana w zmiennej Ścieżka do pliku dziennika. Operacje są rejestrowane tylko wtedy, gdy istnieje plik, którego ścieżka jest określona przez zmienną wewnętrzną Jeśli ścieżka do pliku dziennika.
Nie udało nam się uzyskać próbki . PNG używany wraz z PNGLoad, ale sposób działania PNGLoad sugeruje, że powinien on działać z prawidłowymi plikami PNG. Aby ukryć złośliwy ładunek, Worok używa obiektów Bitmap w C#, które pobierają tylko informacje o pikselach z plików, a nie metadane plików. Oznacza to, że Worok może ukrywać swoje złośliwe ładunki w prawidłowych, nieszkodliwie wyglądających obrazach PNG, a tym samym ukrywać się na widoku.
Wnioski
Worok to grupa cyberszpiegowska, która opracowuje własne narzędzia, a także wykorzystuje istniejące narzędzia, aby narażać swoje cele. Uważamy, że operatorzy chcą kradzieży informacji od swoich ofiar, ponieważ koncentrują się na znanych podmiotach w Azji i Afryce, atakując różne sektory, zarówno prywatne, jak i publiczne, ale ze szczególnym naciskiem na podmioty rządowe. Czasy aktywności i zestaw narzędzi wskazują na możliwe powiązania z TA428, ale dokonujemy tej oceny z małą pewnością. Ich niestandardowy zestaw narzędzi zawiera dwa programy ładujące — jeden w C++ i jeden w C# .NET — oraz jeden backdoor PowerShell. Chociaż nasza widoczność jest ograniczona, mamy nadzieję, że rzucenie światła na tę grupę zachęci innych badaczy do dzielenia się informacjami o tej grupie.
Firma ESET Research oferuje teraz także prywatne raporty analityczne APT i źródła danych. W przypadku jakichkolwiek pytań dotyczących tej usługi, odwiedź Analiza zagrożeń firmy ESET strona.
IOCs
Akta
SHA-1 | Nazwa pliku | Nazwa wykrywania ESET | Komentarz |
---|---|---|---|
3A47185D0735CDECF4C7C2299EB18401BFB328D5 | scenariusz | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003. |
27ABB54A858AD1C1FF2863913BDA698D184E180D | scenariusz | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003. |
678A131A9E932B9436241402D9727AA7D06A87E3 | scenariusz | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003. |
757ABA12D04FD1167528FDD107A441D11CD8C427 | scenariusz | PowerShell/PowHeartBeat.B | PowHeartBeat 2.1.3.0003. |
54700A48D934676FC698675B4CA5F712C0373188 | scenariusz | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002. |
C2F53C138CB1B87D8FC9253A7088DB30B25389AF | scenariusz | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002. |
C2F1954DE11F72A46A4E823DE767210A3743B205 | tmp.ps1 | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0004. |
CE430A27DF87A6952D732B4562A7C23BEF4602D1 | tmp.ps1 | PowerShell/PowHeartBeat.A | PowHeartBeat 2.1.3.0004. |
EDE5AB2B94BA85F28D5EE22656958E4ECD77B6FF | scenariusz | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003. |
4721EEBA13535D1EE98654EFCE6B43B778F13126 | vix64.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
728A6CB7A150141B4250659CF853F39BFDB7A46C | RarExtMgt.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
864E55749D28036704B6EA66555A86527E02AF4A | jsprofile.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
8DA6387F30C584B5FD3694A99EC066784209CA4C | vssxml.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
AA60FB4293530FBFF00D200C0D44EEB1A17B1C76 | xsec_1_5.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
B2EAEC695DD8BB518C7E24C4F37A08344D6975BE | MSVBVM80.DLL | MSIL/PNGLoader.A | Ładowarka PNG. |
CDB6B1CAFEE098615508F107814179DEAED1EBCF | lucenelib.dll | MSIL/PNGLoader.A | Ładowarka PNG. |
4F9A43E6CF37FF20AE96E564C93898FDA6787F7D | vsstrace.dll | Win64/CRLLoad.C | CLRLload. |
F181E87B0CD6AA4575FD51B9F868CA7B27240610 | plik szyfrujący.dll | Win32/CRLLoad.A | CLRLload. |
4CCF0386BDE80C339EFE0CC734CB497E0B08049C | plik szyfrujący.dll | Win32/CRLLoad.A | CLRLload. |
5CFC0D776AF023DCFE8EDED5CADA03C6D7F9C244 | wlbsctrl.dll | Win64/CRLLoad.E | CLRLload. |
05F19EBF6D46576144276090CC113C6AB8CCEC08 | wlbsctrl.dll | Win32/CRLLoad.A | CLRLload. |
A5D548543D3C3037DA67DC0DA47214B2C2B15864 | secur32.dll | Win64/CRLLoad.H | CLRLload. |
CBF42DCAF579AF7E6055237E524C0F30507090F3 | dbghelp.dll | Win64/CRLLoad.C | CLRLload. |
Ścieżki plików
Niektóre z GłównaŚcieżka, Ścieżka do pliku dziennika i Jeśli ścieżka do pliku dziennika wartości, które napotkaliśmy w przykładach PNGLoad:
GłównaŚcieżka | Ścieżka do pliku dziennika | Jeśli ścieżka do pliku dziennika |
---|---|---|
C:Pliki programówVMwareVMware Tools | C:Pliki programówVMwareVMware ToolsVMware VGAuthreadme.txt | C:Pliki programówVMwareVMware ToolsVMware VGAuthVMWSU_V1_1.dll |
C:Pliki programówWinRar | C:Program FilesWinRarrrinstall.log | C: Program FilesWinRardes.dat |
C: Pliki programu UltraViewer | C: Program Files UltraViewer (CopyRights.dat) | C:Pliki programówUltraVieweruvcr.dll |
Sieć
Domena | IP |
---|---|
żaden | 118.193.78[.]22 |
żaden | 118.193.78[.]57 |
airplane.travel-commercials[.]agencja | 5.183.101[.]9 |
central.suhypercloud[.]org | 45.77.36[.]243 |
muteksy
W próbkach CRLLoad napotkane nazwy muteksów to:
aB82UduGX0EX
ad8TbUIZl5Ga
Mr2PJVxbIBD4
oERiQtKLgPgK
U37uxsCsA4Xm
Wo0r0KGWhYGO
xBUjQR2vxYTz
zYCLBTydzieńRX3t
3c3401ad-e77d-4142-8db5-8eb5483d7e41
9xvzMsaWqxMy
Obszerną listę wskaźników kompromisu (IoC) i próbek można znaleźć w nasze repozytorium GitHub.
Techniki SKOŚNE ATT&CK
Ten stół został zbudowany przy użyciu wersja 11 ramy MITER ATT&CK.
Taktyka | ID | Imię | Opis |
---|---|---|---|
Rozpoznawczy | T1592.002 | Zbierz informacje o gospodarzu ofiary: Oprogramowanie | PowHeartBeat zbiera explorer.exe's informacje. |
T1592.001 | Zbierz informacje o gospodarzu ofiary: Sprzęt | PowHeartBeat zbiera informacje o dyskach. | |
T1590.005 | Zbierz informacje o sieci ofiar: adresy IP | PowHeartBeat zbiera adresy IP zhakowanego komputera. | |
Rozwój zasobów | T1583.004 | Uzyskaj infrastrukturę: serwer | Worok korzysta z własnych serwerów C&C. |
T1588.002 | Uzyskaj możliwości: Narzędzie | Worok wdrożył wiele publicznie dostępnych narzędzi na zaatakowanych maszynach. | |
T1583.001 | Zdobądź infrastrukturę: domeny | Worok zarejestrował domeny w celu ułatwienia komunikacji i stagingu C&C. | |
T1588.005 | Zdobądź możliwości: Exploity | Worok wykorzystał lukę ProxyShell. | |
T1587.001 | Rozwijanie możliwości: złośliwe oprogramowanie | Worok opracował własne złośliwe oprogramowanie: CLRLoad, PNGLoad, PowHeartBeat. | |
T1587.003 | Rozwijanie możliwości: Certyfikaty cyfrowe | Worok stworzył certyfikaty Let's Encrypt SSL, aby umożliwić wzajemne uwierzytelnianie TLS dla złośliwego oprogramowania. | |
Egzekucja | T1059.001 | Interpreter poleceń i skryptów: PowerShell | PowHeartBeat jest napisany w PowerShell. |
Uporczywość | T1505.003 | Składnik oprogramowania serwera: powłoka internetowa | Worok używa webshell Jerzy. |
Unikanie obrony | T1140 | Rozszyfruj/dekoduj pliki lub informacje | Worok używa różnych niestandardowych schematów opartych na XOR do szyfrowania ciągów i dzienników w PowHeartBeat, PNGLoad i CLRLoad. |
T1036.005 | Maskarada: Dopasuj legalną nazwę lub lokalizację | Próbki PNGLoad są instalowane w legalnie wyglądających katalogach VMWare. | |
Dostęp do poświadczeń | T1003.001 | Zrzucanie poświadczeń systemu operacyjnego: pamięć LSASS | Worok używa Mimikatz do zrzucania poświadczeń z pamięci LSASS. |
odkrycie | T1082 | Wykrywanie informacji o systemie | PowHeartBeat zbiera informacje o systemie operacyjnym. |
T1083 | Wykrywanie plików i katalogów | PowHeartBeat może wyświetlać listę plików i katalogów. | |
T1046 | Wykrywanie usług sieciowych | Zastosowania woroka NbtSkan w celu uzyskania informacji o sieci na zaatakowanych maszynach. | |
T1124 | Wykrywanie czasu systemowego | PowHeartBeat zbiera informacje o czasie ofiary. | |
Collection | T1005 | Dane z systemu lokalnego | PowHeartBeat zbiera dane z lokalnego systemu. |
T1560.002 | Archiwizuj zebrane dane: Archiwum przez bibliotekę | PowHeartBeat gzip kompresuje dane przed wysłaniem ich na serwer C&C. | |
Dowodzenia i kontroli | T1071.001 | Protokół warstwy aplikacji: protokoły internetowe | Niektóre warianty PowHeartBeat używają HTTP jako protokołu komunikacji z serwerem C&C. |
T1090.001 | Pełnomocnik: Pełnomocnik wewnętrzny | PowHeartBeat obsługuje konfigurację proxy na komputerze ofiary. | |
T1001.002 | Zaciemnianie danych: steganografia | PNGLoad wyodrębnia wartości pikseli z . PNG pliki do rekonstrukcji ładunków. | |
T1573.002 | Szyfrowany kanał: kryptografia asymetryczna | PowHeartBeat obsługuje komunikację HTTPS z serwerem C&C. | |
T1095 | Protokół warstwy nieaplikacyjnej | Niektóre warianty PowHeartBeat wykorzystują ICMP jako protokół komunikacyjny z serwerem C&C. | |
T1132.001 | Kodowanie danych: kodowanie standardowe | Worok używa kodowania XOR w PowHeartBeat i PNGLoad. | |
T1132.002 | Kodowanie danych: niestandardowe kodowanie | Worok używa algorytmów kodowania XOR, które wykorzystują dodatkową sól. | |
Exfiltracja | T1041 | Eksfiltracja przez kanał C2 | PowHeartBeat wykorzystuje swój kanał komunikacji C&C do wydobywania informacji. |
- blockchain
- pomysłowość
- portfele kryptowalutowe
- krypto-wymiana
- bezpieczeństwo cybernetyczne
- cyberprzestępcy
- Bezpieczeństwo cybernetyczne
- Departament Bezpieczeństwa Wewnętrznego
- cyfrowe portfele
- Badania ESET
- zapora
- Kaspersky
- malware
- Mcafee
- NexBLOC
- plato
- Platon Ai
- Analiza danych Platona
- Gra Platona
- PlatoDane
- platogaming
- VPN
- Żyjemy w bezpieczeństwie
- zabezpieczenia stron internetowych
- zefirnet