Mostrando entradas con la etiqueta troyano. Mostrar todas las entradas
Mostrando entradas con la etiqueta troyano. Mostrar todas las entradas

27 marzo 2015

Seguro que muchos de los lectores de este blog, teniendo en cuenta cuál es su público más habitual, ya habrán notado que el funcionamiento de GitHub esta mañana ha sido intermitente.

Como es habitual, este mal funcionamiento del servicio se debió a un nuevo ataque DDoS, como se puede comprobar en la página de estado de GitHub.

Siendo los ataques a GitHub tan habituales, ¿por qué prestarle atención a este en concreto? Porque, en primer lugar, según la información disponible, este parece tener un atacante identificado con bastante probabilidad: el Gran Firewall chino. Sin embargo, tampoco es el primer ataque conocido con este origen: recordemos que, a principios de enero, el Gran Firewall hizo que el nombre de dominio de webs censuradas como Facebook resolviese a la dirección IP de la organización ciberactivista francesa La Quadrature du Net, provocando un volumen de tráfico para el que no estaban preparados y que provocó una denegación de servicio.

¿Por qué sucedió esto? Entre las hipótesis más probables barajadas se encuentra la de que haya sido una acción intencionada del Gobierno chino para usar el Gran Firewall por el que pasa la conexión de todos sus ciudadanos para convertir a todos los que quisieran visitar Facebook en atacantes de La Quadrature du Net, una organización que defiende los derechos y libertades en Internet, claramente opuesta a la postura del Gobierno chino con respecto a Internet.

Otras hipótesis barajada es la de que no haya sido una orden que proviniese del Gobierno chino, sino que un empleado con acceso al Gran Firewall esté aprovechando su infraestructura para vender servicios de DDoS a terceras personas.

En cualquier caso, tampoco podemos asegurar que lo que haya pasado --y que es otra hipótesis que se ha planteado-- no sea simplemente que, cuando el Gran Firewall bloquea algún sitio --como Facebook, en este caso-- lo que haga sea que el dominio resuelva a cualquier dirección IP aleatoria y, en este caso, por azar, le ha tocado a una dirección IP de La Quadrature du Net (aunque, de ser esto lo que están haciendo, habría otros rangos de direcciones IP mejores para hacer esto).


No obstante, habiendo también precedentes de ataques con evidencias de proceder del Gran Firewall chino, ¿qué tiene de especial este ataque para que hayamos decidido hablar de él? Lo que hace este ataque interesante son tres motivos:
  • La forma en la que se ha llevado a cabo, que es ciertamente original e inusual y solo posible para alguien con acceso a una infraestructura que pueda interceptar las comunicaciones de millones de personas, como el Gran Firewall chino.
  • La respuesta de GitHub, que también ha sido original.
  • El atacante chino ha usado también usuarios extranjeros para llevar a cabo su ofensiva, poniendo en evidencia una vez más el diseño de Internet basado en la confianza y suposición de buena fe entre las partes y en cómo nos vemos afectados cuando un gran actor como es China traiciona ese principio de buena fe.

Cómo se ha llevado a cabo el ataque

Según las investigaciones de Insight-labs, el modo en el que fue lanzado el ataque fue «secuestrando» el código de tracking de Baidu. Como, sin duda, la mayoría de los lectores sabrán, Baidu es el buscador local chino que tiene prácticamente la hegemonía del mercado, sobre todo tras la retirada de Google al negarse a seguir colaborando con la censura tras recibir un ataque con origen en China. Al igual que Google tiene su servicio Analytics, Baidu tiene un servicio similar de tracking para analizar las visitas recibidas por las páginas web que decidan usar este servicio.


El atacante pudo interceptar las peticiones que solicitaban descargar el código de tracking de Baidu detectando las peticiones a http://hm.baidu.com/h.js para desviarlo a su propio código malicioso. En la siguiente captura, podemos ver a la izquierda el código de tracking actual de Baidu y a la derecha el código que se descargaba durante el ataque según Slashdot:


Si bien ambos códigos están ofuscados, se puede ver que son diferentes ya que el método de empaquetado es distinto y la longitud del código difiere bastante, siendo el código original mucho más largo.

Si desofuscamos el código y comparamos ambas versiones, teniendo de nuevo a la izquierda el código actual y legítimo de Baidu y a la derecha el código del ataque, vemos de nuevo que ambos códigos son totalmente distintos y que el código legítimo es mucho más largo:


Echando un vistazo al código se puede ver rápidamente que el de la izquierda sí tiene la apariencia de ser un código de tracking, mientras que el de la derecha lo único que hace es activar un temporizador que, cada dos segundos, lanza una petición para descargar el contenido de https://github.com/greatfire/ y https://github.com/cn-nytimes/.

Esto provoca que cada usuario que visite una página que use el código de tracking de Baidu esté cada dos segundos haciendo peticiones a GitHub y, de este modo, está participando sin darse cuenta en un ataque DDoS.

Nótese, además, que esta suplantación de código no solo afecta a ciudadanos chinos, sino también a cualquier ciudadano extranjero que intente descargar el código de Baidu, ya que, al estar Baidu alojado en China, su conexión pasaría del mismo modo por el Gran Firewall y se realizaría la suplantación de código igualmente, como le sucedió al investigador de Insight-labs.

Cómo mitigó GitHub el ataque

Si bien el ataque tiene una cierta originalidad --aunque no hubiese sido posible sin la gran cantidad de tráfico que se puede manipular teniendo acceso al Gran Firewall-- la respuesta de GitHub fue más original todavía, ya que el script malicioso no sólo envía una petición para descargar el contenido de https://github.com/greatfire/ y https://github.com/cn-nytimes/, sino que, debido a la forma en la que está programado, también intenta ejecutar ese código como si fuera JavaScript.

Como ese código que descargaba no era JavaScript, sino HTML, probablemente se generará un error en la consola del navegador y no pasará nada. ¿Cómo aprovechó esto GitHub? Reemplazó el código de las páginas atacadas para incluir en su lugar únicamente la siguiente instrucción JavaScript:
alert("WARNING: malicious javascript detected on this domain")
Como se puede ver en la siguiente captura de pantalla:

Y sirvió ese contenido con Content-Type application/javascript:


Así, reemplazado el contenido de esas direcciones por esa instrucción JavaScript y sirviéndolo con el Content-Type correspondiente, el contenido descargado sí se procesaba correctamente como JavaScript y lo que ejecutaba era la única sentencia que incluía, que lo que hacía era mostrar una advertencia al usuario:


Fuente: Insight-labs
De este modo, con esa advertencia se consiguen tres objetivos:
  • Advertir al visitante (y probablemente al dueño de la web cuando la visite) de que esa web incluye un script malicioso.
  • Retrasar el tiempo entre peticiones: ya que la función window.alert() es bloqueante, el resto del script no continuará hasta que el usuario haga clic en aceptar, por lo que se introduce un retraso en esa temporización de dos segundos.
  • Dar la opción al usuario de detener el ataque. Esta nueva variante del script (la versión troyanizada por GitHub de la versión troyanizada por el Gran Firewall del script de Baidu) estaría mostrando alertas con un intervalo de dos segundos, algo sin duda muy molesto para el usuario. La mayoría de navegadores modernos, para evitar la ejecución de scripts molestos, a partir de la segunda alerta dan al usuario la opción de abortar la ejecución del script:
  • Si el usuario, molesto, marca esa casilla antes de hacer clic en aceptar, se detendría el ataque. A base de provocarle una molestia, GitHub puede conseguir que el usuario colabore para detener el ataque.

Conclusión

Como era de esperar, ni en este caso ni en el de La Quadrature du Net hay información oficial ni ninguna explicación por parte de ningún responsable chino que pueda aclarar qué es lo que ha pasado, por lo que lo único con lo que nos podemos quedar es con conjeturas como estas, pero no podremos saber con certeza qué ha pasado.
Sin embargo, dos conclusiones como mínimo creo que se pueden extraer de todo esto:
  • La dependencia de la comunidad de software libre de un servicio centralizado como es GitHub. Si bien hay alternativas a GitHub de código abierto (GitHub no es código abierto), como GitLab, su hegemonía es indiscutible y, aunque esto puede ser un indicativo de la calidad de su servicio, queda en evidencia lo vulnerables que somos a las caídas del mismo, en las que parece que una parte de la actividad de desarrollo se detiene.
  • El diseño de Internet pertenece a otros tiempos y está basado en relaciones de confianza en las que se asume por adelantado la buena fe de todas las partes. Si bien algunos protocolos han ido añadiendo capas y remiendos de seguridad, la arquitectura de Internet todavía es vulnerable a la traición a la buena fe de alguna de las partes, sobre todo al más bajo nivel, como ya se ha demostrado en repetidas ocasiones.
Artículo cortesía de Jesús Perez
Leer más...

08 agosto 2013

OpenX Source 2.8.10 infectado con una puerta trasera

Se ha descubierto que la última versión del software OpenX (evolución de OpenAds) Source, utilizado para la gestión de campañas de publicidad online, habría sido comprometida. 

Tras conocer que la página principal de OpenX fuese atacada, se ha confirmado por  la propia empresa que el fichero de la última versión 2.8.10 de su versión Source contendría una puerta trasera que permitiría la ejecución remota de código en todos aquellos servidores dónde se instalase. La versión vulnerable se encuentra disponible desde Noviembre de 2012.

Si bien en el blog oficial de OpenX únicamente se informa a los usuarios del incidente y cómo corregir o actualizar el software a la 2.8.11, en Sucuri han analizado la puerta trasera incluída. 

Según algunas fuentes, la puerta trasera se encontraría en el siguiente fichero JavaScript dentro de la carpeta de plugins:

/plugins/deliveryLog/vastServeVideoPlayer/flowplayer/3.1.1/flowplayer-3.1.1.min.js

Dentro de este fichero, se encontraron etiquetas de código PHP, las cuales tras ser descodificadas evidencian la puerta trasera que permitiría, mediante la función eval:

Mitigando el problema

Obviamente, la mejor solución sería la de actualizar la versión 2.8.11 del software, ya disponible en la página oficial de OpenX Source:

También se puede recurrir a una solución más manual. Dentro del directorio de instalación de OpenX 2.8.10, buscar todos los ficheros con extensión Javascript que contengan etiquetas típicas de php:

$ find . -name \*.js -exec grep -l '<?php'

Una vez localizados los ficheros (el que debería aparecer como mínimo es el citado anteriormente, flowplayer-3.1.1.min.js), sustituir por los nuevos ficheros de la 2.8.11 o anteriores a la 2.8.10, ya que este plugin no ha sido modificado.

Seguro que pronto aparecerá un módulo para Metasploit que facilite aún más la ejecución de código en servidores con versión Source 2.8.10 instalada y no parcheada.

[+] OpenX Ad Server Backdoor - isc.sans.org
Leer más...

01 diciembre 2012

Detectando dominios Fast-Flux

Las redes Fast-Flux se llevan utilizando desde hace tiempo para distribuir malware y phishing. El uso de Fast-Flux por parte de los criminales dificulta el poder mitigar fácilmente la amenaza en concreto.
La idea básica sobre este tipo de redes es dado un nombre de dominio

flu-project.com

Tenga asignadas varias direcciones IP

Vamos a ver un ejemplo de un dominio que no utiliza sistemas Fast-Flux, realizamos una consulta DNS para que nos devuelva todas las IP a las que resuelve un dominio en concreto.

seifreed@darkmac:~:dig flu-project.com
; <<>> DiG 9.8.1-P1 <<>> flu-project.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59428;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:;flu-project.com. IN A
;; ANSWER SECTION:flu-project.com. 890 IN A 134.0.11.133
;; Query time: 120 msec;; SERVER: 172.19.1.12#53(172.19.1.12);; WHEN: Mon Sep 17 16:15:19 2012;; MSG SIZE  rcvd: 49


Como veis no hay múltiple IP resolviendo a un dominio, además el TTL no es tan bajo como ocurre en las redes Fast-Flux.
Realizamos una comprobación ahora con un dominio que si que usa redes Fast-Flux


seifreed@darkmac:~:dig datesbooking.com

; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; datesbooking.com
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 40922
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;datesbooking.com.  IN A

;; ANSWER SECTION:
datesbooking.com. 300 IN A 222.106.31.112
datesbooking.com. 300 IN A 71.196.187.168
datesbooking.com. 300 IN A 194.90.36.187
datesbooking.com. 300 IN A 67.175.74.110
datesbooking.com. 300 IN A 186.156.6.65

;; Query time: 153 msec
;; SERVER: 87.216.1.65#53(87.216.1.65)
;; WHEN: Thu Aug 23 00:32:11 2012
;; MSG SIZE  rcvd: 114

El dominio resuelve a varias direcciones IP.

Para verlo de manera más gráfica podemos consultar el gráfico de Robtex



En las redes Fast-Flux existen de dos tipos, las redes Single Fast-Flux y Dobe Fast-Flux.

Single Fast-Flux

Las redes single Fast-Flux, es la implementación más sencilla. Cuando una víctima intenta acceder a un determinado dominio, la respuesta del DNS se corresponde con una dirección IP de los equipos infectados, que varían continuamente, que capturarán la petición del cliente y serán ellos quien negocien con el servidor donde se aloja el contenido. A pesar de que en general esta técnica se aplica al tráfico HTTP, indistintamente podría utilizarse con cualquier conexión tipo TCP o UDP. 

Doble Fast-Flux

Por otro lado las redes Doble Fast-Flux mantienen el concepto de las Single Fast-Flux pero añadiendo una capa más de redundancia. En este tipo de implementaciones, además de variar los registros A del DNS para que un mismo dominio resuelva direcciones IP diferentes, también varían los registros NS correspondientes a los servidores DNS autorizados. Por tanto, en este caso, las peticiones DNS de las víctimas son respondidas directamente por la red Fast-Flux.

Detección de redes Fast-Flux

La detección de redes que usen Fast-Flux es algo que se lleva haciendo desde hace tiempo, existen ya implementaciones en IDS que ayudan a detectar este tipo de redes. Ya expusieron como en el blog del proyecto HoneyNet

Existen también proyectos como pffdetect que realizarán las comprobaciones necesarias para detectar dominios que usen redes Fast-Flux
La herramienta posee las siguientes características:

Posibilidad de procesar un único dominio o lista de ellos
Múltiples formas de comprobar el AS de una dirección IP, entre las que se encuentran los servicios de Team-Cymru y la base de datos de MaxMind
Posibilidad de usar múltiples cores
Posibilidad de ejecutarse como aplicación de consola o importarse como módulo

Realizamos una comprobación con la herramienta en un dominio que use Fast-Flux


seifreed@darkmac:~/tools/malware/pffdetect:python pffdetect.py -d datesbooking.com -s 8.8.8.8 -m DNS

        |----------------------------------------------------------|
        |                  Fast-Flux domain detector               |
        |               Alejandro Nolla (z0mbiehunt3r)             |
        |                                      Powered by Buguroo! |
        |----------------------------------------------------------|

[*] Checking if datesbooking.com is a fast-fluxed domain (could take a while depending on domain TTL)
   [!] Domain datesbooking.com is fast-fluxed
[-] Done

La herramienta ha sido capaz detectar si usa Fast-Flux o no. La herramienta funcionaría de la siguiente forma:

Se quiere comprobar si el dominio datesbooking.com usa técnicas Fast-Flux, la herramienta consulta y almacena que direcciones IP resuelven a dicho dominio. La herramienta se espera a que expire el TTL para que se tenga que volver a resolver dicho dominio. Realizando estas comprobaciones hay un alto grado de acierto en saber si un dominio usa técnica Fast-Flux.
Podéis encontrar la herramienta en Code Google

Artículo cortesía de Marc Rivero López

Leer más...

16 mayo 2012

DNI-E Trojan KIT 1.0

El pasado marzo durante la RootedCon, presenté un prototipo de troyano que involucraba el uso fraudulento del Dni Electrónico.

EL concepto es simple: El DNIe como tal es prácticamente inviolable (acceso a las claves privadas, etc) pero en el momento que tiene que trabajar dentro de un sistema operativo, se vuelve vulnerable

Como expliqué en el turno de preguntas, mi intención era hacer algo basado enteramente en el API de windows, sin emplear hooking ni módulos en el Kernel.

Hoy libero el prototipo del troyano y explicaré su funcionamiento. Hay que destacar que el comportamiento es 'de troyano' pero no efectúa nada dañino. El objetivo es conectarse a la web de la DGT y extraer el saldo de puntos del poseedor del DNI de forma automatizada.

El primer paso es robar el PIN. Para este propósito el troyano utiliza dos métodos:

Keylogging: Es el método mas obvio, el DNIe como tal no aporta ningún tipo de seguridad frente a este tipo de ataques ya que 'caen' en la capa del sistema operativo. Tampoco el software que acompaña al DNIe ofrece ningún tipo de protección.

Obviamente no vale cualquier keylogger, hay que afinar el tiro y saber exactamente cuando logear.

Para ello tenemos que localizar exactamente cuando aparece la ventana que solicita el PIN del DNIe y logear las pulsaciones mientras está presente.

Windows tiene la función perfecta para ello: FindWindow(). Esta función permite localizar cualquier ventana buscándola por su 'caption'. Para averiguar cual es el caption de la ventana del DNIe, podemos usar un programa como WinSpy++ que permite obtener los datos de cualquier ventana.

Por lo tanto, el troyano lo que hace es quedar a la espera hasta que aparece esa ventana y, cuando aparece, usa la función GetAsyncKeyState() para obtener las pulsaciones del teclado.

Hay que señalar que falta por pulir bastante esta funcionalidad del troyano, ya que en estos momentos solo captura combinaciones tecla / número y no combinaciones del tipo @#$%, tampoco discrimina mayúsculas / minúsculas. Como prueba de concepto es suficiente, en sucesivas actualizaciones mejoraré este método.

IntraPhishing: Este método es mucho mas 'divertido' y se basa en un hecho que todo usuario del DNIe conoce bien: la cantidad de veces que sale la ventana de solicitud del PIN. Es muy frecuente y muy normal verla aparecer una y otra vez, lo que me lleva a plantearme la idea de: ¿Y si le envío al usuario una ventana idéntica de solicitud de PIN, pero controlada por mi? El resultado, probablemente, sea que el usuario meta su PIN y nos lo entregue en bandeja. Muy al estilo del Phishing tradicional cuando una web clona a otra.

 
Fake
Una vez el usuario introduzca el PIN, estará bajo nuestro control y podemos proceder a la siguiente fase.

Con el PIN en la mano, el siguiente paso es conectar a la web de la DGT para solicitar el saldo de puntos. La URL que nos lleva a ello es esta https://aplcr.dgt.es/WEB_COPACI/certificado/irAntecedentes.faces

Para llegar a ella vamos a usar Internet Explorer y su objeto OLE InternetExplorer.Application

Para el que no lo sepa, Internet Explorer (así como otros muchos programas) ponen a disposición del desarrollador lo que se denominan 'Objetos OLE/COM' que permiten automatizar tareas de forma desatendida. En el caso de Explorer, queremos que navegue hacia la web de la DGT.

Antes de eso, y dado que va a haber actividad en la pantalla del PC, es necesario que el troyano 'espere' a que el PC esté inactivo para realizar la navegación (van a verse las ventanas de solicitud del PIN) para ello usaremos la función GetLastInputInfo() que permite determinar el tiempo que un PC ha estado inactivo. En el caso del troyano, viene configurado para 6 segundos, obviamente en un escenario real, sería necesario una ventana de tiempo mayor.

Una vez el PC esté desatendido, el troyano instancia un Internet Explorer cuya ventana está oculta, y navega hacia la web de la DGT.

Problema: Vamos a necesitar rellenar varias veces la ventana de solicitud del PIN.

Solución: Lanzamos un hilo que constantemente esté buscando la ventana del DNIe y cuando aparezca, enviamos el PIN (que ya tenemos) haciendo uso de la función SendInput() que permite simular las pulsaciones del teclado.

Una vez completado el proceso, el troyano 'parsea' la respuesta de la web de la DGT y obtiene el saldo de puntos.

Aquí podéis ver un vídeo del troyano en acción con el modo IntraPhishing



Cabe destacar que si bien este 'kit' está adaptado al DNIe, usando estas mismas técnicas se podría atacar cualquier otra SmartCard.

En este ejemplo tan solo se ha obtenido una información más o menos confidencial pero se podría adaptar para, por ejemplo, obtener la declaración de la renta o modificar los datos fiscales

Podéis descargar 'DNI-E Trojan KIT' desde aquí
Leer más...