13 febrero 2012

La protección de datos en la auditoría de aplicaciones IOS


El modelo de seguridad de iOS se basa en cuatro capas: seguridad del dispositivo (acceso físico), seguridad de los datos almacenados, seguridad de las comunicaciones y seguridad de las aplicaciones.

Tal vez el aspecto más importante a analizar durante una auditoría de aplicaciones móviles es el método para almacenar y acceder a datos personales o confidenciales. En la actualidad este es el problema que más veces se presenta y generalmente tienen una criticidad alta. Un ejemplo claro de esta vulnerabilidad es lo ocurrido y reportado a Whatsapp el año pasado por Yago.

En la entrada de hoy se van a enumerar los lugares y ficheros más comunes que se han de comprobar en un dispositivo, aunque tal vez lo mejor sea comenzar por comentar la estructura básica de una aplicación.

El directorio de cada aplicación (/var/mobile/Applications/[GUID]) se compone de:

NombreApp.app/: directorio con el binario y contenido estático de la aplicación.
  • Documents/: archivos que serán compartidos con el escritorio usando iTunes.
  • Library/: ficheros adicionales de la aplicación.
  • Library/Preferences/: ficheros de preferencias específicas de la aplicación.
  • Library/Caches/: ficheros que han de ser persistentes a distintas ejecuciones de la aplicación.
  • tmp/: ficheros temporales de cualquier tipo y que no han de ser persistentes en reinicios o distintas ejecuciones de la aplicación

FICHEROS PLIST
Como ya se ha visto anteriormente son ficheros que pueden incluir cualquier tipo de dato que crea conveniente el desarrollador, como credenciales, cookies, permisos, etc. En ocasiones pueden cifrar o codificar algún campo, por lo que se comprobará si es reversible o débil o incluso si hay datos confidenciales directamente en texto claro.

Los ficheros plist están en cualquier directorio dentro de la aplicación y se pueden abrir con un editor de texto en caso de los XML y con un editor como plist Editor si son binarios.

La captura siguiente es un ejemplo de iDelicious, una aplicación para consultar los bookmarks del servicio delicious:


FICHEROS DE BASES DE DATOS SQLITE
Ocurre exactamente lo mismo que en el caso anterior, solo que se almacenan en una base de datos del tipo SQLite y para abrirlos hará falta un interprete como: SQLite Administrator, también están en el directorio de la propia aplicación y tienen de extensión .sqlite o .db.

El mejor ejemplo la ya mencionada entrada de Yago, donde se mostraba que una vez borrabas una conversación desde la aplicación WhatsApp, está dejaba de ser mostrada, pero el contenido seguía presente.

FICHERO DE DICCIONARIO PREDICTIVO PARA TECLADO:
Es una base de datos donde se almacenan palabras que no están en el diccionario. En él se pueden guardar usuarios, contraseñas, PIN y cualquier dato de validación. Es similar al "autocomplete" de los formularios web. Por ese motivo la aplicación debe especificar en qué sitios no quieren que sean almacenados.

Se encuentra en el directorio: /private/var/mobile/Library/Keyboard/es_ES-dynamic-text.dat y pese a que su acceso no está permitido de forma nativa, un móvil infectado por malware si puede consultarlo y enviarlo.

CAPTURAS DE PANTALLA
Para crear el efecto "bonito" cada vez que se pulsa el botón "home" y se vuelve al menú del móvil, el sistema genera una captura de pantalla con el contenido que es almacenada en el directorio: Library/Caches/Snapshots/ de cada aplicación. El efecto se puede evitar en caso de que el contenido pueda ser confidencial, al igual que ocurre con las páginas cacheadas de un navegador. Otra opción es diseñar las vistas teniendo en cuenta este problema. 

COPIAR Y PEGAR
Si la aplicación utiliza la característica de copiar y pegar texto, este puede ser accedido por otra aplicación del portapapeles y es almacenada en el fichero: /var/mobile/Library/Caches/com.apple.UIKit.pboard, para analizar esto, tan solo hay que revisar en que sitios se permite copiar y pegar y pensar si "importa" que esos datos sean accedidos por otra aplicación. Por ejemplo, un campo password, nunca debería poder ser copiado.

Debido a que esto es conocido, en nuevas versiones de IOS ya no permite nunca copiar desde un campo de contraseña, aunque si en otros que se han de revisar. La siguiente imagen muestra un ejemplo de la aplicación gmail

Ejemplo: no se muestra opción "copiar"
FICHEROS CACHEADOS
En algunas aplicaciones  es posible que se almacene ficheros confidenciales o con algún tipo de dato de interés sin cifrar. Se han de revisar los directorios "Library/Caches", "tmp/" y "Documents/".

FICHEROS DE LOG
Generados en casos de errores o por los desarrolladores para incluir trazas de depuración, son susceptibles de incluir datos confidenciales. Se revisan en el propio sistema en la ruta /private/var/log/system.log, /User/Library/Logs/CrashReporter  y en los datos locales de iTunes de la estación de trabajo, en el directorio: C:\Users\[USER]\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice/[nombredispositivo]


ESQUEMAS URL
Son utilizados para invocar una acción determinada de una aplicación, por ejemplo "mailto://" para enviar un correo, o twitter:// para invocar el cliente de Twitter. Se definen en el archivo Info.plist mediante el uso de CFBundleURLSchemes, Es conveniente descifrar el binario y buscar strings para conocer sus métodos.

Un ataque podría provocar que se ejecuten acciones no deseadas, similar a un cross-site-request-forgery. Como por ejemplo añadir esto en una página: [iframe]twitter://post?soy_un_luser[/iframe]








4 comments :

☠ Dani Martinez ☠ dijo...

muy interesante si no tienes ni idea de por donde empezar a darle a una App iOS. Aunque te dejaste en las Apps online meter un proxy transparente entre medias a ver que hay por ahí. Un saludo!

Alejandro Ramos dijo...

Gracias Dani.

No, no me lo dejé, está escrito la semana pasada (no lo verías) incluyendo como hacerlo en caso de SSL y añadir el certificado ;-)

☠ Dani Martinez ☠ dijo...

 :o cierto!! http://www.securitybydefault.com/2012/02/interceptar-con-un-proxy-peticiones-ssl.html

Rafi dijo...

Se me había quedado atrás este post y me ha parecido muy interesante. 
Por cierto, no me había fijado antes en que la opción de copiar no está disponible... ahora lo miraré más.