Connect with us

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

Published

on

English Version

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:

  1. Individua il server C2 all’interno del codice
  2. Identificare gli algoritmi di crittografia per il server C2 e, se possibile, anche per le stringhe.
  3. 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


  1. 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)

TacticsTechniquesDescription
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 Transferrequests binary from the Internet
 T1132.001 – Data Encoding: Standard Encodingencode data with BASE64
TA0006: Credential AccessT1552.001: Credentials In FilesStealing of personal data – login data
TA0005: Defense EvasionT1564  Hide Artifactsattempt 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 Informationattempt to make an executable or file difficult to discover or analyze by encrypting XOR
TA0002: ExecutionT1053.005 – Scheduled Task/Job: Scheduled Taskabuse the Windows Task Scheduler to create file in statup

IOCs

TitleDescription
Name27c1ed01c767f504642801a7e7a7de8d87dbc87dee88fbc5f6adb99f069afde4 exe
MD56cc7d9664c1a89c58549e57b5959bb38
SHA185b665c501b9ab38710050e9a5c1b6d2e96acccc
SHA25627c1ed01c767f504642801a7e7a7de8d87dbc87dee88fbc5f6adb99f069afde4

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

TitleDescription
NameC:\Users\admin\AppData\Local\Microsoft\Windows\INetCache\IE\AH8CR9J5\YT_Client[1].exe
SHA256041f891934add72852c8fda245c95da959d7f98cc580383d198e42f2de039634

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”