Inchieste
PrivateLoader: Analisi della crittografia e decrittografia di un loader moderno
AnyRun condivide in esclusiva perl ‘Italia, l’analisi del loader responsabile di aver diffuso alcuni tra i più diffusi malware degli ultimi anni
In questo articolo, esclusivo per l’Italia, ANY.RUN approfondisce il funzionamento interno di PrivateLoader, una famigerata famiglia di loader dannosi. Esploreremo i processi di crittografia e decrittografia utilizzati da questo malware, concentrandoci in particolare sulla sua capacità di proteggersi utilizzando VMProtect, nonché sulla sua decrittografia delle librerie caricate.
Analisi di PrivateLoader Introduzione
PrivateLoader è una famiglia di loader dannosi, scritta in C++ e scoperta per la prima volta all’inizio del 2021.
È noto per la distribuzione di un’ampia gamma di malware, da semplici ladri di informazioni a complessi rootkit e spyware, utilizzando payload.
La distribuzione di questo tipo di malware è gestita dal servizio Pay-Per-Install (PPI), uno strumento popolare all’interno dell’ecosistema dei criminali informatici che genera entrate aggiungendo payload al malware.
- Il codice stesso prevede la decrittazione delle librerie caricate.
- Al momento sono disponibili due versioni di PrivateLoader: una protetta da VMProtect e una versione normale.
- Ogni giorno vengono caricati da 2 a 4 campioni di questo malware.
Analisi statica del file sorgente
SHA256: 27c1ed01c767f504642801a7e7a7de8d87dbc87dee88fbc5f6adb99f069afde4
Utilizzando l’utilità Detect It Easy, possiamo vedere che il file eseguibile analizzato è compilato in C++. Non ci sono informazioni sull’imballatore, il che potrebbe significare che non è stato possibile identificarlo.
Fig. 1 – Dati di esempio di PrivateLoader
Il passaggio successivo consiste nel cercare stringhe non crittografate utilizzando il comando strings:
strings –encoding=l loader.exe
Fig. 2 – Stringhe interessanti rilevate nel file eseguibile
L’analisi delle stringhe scoperte ci permette di identificare diversi elementi interessanti:
- Uno user-agent, che è probabilmente utilizzato per mascherarsi come un’applicazione browser legittima
- Indirizzi URL per determinare l’IP corrente e la geolocalizzazione
PrivateLoader dynamic analysis with ANY.RUN
Abbiamo analizzato il campione in ANY.RUN interactive malware sandbox.
Ecco un collegamento all’attività: https://app.any.run/tasks/3e359dc7-934b-4ae1-89bf-ad33e346ed60/?utm_source=md&utm_medium=article&utm_campaign=private&utm_content=task
L’albero dei processi generato dal file eseguibile appare come segue:
Fig 3. – Process tree
Analyzing the process tree leads to the following conclusions:
1.
Il processo principale PrivateLoader crea un processo figlio denominato “FhuC750omh76YtB1xgR7diEy.exe”, whose executable file is located in the user’s “Pictures” directory (T1564 – Hide Artifacts):
C:\Users\admin\Pictures\Minor Policy
2. Il processo figlio creato viene aggiunto all’avvio utilizzando l’Utilità di pianificazione:
schtasks /create /f /RU “admin” /tr “”C:\Program Files (x86)\ClipManagerP0\ClipManager_Svc.exe”” /tn “LOLPA4DESK HR” /sc HOURLY /rl HIGHEST
Il file eseguibile del processo figlio è stato scaricato da Internet (T1105 – Ingress Tool Transfer). Non entreremo nell’analisi dettagliata di esso.
Fig 4. – payload scaricato
Analizzando le richieste HTTP, possiamo osservare le connessioni e gli scambi di dati con il server C2 (T1071.001 – Application Layer Protocol):
Fig. 5 – С2 indirizzi
Il contenuto inviato (così come ricevuto) nelle richieste POST è costituito da stringhe con codifica BASE64 (T1132.001 – Codifica dati: codifica standard). La decodifica di queste stringhe non produce alcun risultato leggibile:
data=-kSYhy9HPjD5Jhn9y6Evty4XFfJ3JgIwrSzln5bGnLfKDmbXix2ebDEXy6Ty3Bb8Hz2GB8w0Y2SL2JeBSZ4G80iHAkSS7JJyeiPwZOpWJONOFzEBarRHP-ljR9hkvX_TJhqr1nNqQpYUB2lQ9i7NmmHeL_QSx8hUka_C3jOxi02ml5FyDDruXM_IWwPXvAGxtT8TV-i9wLtfd0mF1O369GUAEeI45sF1pKeyDfssmqE=
Passando agli indicatori, possiamo vedere che il malware ruba le credenziali utente dai browser (T1552.001 Credentials In Files):
Fig. 6 – Furto dati
Analisi tecnica di PrivateLoader
Per l’analisi tecnica, sono stati impostati i seguenti compiti:
- Individua il server C2 all’interno del codice
- Identificare gli algoritmi di crittografia per il server C2 e, se possibile, anche per le stringhe.
- Automatizza la decrittazione del server C2 e delle stringhe
L’analisi del file eseguibile ha rivelato che la crittografia delle stringhe viene eseguita utilizzando l’algoritmo XOR (T1027 – File o informazioni offuscati). Inizialmente, i dati e la chiave vengono caricati nello stack e quindi decrittografati utilizzando l’istruzione SIMD “PXOR” e il registro “XMM”. Anche il risultato dell’operazione XOR viene memorizzato nello stack.
Le tre fasi della decrittazione del server C2 sono mostrate di seguito
Caricamento dei dati crittografati nello stack:
Fig. 7 – Data
Caricamento della chiave crittografata nello the stack:
Fig. 8 – Chiave
- Decifrare il server C2 utilizzando l’istruzione “PXOR” e salvare i risultati nello stack:
Fig. 9 – Decrittazione
Durante il processo di analisi, è stato inoltre riscontrato che il metodo simile alla decrittazione C2 viene utilizzato per decrittografare quanto segue:
- Funzioni API utilizzate (T1027.007 – Informazioni o file offuscati: risoluzione API dinamica)
- Carichi utili
- URL e altro.
Alcuni dei campioni analizzati sono protetti da VMProtect. La ricerca della decrittazione delle stringhe è complicata dal fatto che i dati di decrittazione si trovano in una funzione, mentre lo XOR e la chiave si trovano in un’altra. Inoltre, la chiave è sempre la stessa.
Fig. 10 – Decript VMprotect sample
Esempio di automazione della decrittografia del server C2 di PrivateLoader
Per automatizzare l’estrazione dei dati e la configurazione, possiamo utilizzare il framework Triton. Emulerà blocchi di codice che contengono tutte le informazioni crittografate necessarie
Puoi trovare un esempio di script per emulare un blocco specifico nel nostro repository GitHub. L’output dello script sarà il server C2 decrittografato.
Fig 11. – Script output
Pertanto, emulando tutti i blocchi di codice che contengono dati crittografati, possiamo ottenere un insieme di stringhe con le informazioni necessarie, incluso il server C2.
Estrazione della configurazione di PrivateLoader
Nel nostro servizio è possibile visualizzare la configurazione, che viene estratta automaticamente
Configurazione e stringhe di PrivateLoader
I dati decrittografati includono indirizzi e stringhe C2. Le stringhe contengono informazioni come: librerie utilizzate e le loro funzioni, chiavi di registro, percorsi di portafogli crittografici e browser, ecc.
MITRE (ARMATTACK)
Tactics | Techniques | Description |
TA0007: Software discovery | T1518: Software Discovery | Searches for installed software in the system in the “Uninstall” key |
T1082: System Information Discovery | Collects system data | |
TA0011: Command and Control | T1071.001: Application Layer Protocol | Sending collected data to the control server |
T1105 Ingress Tool Transfer | requests binary from the Internet | |
T1132.001 – Data Encoding: Standard Encoding | encode data with BASE64 | |
TA0006: Credential Access | T1552.001: Credentials In Files | Stealing of personal data – login data |
TA0005: Defense Evasion | T1564 Hide Artifacts | attempt to hide artifacts in user folder |
T1027.007 – Obfuscated Files or Information: Dynamic API Resolution | obfuscate then dynamically resolve API functions called by their malware | |
T1027 – Obfuscated Files or Information | attempt to make an executable or file difficult to discover or analyze by encrypting XOR | |
TA0002: Execution | T1053.005 – Scheduled Task/Job: Scheduled Task | abuse the Windows Task Scheduler to create file in statup |
IOCs
Title | Description |
Name | 27c1ed01c767f504642801a7e7a7de8d87dbc87dee88fbc5f6adb99f069afde4 exe |
MD5 | 6cc7d9664c1a89c58549e57b5959bb38 |
SHA1 | 85b665c501b9ab38710050e9a5c1b6d2e96acccc |
SHA256 | 27c1ed01c767f504642801a7e7a7de8d87dbc87dee88fbc5f6adb99f069afde4 |
Extracted URLs
- http://23[.]254[.]227[.]214/api/tracemap[.]php
- http://23[.]254[.]227[.]205/api/tracemap[.]php
- http://23[.]254[.]227[.]202/api/tracemap[.]php
- http://208[.]67[.]104[.]60/api/tracemap[.]php
- http://208[.]67[.]104[.]60/api/firegate[.]php
- http://163[.]123[.]143[.]4/download/YT_Client[.]exe
Dropped executable file
Title | Description |
Name | C:\Users\admin\AppData\Local\Microsoft\Windows\INetCache\IE\AH8CR9J5\YT_Client[1].exe |
SHA256 | 041f891934add72852c8fda245c95da959d7f98cc580383d198e42f2de039634 |
DNS requests
- iplogger.org
- ipinfo.io
- Iplis.ru
Connections (IP)
- “23[.]254.227.214”
- “23[.]254.227.202”
- “23[.]254.227.205”
- “208[.]67.104.60”