viernes, 26 de abril de 2013

Haciendo trampas en TriviaDos


No suelo gastar mucho tiempo con juegos en el móvil pero he de reconocer que siempre acabo enganchándome a alguno. En esta ocasión tengo bastante vicio con TriviaDos, un trivial de toda la vida por turnos para jugar en línea contra un contrincante remoto, ya sea conocido o aleatorio. Así que, aparte de jugar, gano algo de culturilla general... ;)

Hace unos días me llamó la atención el anuncio del primer torneo de TriviaDos que ofrece premios a los ganadores, ¡los dos primeros valorados en 1000€!. 


Por un momento pensé en apuntarme pero, vistas las estadísticas de los jugadores top durante los primeros días, sus porcentajes de acierto en cada categoría y el número de partidas de cada uno, simplemente se me quitaron las ganas...


Sabía que un ser humano con un coeficiente intelectual normal y el tiempo limitado no podría si quiera soñar con clasificarse entre los 100 primeros. Pero, ¿alguien que tuviera conocimientos de seguridad informática podría "hacer trampas" y ganar el concurso?. Después de un vistazo a la aplicación de Android parece que sí...

...Un Quesito para atraerlos a todos y atarlos en las tinieblas.     
Lo que os voy a mostrar en esta entrada es simplemente cómo modificar TriviaDos para ganar unos segundos de tiempo para responder a cada pregunta. Os dará una ligera ventaja pero no será determinante para que superéis a todos los rivales.. o eso espero. No me hago responsable de su uso ni de cualquier otra modificación derivada. Sólo espero que los dos chicos de Pandereta refuercen la seguridad de su aplicación. Vamos a ello...

Lo primero que haremos será descargar el APK de la aplicación desde el Google Play, por ejemplo con Real APK Leecher:


Para los no iniciados, decir que el Formato APK es una variante del formato JAR de Java y se usa para distribuir e instalar componentes empaquetados para la plataforma Android. Básicamente es un comprimido ZIP que puede ser abierto con herramientas como 7-Zip, Winzip, WinRAR o Ark. En nuestro caso abrimos el fichero TriviaDos.apk con 7-zip y extraemos el fichero classes.dex:

 
En Android, el código fuente de Java también se compila en archivos .class, pero después mediante la herramienta “dx“ son convertidos a un único archivo dex (Dalvik Executable) que se ejecuta en la máquina virtual Dalvik.  Este fichero se puede descompilar por ejemplo con las utilidades del proyecto smali:



java -jar tools/baksmali.jar -o decompiled/classout/ input/classes.dex
 
Ahora toca revisar la estructura de directorios y ficheros .smali con los opcodes de Dalvik. Si lo prefieres puedes transformar el fichero ejecutable de Dalvik a un Jar y descompilar los .class a .java para ver un poco a más alto nivel. Para nuestro objetivo bastará con buscar constantes relacionadas con funciones como CountDownTimer y variables bautizadas con la palabra "tiempo" o similar. Si nos centramos en el diálogo de las preguntas daremos con ello. Simplemente, en los ficheros TrivialPreguntnasDialog*.smali sustituiremos:



    .local v6, tiempoFinal:D
    const-wide/high16 v0, 0x4034
 
por


    .local v6, tiempoFinal:D
    const-wide/high16 v0, 0x7530
 
Y


    .line 29
    const/16 v0, 0x3a98

    iput v0, p0, Laul/irm/triviados/dialogos/TrivialPreguntasDialog;->tiempoPregunta:I
 
por


    .line 29
    const/16 v0, 0x7FFF

    iput v0, p0, Laul/irm/triviados/dialogos/TrivialPreguntasDialog;->tiempoPregunta:I



 

Es decir, sin ni siquiera modificar el tipo hemos cambiado el valor de tiempoPregunta al doble y el valor de tiempoPregunta por el máximo posible para 16 bits. Por tanto hemos pasado 15 a 30 segundos para responder cada pregunta.

Una vez modificado el valor de las variables tendremos que recompilar todo el código con smali y generar un nuevo fichero classes.dex:



java -Xmx512M -jar tools/smali.jar -o output/classes.dex decompiled/classout/

Después con 7-zip volveremos a añadir o sustituir el fichero dentro del paquete TriviaDos.apk:

  
 
No obstante, para instalar el apk con el nuevo classes.dex, tendremos que firmarlo pues recordemos que los archivos (apk, zip) tanto actualizaciones como aplicaciones y firmwares solo pueden instalarse en los móviles Android si han sido previa y debidamente firmados. Es una medida de seguridad que otorga validez al archivo aunque en la práctica es más un requisito que una garantía.

Eso sí, necesitaremos antes generar un par de claves pública/privada mediante OpenSSL. En Windows simplemente descargamos el paquete y lo descomprimimos, por ejemplo en c:\openssl. Dentro del directorio ejecutaremos:



openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -config c:\openssl\openssl.cf -out request.pem
openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

Ahora para firmarlo usaremos la herramienta SignApk.jar incluida en el Android platform source bundle, y ejecutaremos:



java -jar signapk.jar certificate.pem key.pk8 TriviaDos.apk TriviaDos_modificado.apk

Por último desinstalamos el apk original e instalamos el nuestro. Y comprobamos el tiempo observando la barra de progreso ;) 



martes, 16 de abril de 2013

¿Es posible tomar el control de un avión mediante un teléfono móvil?

El miércoles, el investigador de seguridad español Hugo Teso hizo una presentación en la conferencia Hack in the Box en Amsterdam en el que aseguraba que había desarrollado una aplicación para Android que podría permitirle tomar el control de un avión debido a los defectos en sus sistemas de comunicaciones de a bordo... ¡y la que se ha montado!, hasta ha sido noticia de impacto en la CNN (saluda Hugo):

Durante años hackers e investigadores de seguridad están avisando acerca de vulnerabilidades en la próxima generación de protocolos de control de tránsito aéreo. Pero Hugo se centró en un protocolo diferente llamado Aircraft Communications Addressing and Report System (ACARS), un sistema de intercambio de datos simple que ha evolucionado a lo largo de décadas y ahora se incluye en todo, desde los datos meteorológicos hasta la programación de los horarios del sistema de gestión de vuelo del avión (FMS).
 
Cabina de un avión, incluyendo el sistema de gestión de vuelo de Honeywell supuestamente vulnerable.
El principal problema es que ACARS prácticamente no tiene elementos de seguridad para evitar comandos falsos. Hugo pasó tres años trabajando en la ingeniería inversa del software de navegación de vuelo que recibe señales ACARS para encontrar errores que le permitieron enviar sus propios comandos a los sistemas, ya sea desde una radio por software que se puede ajustar para utilizar ACARS o desde un sistema de aerolíneas comprometido. En su charla, Hugo mostró una aplicación para Android que le permitió redirigir un avión virtual con sólo un toque en un mapa de su teléfono Samsung Galaxy. "ACARS no tiene ninguna seguridad en absoluto. El avión no tiene medios para saber si los mensajes que recibe son válidos o no", dice. "Así que los acepta y se puede utilizar para cargar los datos en el avión y provocar estas vulnerabilidades. Y entonces se acabó el juego"
.

Las aerolíneas operan sus comunicaciones ‘AOC’ sobre ACARS
Y todo ésto sólo mediante hardware y software de simulación FMS que compró en eBay y que supuestamente contiene el mismo código que los sistemas reales. Imaginaros de lo que estamos hablando, podría tomar el control del piloto automático de un avión en pleno vuelo y cambiar de ruta o enviar señales y datos falsos para confundir a los pilotos humanos... o apagar las luces y expulsar las mascarillas de despresurización. "Se puede utilizar este sistema para modificar aproximadamente todo lo relacionado con la navegación del avión", comentaba Hugo en una entrevista. "Eso incluye un montón de cosas desagradables".

Evidentemente Hugo no ha detallado las vulnerabilidades en el código. Ya ha contactado con la US Federal Aviation Administration (FAA) y la European Aviation Safety Administration (EASA) y está trabajando con las compañías aeroespaciales afectadas (Honeywell, Thales, Rockwell Collins) para solucionar el problema. Estas entidades aseguran que estas vulnerabilidades sólo pueden explotar en un entorno de simulación y nunca en un sistema real certificado con los niveles más altos de redundancia y seguridad. Desde la perspectiva de N.Runs la consultora para la que trabaja Hugo comentan: "... esto debería funcionar con un mínimo de adaptación". 


Sea como fuere, se trata de un toque de atención a todas las compañías involucradas en el tráfico aéreo para mejorar la seguridad de todos los que con ellos viajamos. Ganamos todos.

Presentación:


Aircraft Hacking Practical Aero Series

Fuentes: 


Researcher Says He's Found Hackable Flaws In Airplanes' Navigation Systems (Update: The FAA Disagrees)
FAA: 'No, you CAN'T hijack a plane with an Android app'
Hijacking airplanes with an Android phone

Un 'hacker' demuestra que puede derribar un avión con un móvil Android

jueves, 11 de abril de 2013

El ataque DDoS a Spamhaus y la amenaza de los reenviadores DNS abiertos

Los ataques contra Spamhaus iniciados el pasado 19 de marzo al parecer se iniciaron por un grupo de CyberBunker que se opone al trabajo de Geneva, una organización suiza de voluntarios contra el spam. Varias empresas de seguridad describieron los ataques a la organización como el más grande DDoS nunca antes conocido (con mucho).

En los ataques DDoS, los atacantes suelen tratar de "acabar" con un servicio o una red dirigiendo grandes volúmenes de tráfico inútil. El tráfico suele ser generado utilizando grandes botnets de ordenadores comprometidos. 


En los ataques DDoS más grandes el tráfico generado suele estar entre 4 y 10 Gbps, en el ataque a Spamhaus se llegó a alcanzar asombrosamente los 300 Gbps, se dice que tres veces más que el mayor DDoS visto hasta la fecha.

Los autores detrás del ataque emplearon un método conocido pero no usado frecuentemente de reflexión y amplificación DNS para generar un flujo enorme de tráfico DDoS dirigido contra Spamhaus.


Los servidores DNS se utilizan principalmente para buscar y resolver nombres de dominio como hackplayers.com y sus correspondientes direcciones IP. Si un servidor DNS no tiene la información del dominio en su base de datos o caché consulta a otros servidores DNS cercanos.
Lo ideal sería que los servidores DNS estén configurados sólo para responder a solicitudes procedentes de dentro de un determinado dominio o de un rango de direcciones IP. Sin embargo, la realidad es que millones de servidores DNS públicos en Internet están configurados por defecto como DNS abiertos y responden a cualquiera...

Las personas detrás del ataque a Spamhaus enviaron consultas con direcciones IP de origen falsa a decenas de miles de servidores DNS abiertos (se cree que unos 100.000), haciendo parecer que las solicitudes de resolución venían de Spamhaus. Así que las respuestas a las peticiones de decenas de miles de servidores DNS fueron enviadas a Spamhaus, lo que generó un gran volumen de tráfico contra ellos. 


Además, para aumentar el volumen de tráfico, los atacantes modificaron las peticiones UDP de tal manera que cada servidor respondió con volúmenes de datos mucho mayores de lo normal. Por ejemplo, enviando peticiones recursivas a dominios "." (root hint) se generan respuestas 20 veces mayores que el paquete de solicitud inicial, irónicamente en parte debido a DNS-SEC que incluye datos que certifican la validez de los servidores DNS que responden.

Lo peor es que la solución se antoja difícil y para nada inmediata. Por ejemplo, Open DNS Resolver Project, el esfuerzo de un grupo de expertos en seguridad para arreglar esto, estima que actualmente existen 27 millones de "Open Recursive Resolvers", y 25 millones de ellos son una amenaza significativa, latente, esperando a desatar su furia de nuevo contra un nuevo objetivo...

Fuente: Spamhaus attacks expose huge open DNS server dangers