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

15 de abril de 2012

Evolución de Android en Seguridad


El objetivo de este post es realizar un listado sobre como ha ido evolucionando en seguridad Android; permitiendo a un usuario conocer las vulnerabilidades y características de su sistema Android en cuanto a seguridad se refiere.

Este listado solo se listarán fallos y mejoras a nivel de sistema y que afectan a el mismo, es decir:

Quedan descartados los fallos en las aplicaciones de terceros o externas al sistema, como pueden ser Skype (CVE-2011-1717), el SDK de Android (CVE-2011-1001, CVE-2008-0985, ...), Flash (CVE-2011-2460, CVE-2011-2459, …), entre otras.

Otro ejemplo que excluiré son los fallos CVE-2008-7298 y/o CVE-2011-2344 que afecta a la seguridad de las cookies en una conexión, y no están incluida ya que no tienen un impacto directo contra el sistema.

Tampoco tendremos en cuenta fallos que afecten a fabricantes en exclusiva, como por ejemplo, la vulnerabilidad CVE-2011-3975 que afecta a algunos modelos de HTC. O las versiones de la 2.3.5 a la 2.3.7 que solo de están disponibles para algunos dispositivos.

He intentado mostrar las fuentes originales y no perder ninguna vulnerabilidad o fallo importante. Si conocéis alguno que me olvide encantado de añadirlos, solo tenéis que comentar. xD

Voy ha distinguir tres apartados:
Soluciona: Indica que ha sido publicada de forma clara, que este fallo ha sido solucionado en esa versión.
Nuevo: Nueva mejora implementada.
Vulnerable: Indica que esa versión en vulnerable, pero no se especifica cuando ha sido solucionada.

Febrero 2009 v1.1

  • Soluciona:
    CVE-2009-0475 (Ejecución de código a través de Mp3)
    CVE-2009-0606 (Elevación de privilegios)
    CVE-2009-0607 (Múltiples desbordamientos de enteros)
    CVE-2009-0608 (Desbordamiento de entero)

Abril 2009 v1.5 r1

Mayo 2009 v1.5 r2

Julio 2009 v1.5 r3

Septiembre 2009 v1.6 r1

Octubre 2009 v2.0

  • Nuevo:
    Kernel 2.6.29
  • Vulnerable:
    CVE-2009-1442 (Posible ejecución de código a través de “Skia”)
    CVE-2010-EASY (Elevación de privilegios, exploit RageAgainsttheCage)

Diciembre 2009 v1.6 r2

Diciembre 2009 v2.0.1

Mayo 2010 v2.2 r1

Julio 2010 v2.2 r2

Diciembre 2010 v2.3

Julio 2011 v2.2 r3

Febrero 2011 v2.3.3, v3.0

Mayo 2011 v2.3.4, v3.1 r1 y r2

Julio 2011 v3.0 r2

  • Nuevo:
    Kernel 2.6.36
    DRM
    Cifrado de disco
    Mejora de Políticas de seguridad

Julio 2011 v3.1 r3, 2011 v3.2

Octubre 2011 v4.0


[UPDATE]



OTRAS NOTAS:
Busqueda sistemática de fallos de fuga de información
http://www.csc.ncsu.edu/faculty/jiang/pubs/NDSS12_WOODPECKER.pdf
http://www.youtube.com/watch?v=xGwTviVRcrg
http://www.xda-developers.com/android/discover-undisclosed-apis-with-androids-secret/

15 de junio de 2010

Listando contactos en Android con "Android.Contact"

Como prometí en el primer post sobre Android hoy voy a esplicar un poco de código de Android.

En este ejemplo podremos ver como se obtiene datos de contactos con una API menor de 5, es decir para los moviles con Android 1.x y actualmente se encuentra deprecated (obsoleta), en general esto quere decir que en un futuro será eliminada. Pero no obtante este no es el caso, ya que esta API continuará activa, pero sólo devolverá datos de la primera cuenta de Google creada.

Para el API 5 se creó la clase "ContactsContract", más reciente, que permite acceder a múltiples cuentas y agregar contactos que tengan un apoyo similar.

Para este ejemplo vamos a usar un "Cursor" para acceder a los datos, la clase "Contacts.Phones" para obtener las constantes para acceder a los datos de la agenda. Por supuesto, para poder leer esto es necesario tener permiso para leer la agenda. (Puedes descargar el codigo desde http://pastebin.com/AMGkjhzz)
@SuppressWarnings("finally")
public static boolean isContact(String num, ContentResolver contentResolver) {
 /**
  * Dado un numero de telefono num, retorna si está o no en la agenda
  * Para poder acceder a estos datos es necesario tener permiso de leectura de contactos.
  * ("android.permission.READ_CONTACTS" en AndroidManifest.xml)
  * @param num Numero de telefono
  * @param context Contexto con permisos de leectura de Contactos
  */
 boolean ret = false;
 try{
  Cursor cur = contentResolver.query(Contacts.Phones.CONTENT_URI, null, null, null, null);
  int index = cur.getColumnIndex(Contacts.Phones.NUMBER);
  while (!ret && cur.moveToNext())
   if (num.equals(cur.getString(index)))
    ret = true;
  cur.close();
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  return ret;
 }
}

Más Información:
http://developer.android.com/guide/appendix/api-levels.html

ContentResolver

16 de enero de 2010

Arquitectura de Android

Android es un sistema operativo diseñado por capas.

Android usa el Kernel de Linux 2.6 para comunicarse con la capa de Hardware, esto permite a Android ser compatible con muchos de los drivers creados para linux facilitando de este modo ciertos desarrollos. Permite también facilitar la creación de dispositivos de todo tipo (por ejemplo el e-Book Nook o enTourage eDGe corre un Android).

Sobre el kernel de Linux Android contiene ciertas herramientas, servicios y librerías que permiten dar más potencia al sistema (por ejemplo SQLite o OpenGL).

A la par de estas librerías y ayudandose de ellas existe la maquina virtual Dalvik que ejecuta fichero .dex empaquetados en un .apk (compresión en formato zip, similar al usado por java con los .jar); además Dalvik permite traducir las .class de JAVA a .dex usando la herramienta "dx".

Sobre estas tres capas existe un Framework que se encarga de gestionar las distintas llamadas que realicen nuestros programas.

Dada esta arquitectura un programador podría crear programas en C (por ejemplo) compilados para linux ARM (procesador usado en los moviles) que correría baja el núcleo. También podría crear un programa dex o java que corriera sobre la máquina virtual Dalvik. Por ultimo podría crear un programa que use el framework.

system-architecture

A continuación voy a explicar un poco más como funciona la principal funcionalidad usada para el desarrollo de aplicaciones en Android, que es la última capa explicada, el Framework.

Cuando creamos una aplicación podemos cuatro tipos de clases básicas distintas que podemos crear según el objetivo de estas. La arquitectura de Android define estos cuatros elementos de los que podemos heredar:

  • Activities:
    Toda clase que como consecuencia de instanciarla implique una impresión por pantalla. En un programa lector de rss sería la pantalla donde lista los elementos nuevos por ejemplo.

  • Services:
    Un servicio sería todo proceso que corre sin necesidad de usar un interfaz gráfico. Siguiendo con el ejemplo de antes un servicio sería el proceso que se encarga de ir comprobando cada X tiempo si hay o no algo nuevo en el RSS.

  • Intent:
    Es la interpretación abstracta de una acción. Semejante a un evento o interrupción. (Un click, pulsación en pantalla o pulsación de un botón)

  • Content providers & Broadcast receivers
    Este es un aspecto novedoso y jugoso de Android, bajo mi punto de vista. Está enfocado a la reutilización de código en una aplicación, por tanto una aplicación puede tener ciertos elementos que sean llamados por cuales quieran otras aplicaciones para que realice una acción.
    La diferencia entre "Content providers" y "Broadcast receivers" es que los primero trabajan sobre URIs, es decir sobre tipos de datos MIME, y los segundos trabajan a nivel de "Intent". En el ejemplo uno sería llamado cuando se encontrara el valor "application/rss+xml" y otro cuando se lanza un "Intent".


Fuentes:

http://www.dalvikvm.com/
http://developer.android.com/guide/

6 de enero de 2010

Un poco de Android

Recientemente por un incidente con un pantalón un poco ajustado he perdido parte de la pantalla de mi ex-Nokia N82. Es la segunda vez que pasa, así que he decidido pillarme un nuevo móvil.

Mi nuevo móvil es un HTC Tatoo con un Android 1.6 corriendo como sistema operativo. Yo hubiera preferido haber pillado un HTC Hero, pero el presupuesto no da.

He pillado un Android para poder hacer algún programilla y probar si alguna aplicación que ya programé para mi antiguo Nokia.

En el tema de seguridad solo he podido encontrar dos vulnerabilidades en este sistema y ambas han ocurrido en la versión 1.5.

¿Que es Android?


Android es un sistema operativo para móviles basado en el kernel de Linux. Inicialmente lo desarrolló Google pero luego ha pasado a pertenecer a la Open Handset Alliance (formada por alrededor de 50 empresas del sector). Android trabaja con dos licencias, GPLv2 para componentes como los parches del kernel y Apache 2 para las aplicaciones ya que permite su comercialización de manera más simple.

Android está pensado para trabajar de manera similar a un Framework que además permite la intercomunicación entre distintas aplicaciones usando un interfaz propio para cada aplicación. El modelo usado por Android permite que los distintos programas informen al resto de que capacidades tienen y así el resto de programas pueden usarlas sin necesidad de implementarlas. El mecanismo es similar al usado por las DLLs.

  • Versiones:


Existen varias versiones de Android que podemos encontrar en el mercado, según fuentes oficiales se distribuyen del siguiente modo según dispositivos:



Para poder diferenciar las distintas versiones

Esisten distintos Niveles de API según las versiones, de este modos podemos crear un programa con escalable para distintas versiones.
Para Android 2.0.1 la API 6, para 2.0 API 5, parar 1.6 API 4, para 1.5 API 3, para 1.1 API 2 y para 1.0 API 1

Primeras impresiones


Bueno lo primero que destacaría de Android, por lo menos de la versión que tengo en la mano es que el interfaz es un poco complicado de manejar, aún que recueda mucho al de iPhone.

No contiene un gestor de directorios integrado. Personalmente a mi me gusta poder moverme por los directorios y buscar cosas.

Creo que el recolector de basura usado por Android podría mejora un poco, de hecho existen aplicaciones que realizan las funciones típicas de un recolector.

Más Información:


http://www.openhandsetalliance.com
http://www.android.com
http://code.google.com/intl/es-ES/android