
Ryuk è una delle varianti di ransomware più famose degli ultimi anni. Da quando è apparso per la prima volta nell'estate del 2018, ha raccolto , in particolare nel settore business, che è il suo principale obiettivo.
1. Informazioni generali
Questo documento contiene un'analisi della variante di ransomware Ryuk, nonché del loader responsabile del caricamento del malware nel sistema.
Il ransomware Ryuk è apparso per la prima volta nell'estate del 2018. Una delle differenze tra Ryuk e altri ransomware è che è mirato ad attaccare ambienti aziendali.
A metà del 2019, gruppi di cyber-criminalità hanno attaccato un numero enorme di aziende spagnole con questo ransomware.

Fig. 1: Estratto da El Confidencial riguardo all'attacco del ransomware Ryuk [1]

Fig. 2: Estratto da El País sull'attacco effettuato con il ransomware Ryuk [2]
Quest'anno Ryuk ha attaccato un gran numero di aziende in diversi paesi. Come puoi vedere nei seguenti grafici, i paesi maggiormente colpiti sono stati Germania, Cina, Algeria e India.
Confrontando il numero di attacchi informatici, possiamo vedere che Ryuk ha colpito milioni di utenti e compromesso un'enorme quantità di dati, causando gravi danni economici.

Fig. 3: Illustrazione dell'attività globale di Ryuk.

Fig. 4: 16 paesi maggiormente colpiti da Ryuk

Fig. 5: Numero di utenti attaccati dal ransomware Ryuk (in milioni)
Secondo il principio di funzionamento comune di queste minacce, questo ransomware mostra alla vittima una notifica di riscatto dopo aver completato la crittografia, che deve essere pagato in bitcoin all'indirizzo fornito per ripristinare l'accesso ai file crittografati.
Questo malware è cambiato dalla sua prima apparizione.
La variante di questa minaccia analizzata in questo documento è stata scoperta durante un tentativo di attacco nel gennaio 2020.
A causa della sua complessità, questo malware è spesso attribuito a gruppi di criminalità informatica organizzata, noti anche come gruppi APT.
Una parte del codice Ryuk presenta una notevole somiglianza con il codice e la struttura di un altro noto ransomware, Hermes, con cui condivide diverse funzionalità. È proprio per questo che inizialmente si è associato Ryuk al gruppo nordcoreano Lazarus, sospettato all'epoca di essere dietro al ransomware Hermes.
Successivamente, il servizio Falcon X di CrowdStrike ha segnalato che, in realtà, Ryuk è stato creato dal gruppo WIZARD SPIDER [4].
Ci sono diverse prove a sostegno di questa ipotesi. In primo luogo, questo ransomware è stato pubblicizzato sul sito web exploit.in, noto mercato russo per il software dannoso, che era già stato collegato a diversi gruppi APT russi.
Questo fatto esclude la teoria secondo cui Ryuk potrebbe essere stato sviluppato dal gruppo APT Lazarus, poiché non corrisponde al modo in cui opera il gruppo.
Inoltre, Ryuk è stato pubblicizzato come ransomware che non funzionerà su sistemi russi, ucraini e bielorussi. Questo comportamento è determinato da una funzione, trovata in alcune versioni di Ryuk, che verifica la lingua del sistema su cui è in esecuzione il ransomware, fermando il suo funzionamento se il sistema utilizza la lingua russa, ucraina o bielorussa. Infine, durante un'analisi forense di una macchina compromise dal gruppo WIZARD SPIDER, sono stati trovati diversi "artefatti" che si presume siano stati utilizzati nello sviluppo di Ryuk come variante del ransomware Hermes.
D'altra parte, gli esperti Gabriela Nicolo e Luciano Martins hanno suggerito che il ransomware potrebbe essere stato sviluppato dal gruppo APT CryptoTech [5].
Ciò deriva dal fatto che diversi mesi prima dell'emergere di Ryuk, questo gruppo aveva pubblicato sul forum dello stesso sito informazioni sullo sviluppo di una nuova versione del ransomware Hermes.
Alcuni utenti del forum si sono chiesti se CryptoTech avesse davvero creato Ryuk. Dopo di che, questo gruppo si è difeso affermando di avere prove di aver sviluppato il 100% di questo ransomware.
2. Caratteristiche
Iniziamo con il loader, il cui compito è identificare il sistema in cui si trova, in modo da poter avviare la versione "giusta" del ransomware Ryuk.
L'hash del loader è il seguente:
MD5 A73130B0E379A989CBA3D695A157A495
SHA256 EF231EE1A2481B7E627921468E79BB4369CCFAEB19A575748DD2B664ABC4F469
Una delle peculiarità di questo caricatore è che non contiene alcun metadato, ovvero i creatori di questo programma dannoso non hanno incluso alcuna informazione al suo interno.
A volte includono dati errati per far pensare all'utente di avviare un'applicazione legittima. Tuttavia, come vedremo in seguito, nel caso in cui l'infezione non preveda l'interazione con l'utente (come nel caso di questo ransomware), gli aggressori non considerano necessario utilizzare i metadati.

Fig. 6: Metadati del campione
Il campione è stato compilato nel formato a 32 bit, in modo da poter essere eseguito sia su sistemi a 32 bit che su quelli a 64 bit.
3. Vettore d'ingresso
Il campione che scarica e avvia Ryuk è entrato nel nostro sistema attraverso una connessione remota, e le credenziali di accesso sono state ottenute grazie a un attacco RDP preliminare.

Fig. 7: Registro dell'attacco
L'aggressore è riuscito a entrare nel sistema da remoto. Dopodiché ha creato un file eseguibile con il nostro campione.
Questo file eseguibile è stato bloccato dalla soluzione antivirus prima del lancio.

Fig. 8: Blocco del campione


Fig. 9: Blocco del campione
Quando il file dannoso è stato bloccato, l'aggressore ha tentato di scaricare una versione crittografata dell'eseguibile, che è stata anch'essa bloccata.

Fig. 10: Set di campioni che l'aggressore ha tentato di eseguire
Infine, ha cercato di caricare un altro file dannoso tramite la console crittografata
PowerShell per eludere la protezione antivirus. Anche questo è stato bloccato.

Fig. 11: PowerShell con contenuto dannoso bloccato

Fig. 12: PowerShell con contenuto dannoso bloccato
4. Caricatore
Quando viene eseguito, scrive un file ReadMe nella cartella %temp%, il che è tipico per Ryuk. Questo file è una richiesta di riscatto, contenente un indirizzo email nel dominio protonmail, che appare abbastanza spesso in questa famiglia di malware: msifelabem1981@protonmail.com
![]()

Fig. 13: Richiesta di riscatto
Durante l'esecuzione del caricatore, puoi notare che avvia diversi file eseguibili con nomi casuali. Vengono memorizzati in una cartella nascosta PUBLIC, ma se nell'operating system non è attivata l'opzione "Mostra file e cartelle nascosti", rimarranno nascosti. Inoltre, questi file sono a 64 bit, a differenza del file genitore, che è a 32 bit.


Fig. 14: File eseguibili avviati dal campione
Come puoi vedere nell'immagine sopra, Ryuk avvia icacls.exe, che verrà utilizzato per modificare tutte le liste di controllo degli accessi ACL (Access control list), garantendo così accesso e modifica dei flag.
Ottiene l'accesso completo per tutti gli utenti a tutti i file sul dispositivo (\/T), indipendentemente dagli errori (\/C) e senza mostrare alcun messaggio (\/Q).
![]()
Fig. 15: Parametri di esecuzione di icacls.exe avviati dal campione
È importante tenere presente che Ryuk verifica quale versione di Windows è in esecuzione. Per fare ciò,
esegue un controllo della versione tramite GetVersionExW, in cui controlla il valore del flag lpVersionInformation, che indica se la versione attuale di Windows è successiva a Windows XP.


A seconda che tu abbia una versione successiva a Windows XP, il caricatore scriverà nella cartella dell'utente locale — in questo caso nella cartella %Public%.
![]()
Fig. 17: Controllo della versione del sistema operativo
Il file scritto è Ryuk. Poi lo avvia, passando il proprio indirizzo come parametro.

Fig. 18: Esecuzione di Ryuk tramite ShellExecute
La prima operazione di Ryuk è ottenere i parametri di input. In questo caso ci sono due parametri di input (il file eseguibile stesso e l'indirizzo del dropper), che vengono utilizzati per eliminare le proprie tracce.
![]()
![]()
Fig. 19: Creazione del processo
Puoi anche vedere che, una volta avviati i suoi file eseguibili, si autoelimina, così da non lasciare alcuna traccia della propria presenza nella cartella in cui è stato eseguito.

Fig. 20: Cancellazione del file
5. RYUK
5.1 Presenza
Ryuk, come altri malware, cerca di rimanere nel sistema il più a lungo possibile. Come mostrato sopra, uno dei modi per raggiungere questo obiettivo è la creazione e l'esecuzione furtiva di file eseguibili. A tal fine, la pratica più comune è modificare la chiave di registro CurrentVersionRun.
In questo caso puoi vedere che, per questo scopo, il primo file eseguibile VWjRF.exe
(il nome del file è generato casualmente) avvia cmd.exe.

![]()
Fig. 21: Esecuzione del file VWjRF.exe
Viene quindi inserito il comando comandi RUN con il nome "svchos". Pertanto, se desideri controllare in qualsiasi momento le chiavi di registro, potresti facilmente non notare questa modifica, considerando la somiglianza di questo nome con svchost. Grazie a questa chiave, Ryuk garantisce la propria presenza nel sistema. Se il sistema non è ancora stato infettato, quando riavvii il sistema, il file eseguibile riproverà di nuovo.
![]()
Figura 22: Il campione garantisce la presenza nella chiave di registro
Possiamo anche vedere che questo file eseguibile arresta due servizi:
"audioendpointbuilder", che, come suggerisce il suo nome, corrisponde all'audio di sistema,
![]()
Figura 23: Il campione ferma il servizio audio di sistema
e samss, che è un servizio di gestione degli account. L'arresto di questi due servizi è una caratteristica di Ryuk. In questo caso, se il sistema è collegato a un sistema SIEM, il ransomware tenta di fermare l'invio di eventuali avvisi. Così facendo, protegge i suoi passaggi successivi, poiché alcuni servizi SAM non saranno in grado di avviarsi correttamente dopo l'esecuzione di Ryuk.
![]()
Figura 24: Il campione arresta il servizio Samss
5.2 Privilegi
In generale, Ryuk inizia con un movimento orizzontale all'interno della rete o viene avviato da un altro malware, come o , che in caso di escalation dei privilegi trasferiscono questi diritti elevati al ransomware.
Precedentemente, come preludio al processo di infiltrazione, vediamo che esegue il processo ImpersonateSelf, il che significa che il contenuto della sicurezza del token di accesso verrà trasferito nel thread, dove verrà immediatamente acquisito tramite GetCurrentThread.

Figura 25: Chiamata a ImpersonateSelf
Successivamente, vediamo che collegherà il token di accesso al thread. Vediamo anche che uno dei flag è DesiredAccess, che può essere utilizzato per controllare l'accesso che avrà il thread. In questo caso, il valore che riceverà edx deve essere TOKEN_ALL_ACCESS o in alternativa — TOKEN_WRITE.


Figura 26: Creazione del token del thread
Successivamente, utilizzerà SeDebugPrivilege e effettuerà una chiamata per ottenere i diritti di debug sul thread, di conseguenza, specificando PROCESS_ALL_ACCESS, potrà accedere a qualsiasi processo necessario. Ora, considerando che il ransomware ha già un thread preparato, resta solo da procedere alla fase finale.

Fig. 27: Chiamata a SeDebugPrivilege e funzione di elevazione dei privilegi
Da un lato, abbiamo LookupPrivilegeValueW, che ci fornisce le informazioni necessarie sui privilegi che vogliamo elevare.

Fig. 28: Richiesta di informazioni sui privilegi per la loro elevazione
Dall'altro lato, abbiamo AdjustTokenPrivileges, che ci consente di ottenere i diritti necessari per il nostro flusso. In questo caso, la cosa più importante è NewState, il cui flag fornirà privilegi.


Fig. 29: Impostazione dei diritti per il token
5.3 Iniezione
In questa sezione mostreremo come un campione esegue il processo di iniezione, precedentemente menzionato in questo rapporto.
L'obiettivo principale del processo di iniezione, così come dell'elevazione, è ottenere accesso a copie shadow. Per fare ciò, deve lavorare con un flusso che ha diritti superiori a quelli dell'utente locale. Non appena ottiene tali diritti più elevati, cancellerà le copie e apporterà modifiche ad altri processi per rendere impossibile il ritorno a un precedente punto di ripristino nel sistema operativo.
Come è solito accadere con questo tipo di malware, per eseguire l'iniezione utilizza CreateToolHelp32Snapshot, quindi effettua uno snapshot dei processi attualmente in esecuzione e cerca di accedere a questi processi tramite OpenProcess. Una volta che ottiene accesso a un processo, apre anche il token con le sue informazioni per ottenere i parametri del processo.

Fig. 30: Ottenere processi dal computer
Possiamo vedere dinamicamente come ottiene l'elenco dei processi in esecuzione nel sottoprogramma 140002D9C utilizzando CreateToolhelp32Snapshot. Dopo averli ottenuti, percorre l'elenco cercando di aprire i processi uno per uno usando OpenProcess finché non riesce a farlo. In questo caso, il primo processo che è riuscito ad aprire è "taskhost.exe".

Fig. 31: Esecuzione dinamica della procedura per ottenere il processo
Possiamo vedere che successivamente legge le informazioni del token del processo, quindi chiama OpenProcessToken con il parametro "20008"

Fig. 32: Lettura delle informazioni del token del processo
Controlla anche che il processo in cui si inietterà non sia csrss.exe, explorer.exe, lsaas.exe o che abbia un insieme di diritti NT authority.

Fig. 33: Processi esclusi
Possiamo vedere dinamicamente come prima esegue il controllo utilizzando le informazioni del token del processo in 140002D9C per scoprire se l'account i cui diritti sono utilizzati per eseguire il processo è un account NT AUTHORITY.

Fig. 34: Verifica NT AUTHORITY
E dopo, al di fuori della procedura, verifica che non sia csrss.exe, explorer.exe o lsaas.exe.

Fig. 35: Verifica NT AUTHORITY
Dopo aver acquisito lo snapshot dei processi, ha aperto i processi e ha controllato che nessuno di essi fosse escluso, è pronto a scrivere in memoria i processi che saranno iniettati.
Per fare ciò, prima riserva un'area in memoria (VirtualAllocEx), vi scrive (WriteProcessmemory) e crea un thread (CreateRemoteThread). Per lavorare con queste funzioni utilizza i PID dei processi selezionati, che ha precedentemente ottenuto tramite CreateToolhelp32Snapshot.

Fig. 36: Codice per l'iniezione
Qui possiamo osservare dinamicamente come utilizza il PID del processo per chiamare la funzione VirtualAllocEx.

Fig. 37: Chiamata a VirtualAllocEx
5.4 Crittografia
In questa sezione esamineremo parte di questo campione relativo alla crittografia. Nella figura seguente puoi vedere due sottoprogrammi chiamati "LoadLibrary_EncodeString" e "Encode_Func", che sono responsabili dell'esecuzione della procedura di crittografia.

Fig. 38: Procedure di crittografia
Inizialmente possiamo vedere come carica una stringa che sarà successivamente utilizzata per deoffuscare tutto ciò che è necessario: importazioni, DLL, comandi, file e CSP.

Fig. 39: Catena di deoffuscazione
Nella figura successiva è mostrato il primo import che deoffusca nel registro R4, LoadLibrary. Questo sarà utilizzato in seguito per caricare le DLL necessarie. Possiamo anche vedere un'altra stringa nel registro R12, che viene utilizzata insieme alla stringa precedente per eseguire la deoffuscazione.

Fig. 40: Deoffuscazione dinamica
Continua a caricare i comandi che eseguirà in seguito per disabilitare i backup, i punti di ripristino e le modalità di avvio sicuro.

Fig. 41: Caricamento dei comandi
Poi carica la posizione in cui metterà 3 file: Windows.bat, run.sct e start.bat.




Fig. 42: Posizioni dei file
Questi 3 file sono utilizzati per verificare i privilegi che ciascuna delle posizioni possiede. Se i privilegi richiesti non sono disponibili, Ryuk interrompe l'esecuzione.
Continua a caricare le stringhe corrispondenti ai tre file. Il primo, DECRYPT_INFORMATION.html, contiene le informazioni necessarie per il ripristino dei file. Il secondo, PUBLIC, contiene la chiave pubblica RSA.

Fig. 43: Riga DECRYPT INFORMATION.html
Terza, UNIQUE_ID_DO_NOT_REMOVE, contiene la chiave crittografata che sarà utilizzata nel sottoprogramma successivo per eseguire la crittografia.

Fig. 44: Riga UNIQUE ID DO NOT REMOVE
Infine, carica le librerie necessarie insieme agli import richiesti e CSP (Microsoft Enhanced RSA e AES Cryptographic Provider).

Fig. 45: Caricamento delle librerie
Dopo che tutta la deoffuscazione è completata, passa all'esecuzione delle azioni necessarie per la crittografia: scansiona tutti i dischi logici, esegue quanto è stato caricato nel sottoprogramma precedente, rafforza la propria presenza nel sistema, depone il file RyukReadMe.html, crittografa, scansiona tutte le unità di rete, accede ai dispositivi rilevati e li crittografa.
Tutto inizia con il caricamento "cmd.exe" e la registrazione della chiave RSA aperta.

Fig. 46: Preparazione alla crittografia
Poi ottiene tutti i dischi logici tramite GetLogicalDrives e disattiva tutte le copie di sicurezza, i punti di ripristino e le modalità di avvio sicuro.

Fig. 47: Disattivazione degli strumenti di ripristino
Dopo di ciò, rafforza la propria presenza nel sistema, come abbiamo visto sopra, e registra il primo file RyukReadMe.html in TEMP.

Fig. 48: Pubblicazione della notifica di riscatto
Nell'immagine seguente puoi vedere come crea un file, carica il contenuto e lo registra:

Fig. 49: Caricamento e registrazione del contenuto del file
Per poter eseguire queste stesse azioni su tutti i dispositivi, utilizza
"icacls.exe", come abbiamo mostrato sopra.

Fig. 50: Utilizzo di icacls.exe
E, infine, inizia la crittografia dei file tranne i file "*.exe", "*.dll", i file di sistema e altre posizioni specificate sotto forma di lista bianca crittografata. Per questo utilizza gli import: CryptAcquireContextW (dove è indicato l'uso di AES e RSA), CryptDeriveKey, CryptGenKey, CryptDestroyKey ecc. Viene anche tentato di estendere la propria azione sui dispositivi di rete rilevati tramite WNetEnumResourceW e poi crittografarli.

Fig. 51: Crittografia dei file di sistema
6. Importazioni e relativi flag
Di seguito è riportata una tabella con l'elenco degli import più rilevanti e dei flag utilizzati dall'esempio:

7. IOC

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

Il rapporto tecnico sul ransomware Ryuk è stato redatto dagli esperti del laboratorio antivirus PandaLabs.
8. Riferimenti
1. “Everis e Prisa Radio subiscono un grave attacco informatico che sequestra i loro sistemi.”https://www.elconfidencial.com/tecnologia/2019-11-04/everis-la-ser-ciberataque-ransomware-15_2312019/, Pubblicata il 04/11/2019.
2. “Un virus di origine russa attacca importanti aziende spagnole.”https://elpais.com/tecnologia/2019/11/04/actualidad/1572897654_251312.html, Pubblicata il 04/11/2019.
3. “Articolo VB2019: La vendetta di Shinigami: la lunga scia del malware Ryuk.”https://securelist.com/story-of-the-year-2019-cities-under-ransomware-siege/95456/, Pubblicata il 11/12/2019.
4. “Caccia al Grande Gioco con Ryuk: Un altro ransomware mirato e lucrativo.”https://www.crowdstrike.com/blog/big-game-hunting-with-ryuk-another-lucrative-targeted-ransomware/, Pubblicata il 10/01/2019.
5. “Articolo VB2019: La vendetta di Shinigami: la lunga scia del malware Ryuk.”https://www.virusbulletin.com/virusbulletin/2019/10/vb2019-paper-shinigamis-revenge-long-tail-r
Fonte: habr.com
