Ryuk to jedna z najsłynniejszych opcji oprogramowania ransomware w ciągu ostatnich kilku lat. Odkąd pojawił się po raz pierwszy latem 2018 r., gromadzi się
1. Informacje ogólne
Dokument ten zawiera analizę wariantu ransomware Ryuk, a także moduł ładujący odpowiedzialny za ładowanie szkodliwego oprogramowania do systemu.
Ransomware Ryuk pojawiło się po raz pierwszy latem 2018 roku. Jedną z różnic między Ryukiem a innym oprogramowaniem ransomware jest to, że jego celem jest atakowanie środowisk korporacyjnych.
W połowie 2019 r. grupy cyberprzestępcze zaatakowały ogromną liczbę hiszpańskich firm korzystających z tego oprogramowania ransomware.
Ryż. 1: Fragment El Confidencial dotyczący ataku ransomware Ryuk [1]
Ryż. 2: Wyciąg z El País dotyczący ataku przeprowadzonego przy użyciu oprogramowania ransomware Ryuk [2]
W tym roku Ryuk zaatakował dużą liczbę firm w różnych krajach. Jak widać na poniższych liczbach, najbardziej ucierpiały Niemcy, Chiny, Algieria i Indie.
Porównując liczbę cyberataków, widzimy, że Ryuk dotknął miliony użytkowników i naraził na szwank ogromne ilości danych, powodując poważne straty ekonomiczne.
Ryż. 3: Ilustracja globalnej działalności Ryuka.
Ryż. 4: 16 krajów najbardziej dotkniętych Ryukiem
Ryż. 5: Liczba użytkowników zaatakowanych przez ransomware Ryuk (w milionach)
Zgodnie ze zwykłą zasadą działania takich zagrożeń, to oprogramowanie ransomware po zakończeniu szyfrowania wyświetla ofierze powiadomienie o okupie, który należy zapłacić w bitcoinach na podany adres, aby przywrócić dostęp do zaszyfrowanych plików.
To złośliwe oprogramowanie zmieniło się od czasu jego pierwszego wprowadzenia.
Wariant tego zagrożenia analizowany w tym dokumencie został wykryty podczas próby ataku w styczniu 2020 roku.
Ze względu na swoją złożoność to szkodliwe oprogramowanie jest często przypisywane zorganizowanym grupom cyberprzestępczym, znanym również jako grupy APT.
Część kodu Ryuk wykazuje zauważalne podobieństwo do kodu i struktury innego dobrze znanego oprogramowania ransomware, Hermes, z którym mają one wiele identycznych funkcji. Z tego powodu Ryuk był początkowo powiązany z północnokoreańską grupą Lazarus, która wówczas była podejrzana o tworzenie oprogramowania ransomware Hermes.
Serwis Falcon X CrowdStrike zauważył później, że Ryuk został w rzeczywistości stworzony przez grupę WIZARD SPIDER [4].
Istnieją pewne dowody potwierdzające to założenie. Po pierwsze, to oprogramowanie ransomware było reklamowane w witrynie exploit.in, która jest dobrze znanym rosyjskim rynkiem szkodliwego oprogramowania i była wcześniej powiązana z niektórymi rosyjskimi grupami APT.
Fakt ten wyklucza teorię, że Ryuk mógł zostać opracowany przez grupę Lazarus APT, ponieważ nie pasuje to do sposobu działania grupy.
Ponadto Ryuk był reklamowany jako oprogramowanie ransomware, które nie będzie działać na systemach rosyjskich, ukraińskich i białoruskich. Na takie zachowanie wpływa funkcja występująca w niektórych wersjach Ryuka, która sprawdza język systemu, na którym działa ransomware, i powstrzymuje go, jeśli system obsługuje język rosyjski, ukraiński lub białoruski. Wreszcie, analiza ekspercka maszyny, która została zhakowana przez zespół WIZARD SPIDER, ujawniła kilka „artefaktów”, które rzekomo wykorzystano podczas opracowywania Ryuka jako wariantu oprogramowania ransomware Hermes.
Z drugiej strony eksperci Gabriela Nicolao i Luciano Martins zasugerowali, że oprogramowanie ransomware mogło zostać opracowane przez grupę APT CryptoTech [5].
Wynika to z faktu, że kilka miesięcy przed pojawieniem się Ryuka grupa ta zamieściła na forum tej samej witryny informację, że opracowała nową wersję ransomware Hermes.
Kilku użytkowników forum kwestionowało, czy CryptoTech rzeczywiście stworzył Ryuka. Następnie grupa broniła się, twierdząc, że ma dowody na to, że stworzyła 100% oprogramowania ransomware.
2. Charakterystyka
Zaczynamy od bootloadera, którego zadaniem jest zidentyfikowanie systemu, na którym się znajduje, aby można było uruchomić „poprawną” wersję ransomware Ryuk.
Hash programu ładującego jest następujący:
MD5 A73130B0E379A989CBA3D695A157A495
SHA256 EF231EE1A2481B7E627921468E79BB4369CCFAEB19A575748DD2B664ABC4F469
Jedną z cech tego downloadera jest to, że nie zawiera on żadnych metadanych, tj. Twórcy tego szkodliwego oprogramowania nie umieścili w nim żadnych informacji.
Czasami zawierają błędne dane, aby oszukać użytkownika, aby pomyślał, że korzysta z legalnej aplikacji. Jednakże, jak zobaczymy później, jeśli infekcja nie wiąże się z interakcją użytkownika (jak ma to miejsce w przypadku tego oprogramowania ransomware), wówczas osoby atakujące nie uznają za konieczne wykorzystania metadanych.
Ryż. 6: Przykładowe metadane
Próbkę skompilowano w formacie 32-bitowym, dzięki czemu można ją uruchomić zarówno w systemach 32-bitowych, jak i 64-bitowych.
3. Wektor penetracji
Próbka pobierająca i uruchamiająca Ryuka dostała się do naszego systemu poprzez połączenie zdalne, a parametry dostępu uzyskano poprzez wstępny atak RDP.
Ryż. 7: Rejestr ataków
Atakującemu udało się zdalnie zalogować do systemu. Następnie stworzył plik wykonywalny z naszą próbką.
Ten plik wykonywalny został przed uruchomieniem zablokowany przez rozwiązanie antywirusowe.
Ryż. 8: Blokada wzoru
Ryż. 9: Blokada wzoru
Po zablokowaniu szkodliwego pliku osoba atakująca próbowała pobrać zaszyfrowaną wersję pliku wykonywalnego, co również zostało zablokowane.
Ryż. 10: Zestaw próbek, które atakujący próbował uruchomić
Na koniec próbował pobrać kolejny złośliwy plik poprzez zaszyfrowaną konsolę
PowerShell do ominięcia ochrony antywirusowej. Ale on też został zablokowany.
Ryż. 11: PowerShell z zablokowaną złośliwą zawartością
Ryż. 12: PowerShell z zablokowaną złośliwą zawartością
4. Ładowarka
Po uruchomieniu zapisuje plik ReadMe w folderze % Temp%, co jest typowe dla Ryuka. Ten plik to żądanie okupu zawierające adres e-mail w domenie protonmail, co jest dość powszechne w tej rodzinie szkodliwego oprogramowania: [email chroniony]
Ryż. 13: Żądanie okupu
Podczas działania programu ładującego można zobaczyć, że uruchamia kilka plików wykonywalnych o losowych nazwach. Są one przechowywane w ukrytym folderze OSOBY, ale jeśli opcja nie jest aktywna w systemie operacyjnym "Pokaż ukryte pliki i foldery", wówczas pozostaną ukryte. Co więcej, pliki te są 64-bitowe, w przeciwieństwie do pliku nadrzędnego, który jest 32-bitowy.
Ryż. 14: Pliki wykonywalne uruchamiane przez próbkę
Jak widać na powyższym obrazku, Ryuk uruchamia icacls.exe, który posłuży do modyfikacji wszystkich list ACL (list kontroli dostępu), zapewniając w ten sposób dostęp i modyfikację flag.
Uzyskuje pełny dostęp dla wszystkich użytkowników do wszystkich plików na urządzeniu (/T) niezależnie od błędów (/C) i bez wyświetlania żadnych komunikatów (/Q).
Ryż. 15: Parametry wykonania programu icacls.exe uruchomionego przez próbkę
Należy pamiętać, że Ryuk sprawdza, z której wersji systemu Windows korzystasz. Do tego on
przeprowadza kontrolę wersji za pomocą GetVersionExW, w którym sprawdza wartość flagi Informacje o wersji lpwskazując, czy bieżąca wersja systemu Windows jest nowsza niż Windows XP.
W zależności od tego, czy używasz wersji późniejszej niż Windows XP, program ładujący zapisze się do lokalnego folderu użytkownika - w tym przypadku do folderu %Publiczny%.
Ryż. 17: Sprawdzanie wersji systemu operacyjnego
Zapisywany plik to Ryuk. Następnie uruchamia go, przekazując swój własny adres jako parametr.
Ryż. 18: Wykonaj egzekucję Ryuka za pomocą ShellExecute
Pierwszą rzeczą, którą robi Ryuk, jest otrzymanie parametrów wejściowych. Tym razem istnieją dwa parametry wejściowe (sam plik wykonywalny i adres droppera), które służą do usuwania własnych śladów.
Ryż. 19: Tworzenie procesu
Można również zauważyć, że po uruchomieniu plików wykonywalnych sam się usuwa, nie pozostawiając w ten sposób żadnych śladów swojej obecności w folderze, w którym został wykonany.
Ryż. 20: Usuwanie pliku
5. RYUK
5.1 Obecność
Ryuk, podobnie jak inne złośliwe oprogramowanie, stara się pozostać w systemie tak długo, jak to możliwe. Jak pokazano powyżej, jednym ze sposobów osiągnięcia tego celu jest tajne tworzenie i uruchamianie plików wykonywalnych. Aby to zrobić, najczęstszą praktyką jest zmiana klucza rejestru Bieżąca wersjaUruchom.
W tym przypadku widać, że w tym celu należy uruchomić pierwszy plik VWjRF.exe
(nazwa pliku jest generowana losowo) zostaje uruchomiona cmd.exe.
Ryż. 21: Wykonywanie pliku VWjRF.exe
Następnie wprowadź polecenie BIEGAĆ Z imieniem”svchos". Tak więc, jeśli chcesz w dowolnym momencie sprawdzić klucze rejestru, możesz łatwo przeoczyć tę zmianę, biorąc pod uwagę podobieństwo tej nazwy do svchost. Dzięki temu kluczowi Ryuk zapewnia swoją obecność w systemie. Jeśli system nie jeszcze zainfekowany, po ponownym uruchomieniu systemu plik wykonywalny spróbuje ponownie.
Ryż. 22: Próbka zapewnia obecność w kluczu rejestru
Widzimy również, że ten plik wykonywalny zatrzymuje dwie usługi:
"kreator punktów końcowych audio", który jak sama nazwa wskazuje, odpowiada systemowi audio,
Ryż. 23: Próbka zatrzymuje systemową usługę audio
и Samss, która jest usługą zarządzania kontem. Zatrzymanie tych dwóch usług jest cechą Ryuka. W takim przypadku, jeśli system jest podłączony do systemu SIEM, oprogramowanie ransomware próbuje przerwać wysyłanie do niego
Ryż. 24: Próbka zatrzymuje usługę Samss
5.2 Przywileje
Ogólnie rzecz biorąc, Ryuk zaczyna od poruszania się po sieci lub jest uruchamiany przez inne złośliwe oprogramowanie, np
Wcześniej, jako wstęp do procesu wdrożenia, widzimy, jak on przeprowadza ten proces Podszywać się pod siebie, co oznacza, że zawartość tokenu dostępu zostanie przekazana do strumienia, skąd zostanie natychmiast pobrana za pomocą Pobierz bieżący wątek.
Ryż. 25: Zadzwoń podając się za siebie
Następnie widzimy, że powiąże token dostępu z wątkiem. Widzimy również, że jedna z flag jest Pożądany dostęp, którego można użyć do kontrolowania dostępu, jaki będzie miał wątek. W tym przypadku wartość jaką otrzyma edx powinna wynosić TOKEN_ALL_ACESS lub w przeciwnym wypadku - TOKEN_WRITE.
Ryż. 26: Tworzenie tokena przepływu
Wtedy skorzysta Uprawnienia SeDebug i wykona wywołanie, aby uzyskać uprawnienia do debugowania w wątku, co spowoduje PROCESS_ALL_ACCESS, będzie mógł uzyskać dostęp do dowolnego wymaganego procesu. Teraz, biorąc pod uwagę, że program szyfrujący ma już przygotowany strumień, pozostaje tylko przejść do ostatniego etapu.
Ryż. 27: Wywoływanie funkcji SeDebugPrivilege i eskalacji uprawnień
Z jednej strony mamy LookupPrivilegeValueW, który dostarcza nam niezbędnych informacji o uprawnieniach, które chcemy zwiększyć.
Ryż. 28: Poproś o informacje o uprawnieniach w celu eskalacji uprawnień
Z drugiej strony mamy Dostosuj uprawnienia tokena, co pozwala nam uzyskać niezbędne prawa do naszego strumienia. W tym przypadku najważniejsze jest Nowy stan, którego flaga zapewni przywileje.
Ryż. 29: Konfigurowanie uprawnień dla tokena
5.3 Wdrożenie
W tej sekcji pokażemy, jak przykład realizuje proces wdrożenia wspomniany wcześniej w tym raporcie.
Głównym celem procesu wdrożenia, a także eskalacji, jest uzyskanie dostępu do kopie w tle. Aby to zrobić, musi pracować z wątkiem z uprawnieniami wyższymi niż użytkownik lokalny. Po uzyskaniu tak podwyższonych uprawnień usunie kopie i dokona zmian w innych procesach, aby uniemożliwić powrót do wcześniejszego punktu przywracania systemu operacyjnego.
Jak zwykle w przypadku tego typu złośliwego oprogramowania, wykorzystuje on UtwórzToolHelp32Migawkawięc wykonuje migawkę aktualnie uruchomionych procesów i próbuje uzyskać dostęp do tych procesów za pomocą Otwarty proces. Po uzyskaniu dostępu do procesu otwiera również token ze swoimi informacjami w celu uzyskania parametrów procesu.
Ryż. 30: Pobieranie procesów z komputera
Możemy dynamicznie zobaczyć, jak pobiera listę uruchomionych procesów w procedurze 140002D9C, używając CreateToolhelp32Snapshot. Po ich otrzymaniu przegląda listę, próbując otwierać procesy jeden po drugim za pomocą OpenProcess, aż mu się to uda. W tym przypadku pierwszym procesem, jaki udało mu się otworzyć, był „hosthost.exe”.
Ryż. 31: Dynamicznie wykonaj procedurę, aby uzyskać proces
Widzimy, że następnie odczytuje informacje o tokenie procesu, więc wywołuje Token OpenProcess z parametrem „20008"
Ryż. 32: Przeczytaj informacje o tokenie procesu
Sprawdza również, czy proces, do którego zostanie wstrzyknięty, taki nie jest Csrss.exe, explorer.exe, lsaas.exe lub że ma zbiór praw władza NT.
Ryż. 33: Procesy wykluczone
Możemy dynamicznie zobaczyć, jak najpierw przeprowadza sprawdzenie, korzystając z informacji o tokenie procesu 140002D9C w celu sprawdzenia, czy konto, z którego uprawnienia są wykorzystywane do realizacji procesu, jest kontem WŁADZA NT.
Ryż. 34: Kontrola władz NT
A później poza procedurą sprawdza, czy tak nie jest csrss.exe, explorer.exe lub lsaas.exe.
Ryż. 35: Kontrola władz NT
Kiedy już zrobi migawkę procesów, otworzy je i sprawdzi, czy żaden z nich nie jest wykluczony, jest gotowy do zapisania w pamięci procesów, które zostaną wstrzyknięte.
Aby to zrobić, najpierw rezerwuje obszar w pamięci (Wirtualny AllocEx), pisze w nim (Zapisz pamięć procesową) i tworzy wątek (Utwórz zdalny wątek). Do pracy z tymi funkcjami wykorzystuje PIDy wybranych procesów, które wcześniej uzyskał za ich pomocą UtwórzToolhelp32Snapshot.
Ryż. 36: Kod osadzania
Tutaj możemy dynamicznie obserwować, jak wykorzystuje PID procesu do wywołania funkcji Wirtualny AllocEx.
Ryż. 37: Wywołaj VirtualAllocEx
5.4 Szyfrowanie
W tej sekcji przyjrzymy się części tej próbki dotyczącej szyfrowania. Na poniższym obrazku widać dwa podprogramy zwane „ZaładujLibrary_EncodeString„и”Koduj_Funkcja", które odpowiadają za wykonanie procedury szyfrowania.
Ryż. 38: Procedury szyfrowania
Na początku możemy zobaczyć, jak ładuje ciąg znaków, który później zostanie użyty do rozjaśnienia wszystkiego, co jest potrzebne: importów, bibliotek DLL, poleceń, plików i dostawców CSP.
Ryż. 39: Obwód usuwania zaciemnień
Poniższy rysunek przedstawia pierwszy import, który usuwa zaciemnienie w rejestrze R4. LoadLibrary. Zostanie to później wykorzystane do załadowania wymaganych bibliotek DLL. W rejestrze R12 widzimy także kolejną linię, która wraz z poprzednią linią służy do usuwania zaciemnienia.
Ryż. 40: Dynamiczne usuwanie zaciemnień
Kontynuuje pobieranie poleceń, które uruchomi później, aby wyłączyć kopie zapasowe, punkty przywracania i tryby bezpiecznego rozruchu.
Ryż. 41: Polecenia ładowania
Następnie ładuje lokalizację, w której upuści 3 pliki: Windows.bat, run.sct и start.bat.
Ryż. 42: Lokalizacje plików
Te 3 pliki służą do sprawdzania uprawnień każdej lokalizacji. Jeśli wymagane uprawnienia nie są dostępne, Ryuk przerywa wykonywanie.
Kontynuuje ładowanie linii odpowiadających trzem plikom. Pierwszy, DECRYPT_INFORMATION.html, zawiera informacje niezbędne do odzyskania plików. Drugi, OSOBY, zawiera klucz publiczny RSA.
Ryż. 43: Linia DECRYPT INFORMATION.html
Trzeci, UNIQUE_ID_DO_NOT_REMOVE, zawiera zaszyfrowany klucz, który zostanie użyty w następnej procedurze do przeprowadzenia szyfrowania.
Ryż. 44: UNIKALNY ID linii NIE USUWAJ
Na koniec pobiera wymagane biblioteki wraz z wymaganymi importami i dostawcami CSP (Udoskonalone RSA firmy Microsoft и Dostawca kryptografii AES).
Ryż. 45: Ładowanie bibliotek
Po zakończeniu usuwania zaciemnień przystępuje do wykonywania czynności niezbędnych do szyfrowania: wyliczenia wszystkich dysków logicznych, wykonania tego, co zostało załadowane w poprzedniej procedurze, wzmocnienia obecności w systemie, wyrzucenia pliku RyukReadMe.html, szyfrowania, wyliczenia wszystkich dysków sieciowych , przejście do wykrytych urządzeń i ich szyfrowanie.
Wszystko zaczyna się od załadowania”cmd.exe" i rekordy kluczy publicznych RSA.
Ryż. 46: Przygotowanie do szyfrowania
Następnie używa wszystkich dysków logicznych Pobierz dyski logiczne i wyłącza wszystkie kopie zapasowe, punkty przywracania i tryby bezpiecznego rozruchu.
Ryż. 47: Dezaktywacja narzędzi do odzyskiwania
Następnie wzmacnia swoją obecność w systemie, jak widzieliśmy powyżej, i zapisuje pierwszy plik RyukReadMe.html в TEMP.
Ryż. 48: Publikowanie powiadomienia o okupie
Na poniższym obrazku możesz zobaczyć, jak tworzy plik, pobiera zawartość i zapisuje ją:
Ryż. 49: Ładowanie i zapisywanie zawartości pliku
Aby móc wykonywać te same czynności na wszystkich urządzeniach, z których korzysta
"icacls.exe„, jak pokazaliśmy powyżej.
Ryż. 50: Korzystanie z programu icalcls.exe
Na koniec rozpoczyna szyfrowanie plików z wyjątkiem plików „*.exe”, „*.dll”, plików systemowych i innych lokalizacji określonych w formie zaszyfrowanej białej listy. W tym celu wykorzystuje import: CryptAcquireContextW (w przypadku gdy określono użycie AES i RSA), CryptDeriveKey, CryptGenKey, Klucz do zniszczenia krypty itp. Próbuje także rozszerzyć swój zasięg na wykryte urządzenia sieciowe za pomocą WNetEnumResourceW, a następnie je zaszyfrować.
Ryż. 51: Szyfrowanie plików systemowych
6. Import i odpowiadające mu flagi
Poniżej znajduje się tabela zawierająca najważniejsze przywozy i flagi użyte w próbie:
7. MKOl
referencje
- userPublicrun.sct
- Menu StartProgramyStartupstart.bat AppDataRoamingMicrosoftWindowsStart
- MenuProgramyStartupstart.bat
Raport techniczny na temat ransomware Ryuk został opracowany przez ekspertów z laboratorium antywirusowego PandaLabs.
8. Linki
1. „Everis y Prisa Radio sufren un Grave Ciberataque que secuestra sus sistemas.”https://www. elconfidencial.com/tecnologia/2019-11-04/everis-la-ser-ciberataque-ransomware-15_2312019/, Publicada el 04.
2. „Un virus de origen ruso ataca a valides empresas españolas.” https: //elpais.com/tecnologia/2019/11/04/actualidad/1572897654_ 251312.html, Publicada el 04.
3. „Dokument VB2019: Zemsta Shinigami: długi ogon złośliwego oprogramowania Ryuk.” https://securelist.com/story-of-the-year-2019-cities-under-ransomware-siege/95456/, Publicada el 11 /12/2019
4. „Polowanie na wielkiego zwierza z Ryukiem: kolejny lukratywnyb-ukierunkowany ransomware.”https://www. crowdstrike.com/blog/big-game-hunting-with-ryuk-another-lucrative-targeted-ransomware/, Publicada el 10.
5. „Dokument VB2019: Zemsta Shinigami: długi ogon szkodliwego oprogramowania Ryuk.” https://www. wirusbulletin.com/virusbulletin/2019/10/ vb2019-paper-shinigamis-revenge-long-tail-r
Źródło: www.habr.com