Un blog de Seguridad Informática, desde un punto de vista tecnológico

Archivo para septiembre, 2013

Bypassing iOS 7 lockscreen with Siri

Hola a todos,

mi nombre es Álex Soler y he tenido el placer que ser invitado a aportar todo lo que pueda y más a la comunidad de (in)seguridad a través de este blog. Así que espero no decepcionaros 🙂

A raíz de las múltiples vulnerabilidades de bypass del lock screen que tanta fama han ganado en las distintas versiones de iOS publicadas, se nos ocurrió estudiar este fenómeno más en detalle y comprobar qué grados de libertad ofrece una vulnerabilidad de este tipo.

Para empezar a calentar, procedimos a analizar las últimas vulnerabilidades de bypass publicadas en la primera release de iOS 7, concretamente las que hacen referencia a los identificadores CVE-2013-5160 y CVE-2013-5161.

La primera vulnerabilidad (CVE-2013-5160) permite que cualquier persona con acceso al dispositivo pueda realizar llamadas sin conocer el código de desbloqueo del mismo. mediante el uso de la funcionalidad de llamadas de emergencia.

La segunda vulnerabilidad (CVE-2013-5161) permite acceder a las fotos realizadas mediante una combinación de teclas realizada en la vista “Temporizador”. Concretamente consiste en habilitar la vista en la que aparece la opción “Apagar” y posteriormente cancelarlo a la vez que se presiona dos veces el botón “Home”, cómo si quisiéramos abrir el listado de aplicaciones abiertas en el dispositivo. A continuación se abrirá la vista del listado de aplicaciones abiertas y se permitirá acceder a información personal del teléfono cómo por ejemplo las fotos o los contactos.

Vamos a centrarnos en la segunda para lo que realmente precede en la presente entrada de blog. En el siguiente vídeo puede observarse cómo se explota la vulnerabilidad mencionada:

En el anterior vídeo se puede observar cómo es posible acceder tanto a las fotos como a los contactos como bien prometía la descripción de la vulnerabilidad, no obstante, cabe destacar tal como se observa en el vídeo que aunque sí se dispone de acceso a la agenda de contactos, no es posible acceder a los respectivos números de teléfono.

Pero esto no nos supone un problema, en este caso podremos recurrir a nuestra gran amiga/amante en el mundo iOS: SIRI.

 siri

Curiosamente muchos usuarios de iPhone hacen uso de esta magnífica funcionalidad que permite hacer uso de nuestro dispositivo sin ni siquiera tocar una tecla. Algunos ejemplos indicados en la propia ayuda son los siguientes:

  • Abre Fotos
  • Abrir aplicación Contactos
  • Abre Fotos
  • Llamar
  • Etc…

Algunas funcionalidades del Siri, como por ejemplo acceder a la aplicación contactos o ver los correos, te piden el correspondiente código PIN. No obstante, como es de suponer, otras no.

En el siguiente vídeo, se puede observar cómo es posible acceder a la agenda (incluídos los números de teléfono) a través de Siri. El truco consiste en nombrar una cadena de texto que se encuentre dentro de un contacto existente en la agenda. (por ejemplo, la cadena “No Se” haría referencia a contactos como “Sergio”):

En la versión de iOS 6, el acceso a los contactos se rige al puro estilo “Brute Force”, probando cadenas que estén contenidas en los contactos e ir llamándoles para obtener sus números. En cambio en la versión de iOS 7 la tarea es mucho más simple, dado que a través del botón “Otros” podremos acceder a la agenda al completo.

Recientemente ya se ha reproducido el mismo problema mediante otras técnicas de Bypass combinadas con el uso de Facetime:

http://thehackernews.com/2013/09/another-iphone-lockscreen-bypass.html

Cómo solución a este tipo de problemas, lo más sensato es deshabilitar el uso de Siri en el screen lock como se muestra a continuación, algo que personalmente pienso debería estar deshabilitado por defecto:

photo

Así que, ¿Seguís confiando en Siri?


CTF de la No cON Name 2013 (write-up)

Buenas a todos,

después de algún tiempo sin nuevas entradas en el blog, hemos pensado que una buena forma de regresar sería publicando nuestras soluciones a los retos de la ronda clasificatoria del primer CTF que se organiza en las conferencias No cON Name, en este año 2013.

Esta ronda de clasificación ha consistido en la resolución de un juego de estilo «Jeopardy», consistente en 3 niveles. El primero de ellos relacionado con Web, el segundo con Android y el tercero con reversing de binarios.

Imagen

 

En este post describiremos cómo solucionamos el nivel 3, en el que se entregaba un binario de tipo ELF de 64 bits. Al ejecutarlo mostraba lo siguiente:

De forma que al escribir, el programa finalizaba indicando el siguiente mensaje:

Para resolver el desafío hicimos un desensamblado del binario, y analizamos su comportamiento. En primer lugar el programa imprimía por pantalla el texto que hemos podido ver anteriormente:

Imagen

 

A continuación entraba en un bucle de 10 iteraciones, en el que se van leyendo los caracteres introducidos por el usuario y se comparan con el contenido de la variable «facebookctf_rocks». Esta variable es un array de DWORDs, en las que el byte más significativo de cada DWORD contiene el valor que va a comparar con el carácter introducido por el usuario, y los otros 3 bytes de la DWORD son ceros.

Imagen

 

El contenido de la variable «facebookctf_rocks» es el siguiente:

20 00 00 00

53 00 00 00

55 00 00 00

52 00 00 00

50 00 00 00

52 00 00 00

49 00 00 00

53 00 00 00

45 00 00 00

21 00 00 00

Y teniendo en cuenta lo explicado anteriormente, se corresponde con la cadena “\x20\x53\x55\x52\x50\x52\x49\x53\x45\x21”, o lo que es lo mismo » SURPRISE!» (con un espacio al principio). 

Si introducimos esa cadena, el programa muestra el siguiente mensaje:

 

Una forma alternativa de obtener la clave (sin introducir el texto), es analizar la parte final del binario, en la que se aprecian tres caminos diferentes: que se haya presionado la tecla de salida (call seeyaaaa), que se haya introducido un carácter que no es el esperado (call game_over), o que se haya introducido la cadena esperada (call success).

Imagen

 

Por lo que si debugueamos el programa y modificamos el EIP por la dirección de memoria donde se llama a la función «success» (0x000000000040117B), obtendremos el mismo resultado. 

En breve publicaremos la solución de los otros 2 niveles 🙂

Saludos!!