
Ryuk este una dintre cele mai cunoscute variante de ransomware din ultimii câțiva ani. De când a apărut pentru prima dată în vara anului 2018, a strâns , în special în mediul de afaceri, care reprezintă principalul obiectiv al atacurilor sale.
1. Informații generale
Acest document conține o analiză a variantei de ransomware Ryuk, precum și a loader-ului responsabil pentru încărcarea programului malware în sistem.
Ransomware-ul Ryuk a apărut pentru prima dată în vara anului 2018. Una dintre caracteristicile deosebite ale Ryuk este că se concentrează pe atacarea medii corporative.
La mijlocul anului 2019, grupările criminale cibernetice au atacat un număr imens de companii spaniole folosind acest ransomware.

Fig. 1: Fragment din El Confidencial referitor la atacul ransomware-ului Ryuk [1]

Fig. 2: Fragment din El País despre atacul realizat cu ajutorul ransomware-ului Ryuk [2]
În acest an, Ryuk a atacat un număr mare de companii din diverse țări. Așa cum se poate observa în figurile de mai jos, cele mai afectate au fost Germania, China, Algeria și India.
Comparând numărul atacurilor cibernetice, putem observa că milioane de utilizatori au fost afectați de Ryuk, iar un volum imens de date a fost compromis, ceea ce a dus la pierderi economice serioase.

Fig. 3: Ilustrarea activității globale a Ryuk.

Fig. 4: 16 țări cele mai afectate de Ryuk

Fig. 5: Numărul utilizatorilor atacați de ransomware-ul Ryuk (în milioane)
Conform principiului obișnuit de funcționare al unor astfel de amenințări, acest ransomware, după finalizarea criptării, le arată victimelor o notificare de răscumpărare care trebuie plătită în bitcoin la adresa specificată pentru a restaura accesul la fișierele criptate.
Acest malware s-a schimbat de la prima sa apariție.
Varianta acestei amenințări analizate în acest document a fost descoperită în timpul unei tentative de atac în ianuarie 2020.
Datorită complexității sale, acest malware este adesea atribuit grupărilor criminale cibernetice organizate, cunoscute și sub denumirea de grupuri APT.
O parte din codul Ryuk are o asemănare notabilă cu codul și structura unei alte criptomonedice cunoscute, Hermes, având o serie de funcții comune. Din acest motiv, Ryuk a fost asociat inițial cu grupul nord-coreean Lazarus, care la vremea respectivă era suspectat că ar sta în spatele criptomonedelor Hermes.
Ulterior, serviciul Falcon X al companiei CrowdStrike a notat că, de fapt, Ryuk a fost creat de grupul WIZARD SPIDER [4].
Există mai multe dovezi care susțin această ipoteză. În primul rând, această criptomonedă a fost publicată pe site-ul exploit.in, care este un cunoscut piață rusă de malware și a fost legat anterior de anumite grupuri de tip APT din Rusia.
Acest fapt exclude teoria conform căreia Ryuk ar fi putut fi dezvoltat de grupul APT Lazarus, deoarece nu corespunde modului de acțiune al grupului.
În plus, Ryuk a fost promovat ca o criptomonedă care nu va funcționa pe sistemele din Rusia, Ucraina și Belarus. Acest comportament este determinat de funcții descoperite în unele versiuni ale Ryuk, care verifică limba sistemului pe care este rulată aceasta și oprește funcționarea sa dacă sistemul are limba rusă, ucraineană sau belarusă. În final, în urma analizei experților a maşinii care a fost compromisă de grupul WIZARD SPIDER, au fost descoperite mai multe „artefacte” care se presupune că au fost utilizate la dezvoltarea Ryuk ca o variantă a criptomonedelor Hermes.
Pe de altă parte, experții Gabriela Nicolao și Luciano Martins au sugerat că criptomonedă a fost, probabil, dezvoltată de grupul APT CryptoTech [5].
Acest lucru derivă din faptul că, cu câteva luni înainte de apariția Ryuk, acest grup a postat pe forumul aceluiași site informații conform cărora au dezvoltat o nouă versiune a criptomonedelor Hermes.
Mai mulți utilizatori ai forumului s-au întrebat dacă într-adevăr CryptoTech a creat Ryuk. După aceasta, grupul respectiv s-a apărat și a declarat că are dovezi că au dezvoltat 100% din această criptomonedă.
2. Caracteristici
Începem cu încărcătorul, al cărui scop este să identifice sistemul în care se află, pentru a putea lansa versiunea 'corectă' a criptomonedelor Ryuk.
Hash-ul încărcătorului este următorul:
MD5 A73130B0E379A989CBA3D695A157A495
SHA256 EF231EE1A2481B7E627921468E79BB4369CCFAEB19A575748DD2B664ABC4F469
Una dintre caracteristicile acestui downloader este că nu conține metadate, adică creatorii acestui malware nu au inclus nicio informație în el.
Uneori, ei includ date eronate pentru a face utilizatorul să creadă că rulează o aplicație legitimă. Totuși, așa cum vom vedea mai târziu, în cazul în care infecția nu necesită interacțiunea utilizatorului (ca în cazul acestui ransomware), infractorii nu consideră necesar să folosească metadate.

Fig. 6: Metadatele exemplului
Exemplul a fost compilat în format de 32 de biți, astfel încât să poată fi rulat atât pe sisteme de 32 de biți, cât și pe cele de 64 de biți.
3. Vectorul de infiltrare
Exemplul care descarcă și rulează Ryuk a pătruns în sistemul nostru printr-o conexiune la distanță, iar datele de acces au fost obținute printr-un atac RDP prealabil.

Fig. 7: Registrul atacului
Infractorului i-a reușit să acceseze sistemul de la distanță. După aceea, a creat un fișier executabil folosind exemplarul nostru.
Acest fișier executabil a fost blocat de soluția antivirus înainte de a fi lansat.

Fig. 8: Blocarea exemplului


Fig. 9: Blocarea exemplului
Când fișierul malware a fost blocat, infractorul a încercat să descarce o versiune criptată a fișierului executabil, care a fost de asemenea blocată.

Fig. 10: Setul de exemple pe care infractorul a încercat să le lanseze
În cele din urmă, el a încercat să descarce un alt fișier malware printr-o consolă criptată
PowerShell pentru a ocoli protecția antivirus. Dar acesta a fost de asemenea blocat.

Fig. 11: PowerShell cu conținut malware blocat

Fig. 12: PowerShell cu conținut malware blocat
4. Downloader
Când este executat, creează un fișier ReadMe în folderul %temp%, ceea ce este tipic pentru Ryuk. Acest fișier este o cerere de răscumpărare, conținând o adresă de email în domeniul protonmail, care apare destul de frecvent în această familie de malware: msifelabem1981@protonmail.com
![]()

Fig. 13: Cererea de răscumpărare
În timpul rulării downloader-ului, puteți observa că acesta lansează mai multe fișiere executabile cu nume aleatorii. Acestea sunt stocate într-un folder ascuns PUBLIC, dar dacă în sistemul de operare nu este activată opțiunea „Afișați fișierele și folderele ascunse”, ele va rămâne ascuns. Mai mult, aceste fișiere sunt de 64 de biți, spre deosebire de fișierul părinte, care este de 32 de biți.


Fig. 14: Fișiere executabile lansate de mostră
După cum puteți observa în imaginea de mai sus, Ryuk execută icacls.exe, care va fi folosit pentru a modifica toate listele de control al accesului ACL (Access Control List), asigurând astfel accesul și modificarea flagurilor.
Acesta obține acces complet pentru toți utilizatorii la toate fișierele de pe dispozitiv (/T), indiferent de erori (/C) și fără a afișa mesaje (/Q).
![]()
Fig. 15: Parametrii de execuție pentru icacls.exe, lansat de mostră
Este important de reținut că Ryuk verifică ce versiune de Windows este rulată. Pentru a face acest lucru,
execută o verificare a versiunii folosind GetVersionExW, în care verifică valoarea flagului lpVersionInformation, care indică dacă versiunea curentă de Windows este mai recentă decât Windows XP.


În funcție de faptul că aveți o versiune mai recentă decât Windows XP, loaderul va scrie în folderul utilizatorului local — în acest caz în folderul %Public%.
![]()
Fig. 17: Verificarea versiunii sistemului de operare
Fișierul scris este Ryuk. Apoi, îl lansează, transmitându-și propriul adresă ca parametru.

Fig. 18: Execuția Ryuk prin ShellExecute
Primul lucru pe care îl face Ryuk este să obțină parametrii de intrare. De data aceasta există doi parametri de intrare (fișierul executabil și adresa dropper-ului), care sunt folosiți pentru a elimina propriile urme.
![]()
![]()
Fig. 19: Crearea procesului
De asemenea, puteți observa că, odată ce a lansat fișierele sale executabile, se șterge, astfel încât să nu lase urme ale existenței sale în folderul în care a fost executat.

Fig. 20: Ștergerea fișierului
5. RYUK
5.1 Prezența
Ryuk, la fel ca alte programe malware, încearcă să rămână în sistem cât mai mult posibil. Așa cum s-a arătat mai sus, una dintre modalitățile de a atinge acest obiectiv este crearea și lansarea clandestină a fișierelor executabile. Pentru aceasta, cea mai comună practică este modificarea cheii de registry CurrentVersionRun.
În acest caz, puteți observa că pentru acest scop fișierul executabil inițial VWjRF.exe
(numele fișierului este generat aleatoriu) rulează cmd.exe.

![]()
Fig. 21: Execuția fișierului VWjRF.exe
Apoi se introduce comanda comenzi RUN după semnificație. cu numele "svchos". Așadar, dacă doriți să verificați oricând cheile de registru, veți putea observa cu ușurință această modificare, având în vedere asemănarea acestui nume cu svchost. Datorită acestei chei, Ryuk își asigură prezența în sistem. Dacă sistemul nu a fost infectat până acum, atunci când reporniți sistemul, fișierul executabil va încerca din nou.
![]()
Fig. 22: Exemplu asigură prezența în cheia de registru
De asemenea, putem observa că acest fișier executabil oprește două servicii:
"audioendpointbuilder", care, după cum sugerează numele, corespunde audio-ului sistemului,
![]()
Fig. 23: Exemplu oprește serviciul audio al sistemului
și samss, care este un serviciu de gestionare a conturilor. Oprirea acestor două servicii este o caracteristică a lui Ryuk. În acest caz, dacă sistemul este conectat la un sistem SIEM, atunci ransomware-ul încearcă să oprească trimiterea în orice alerte. Astfel, își protejează pașii următori, deoarece unele servicii SAM nu vor putea porni corect după executarea Ryuk.
![]()
Fig. 24: Exemplu oprește serviciul Samss
5.2 Permisiuni
În general, Ryuk începe cu mișcări orizontale în rețea sau este inițiat de un alt malware, cum ar fi sau , care, în cazul unei escaladări de privilegii, transferă aceste drepturi mărite ransomware-ului.
În avans, ca preludiu al procesului de implantare, observăm că acesta execută procesul ImpersonateSelf, ceea ce înseamnă că conținutul de securitate al token-ului de acces va fi transferat în firul de execuție, unde va fi imediat obținut prin GetCurrentThread.

Fig. 25: Apel ImpersonateSelf
Apoi vedem că va lega token-ul de acces de firul de execuție. De asemenea, vedem că unul dintre steaguri este DesiredAccess, care poate fi utilizat pentru a controla accesul pe care îl va avea firul. În acest caz, valoarea pe care o va obține edx ar trebui să fie TOKEN_ALL_ACCESS sau altfel — TOKEN_WRITE.


Fig. 26: Crearea token-ului firului
Apoi va folosi SeDebugPrivilege și va face un apel pentru a obține drepturile de depanare Debug în ceea ce privește firul, iar prin specificarea PROCESS_ALL_ACCESS, va putea accesa orice proces necesar. Acum, având în vedere că ransomware-ul are deja firul pregătit, nu rămâne decât să treacă la etapa finală.

Fig. 27: Apelarea SeDebugPrivilege și funcția de escaladare a privilegiilor
Pe de o parte, avem LookupPrivilegeValueW, care ne oferă informațiile necesare despre privilegiile pe care dorim să le elevăm.

Fig. 28: Cererea de informații despre privilegii pentru escaladarea acestora
Pe de altă parte, avem AdjustTokenPrivileges, care permite obținerea privilegiilor necesare pentru firul nostru. În acest caz, cel mai important este NewState, al cărui flag va conferi privilegiile.


Fig. 29: Configurarea privilegiilor pentru token
5.3 Implementare
În această secțiune, vom demonstra cum un exemplu realizează procesul de implementare, menționat anterior în acest raport.
Scopul principal al procesului de implementare, la fel ca în cazul escaladării, este de a obține acces la copiile shadow. Pentru aceasta, trebuie să lucreze cu un fir cu privilegii superioare celor ale utilizatorului local. Odată ce obține privilegii mai înalte, va șterge copiile și va face modificări în alte procese pentru a face imposibilă revenirea la un punct de restaurare anterior în sistemul de operare.
Așa cum se întâmplă de obicei cu acest tip de malware, pentru a efectua implementarea, folosește CreateToolHelp32Snapshot, astfel el face o captură a proceselor care rulează în acest moment și încearcă să acceseze aceste procese cu ajutorul OpenProcess. Odată ce obține acces la proces, deschide și token-ul cu informațiile sale pentru a obține parametrii procesului.

Fig. 30: Obținerea proceselor de pe computer
Putem vedea dinamic cum obține lista proceselor active în subprograma 140002D9C folosind CreateToolhelp32Snapshot. După ce le-a obținut, parcurge lista, încercând unul câte unul să deschidă procesele cu OpenProcess până când reușește să o facă. În acest caz, primul proces pe care a reușit să-l deschidă este "taskhost.exe".

Fig. 31: Executarea dinamică a procedurii pentru obținerea procesului
Putem vedea că ulterior citește informațiile token-ului procesului, așa că folosește OpenProcessToken cu parametrul "20008"

Fig. 32: Citirea informațiilor token-ului procesului
De asemenea, verifică dacă procesul în care va fi implementat nu este csrss.exe, explorer.exe, lsaas.exe sau dacă are un set de privilegii NT authority.

Fig. 33: Procese excluse
Putem vedea dinamic cum efectuează mai întâi verificarea folosind informațiile token-ului procesului în 140002D9C pentru a verifica dacă contul al cărui drepturi sunt utilizate pentru a efectua procesul este un cont de utilizator NT AUTHORITY.

Fig. 34: Verificarea NT AUTHORITY
Apoi, în afara procedurii, el verifică că aceasta nu este csrss.exe, explorer.exe sau lsaas.exe.

Fig. 35: Verificarea NT AUTHORITY
După ce a capturat procesele, a deschis procesele și a verificat că niciunul dintre ele nu este exclus, el este pregătit să scrie în memorie procesele care vor fi injectate.
Pentru aceasta, el rezervă mai întâi o zonă în memorie (VirtualAllocEx), scrie în aceasta (WriteProcessmemory) și creează un fir (CreateRemoteThread). Pentru a lucra cu aceste funcții, el folosește PID-urile proceselor selectate, pe care le-a obținut anterior utilizând CreateToolhelp32Snapshot.

Fig. 36: Cod pentru injectare
Aici putem observa dinamic cum folosește PID-ul procesului pentru a apela funcția VirtualAllocEx.

Fig. 37: Apelarea VirtualAllocEx
5.4 Criptare
În această secțiune, vom analiza o parte din acest exemplu legată de criptare. În imaginea următoare, puteți vedea două subprograme numite "LoadLibrary_EncodeString" și "Encode_Func", care sunt responsabile pentru execuția procedurii de criptare.

Fig. 38: Proceduri de criptare
La început, vedem cum încarcă un șir, care va fi folosit ulterior pentru deobfuscarea tuturor elementelor necesare: importurile, DLL-urile, comenzile, fișierele și CSP.

Fig. 39: Lanț de deobfuscare
În imaginea următoare este prezentată prima importare, pe care o deobfuscă în registrul R4, LoadLibrary. Aceasta va fi folosită mai târziu pentru a încărca DLL-urile necesare. De asemenea, putem observa un alt șir în registrul R12, care este folosit împreună cu șirul anterior pentru a realiza deobfuscarea.

Fig. 40: Deobfuscarea dinamică
Continuă să încarce comenzile pe care le va executa mai târziu pentru a dezactiva copiile de rezervă, punctele de restaurare și modurile de boot în siguranță.

Fig. 41: Încărcarea comenzilor
Apoi, el încarcă locația în care va plasa 3 fișiere: Windows.bat, run.sct și start.bat.




Fig. 42: Locațiile fișierelor
Aceste 3 fișiere sunt utilizate pentru a verifica privilegii pe care le au fiecare locație. Dacă privilegiile necesare nu sunt disponibile, Ryuk oprește execuția.
Continuă să încarce șiruri corespunzătoare celor trei fișiere. Primul, DECRYPT_INFORMATION.html, conține informații necesare pentru recuperarea fișierelor. Al doilea, PUBLIC, conține cheia publică RSA.

Fig. 43: Șirul DECRYPT INFORMATION.html
Al treilea, UNIQUE_ID_DO_NOT_REMOVE, conține o cheie criptată care va fi utilizată în subprogramul următor pentru a efectua criptarea.

Fig. 44: Linia UNIQUE ID DO NOT REMOVE
În final, acesta încarcă bibliotecile necesare împreună cu importurile dorite și CSP (Microsoft Enhanced RSA și Provider criptografic AES).

Fig. 45: Încărcarea bibliotecilor
După ce deobfuscare completă a fost realizată, acesta trece la executarea acțiunilor necesare pentru criptare: parcurgerea tuturor discurilor logice, executarea a ceea ce a fost încărcat în subprogramul anterior, întărirea prezenței în sistem, aruncarea fișierului RyukReadMe.html, criptarea, parcurgerea tuturor discurilor de rețea, accesarea dispozitivelor descoperite și criptarea acestora.
Totul începe cu încărcarea "cmd.exe" și scrierea cheii RSA deschise.

Fig. 46: Pregătirea pentru criptare
Apoi, acesta obține toate discurile logice folosind GetLogicalDrives și dezactivează toate backup-urile, punctele de restaurare și modurile sigure de boot.

Fig. 47: Deactivarea instrumentelor de recuperare
După aceasta, acesta își întărește prezența în sistem, așa cum am văzut mai sus, și scrie primul fișier RyukReadMe.html în TEMP.

Fig. 48: Publicarea notificării de răscumpărare
În următoarea ilustrație, puteți vedea cum creează un fișier, încarcă conținutul și îl scrie:

Fig. 49: Încărcarea și scrierea conținutului fișierului
Pentru a putea efectua aceleași acțiuni pe toate dispozitivele, acesta folosește
"icacls.exe", așa cum am arătat mai sus.

Fig. 50: Utilizarea icalcls.exe
Și, în final, acesta începe criptarea fișierelor, cu excepția fișierelor "*.exe", "*.dll", fișierelor de sistem și altor locații specificate sub forma unei liste albe criptate. Pentru aceasta, folosește importurile: CryptAcquireContextW (unde este specificat utilizarea AES și RSA), CryptDeriveKey, CryptGenKey, CryptDestroyKey și altele. De asemenea, se încearcă extinderea acțiunii sale asupra dispozitivelor de rețea descoperite folosind WNetEnumResourceW și apoi criptarea acestora.

Fig. 51: Criptarea fișierelor de sistem
6. Importuri și flaguri corespunzătoare
Mai jos este un tabel cu lista celor mai relevante importuri și flaguri utilizate de exemplarul:

7. IOC

Linkuri
- usersPublicrun.sct
- Start MenuProgramsStartupstart.bat AppDataRoamingMicrosoftWindowsStart
- MenuProgramsStartupstart.bat

Raport tehnic despre ransomware-ul Ryuk, întocmit de experții laboratorului antivirus PandaLabs.
8. Linkuri
1. "Everis și Prisa Radio au suferit un atac cibernetic grav care le-a sechestrat sistemele." https://www.elconfidencial.com/tecnologia/2019-11-04/everis-la-ser-ciberataque-ransomware-15_2312019/, Publicată pe 04/11/2019.
2. "Un virus de origine rusă atacă importante companii spaniole." https://elpais.com/tecnologia/2019/11/04/actualidad/1572897654_251312.html, Publicată pe 04/11/2019.
3. "Lucrare VB2019: Răzbunarea lui Shinigami: coada lungă a malware-ului Ryuk." https://securelist.com/story-of-the-year-2019-cities-under-ransomware-siege/95456/, Publicată pe 11/12/2019.
4. "Vânătoare de mari dimensiuni cu Ryuk: un alt ransomware țintit profitabil." https://www.crowdstrike.com/blog/big-game-hunting-with-ryuk-another-lucrative-targeted-ransomware/, Publicată pe 10/01/2019.
5. "Lucrare VB2019: Răzbunarea lui Shinigami: coada lungă a malware-ului Ryuk." https://www.virusbulletin.com/virusbulletin/2019/10/vb2019-paper-shinigamis-revenge-long-tail-r
Sursa: habr.com
