Estructura y formulación del Modelo de Seguridad

Transcripción

Estructura y formulación del Modelo de Seguridad
Ingeniería de Sistemas
CIS1310SD03
ESTRUCTURA Y FORMULACION DE UN MODELO DE
SEGURIDAD
El siguiente documento explicará la estructura y arquitectura del modelo de seguridad propuesto en
el Trabajo de Grado. El primer capítulo describe el objetivo del modelo de seguridad a proponer, el
segundo capítulo hace referencia a las políticas de seguridad que se tienen en cuenta para el
desarrollo del modelo, el tercer capítulo define la arquitectura del modelo de seguridad, teniendo en
cuenta: componentes, arquitectura de la plataforma, mecanismos de seguridad existentes, ataques y
principios de seguridad de la información. Además, en este capítulo se realiza la identificación de
componentes por parte del modelo para los ataques descritos en el Documento de Ataques según
Principios de Seguridad. El cuarto capítulo establece las conclusiones a las que se llegó mediante el
desarrollo de este documento y por último, el quinto capítulo contiene las referencias para la
elaboración del documento.
RAUL CALERO ASENCIOS
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERIA
CARRERA DE INGENIERIA DE SISTEMAS
BOGOTÁ, D.C.
2013
Documento de Trabajo de Grado - <Proyecto de investigación>
Contenido
1.
OBJETIVO DEL MODELO .................................................................................................... 4
2.
POLITICAS DE SEGURIDAD ............................................................................................... 4
2.1
Definición ............................................................................................................................... 4
2.2
Aspectos de una política de seguridad ................................................................................. 4
2.3
Objetivos de la seguridad en Android ................................................................................. 5
2.4
Políticas de seguridad para el modelo propuesto ............................................................... 6
2.4.1
SELINUX ............................................................................................................................ 6
2.4.2
SEANDROID ...................................................................................................................... 7
2.4.3
POLITICAS DEL API DE ADMINISTRACION DEL DISPOSITIVO ............................ 7
3.
ARQUITECTURA DEL MODELO DE SEGURIDAD ...................................................... 11
3.1
Arquitectura de la plataforma Android 4.1 ...................................................................... 12
3.2
Sistema de componentes de aplicación .............................................................................. 13
3.3
Descripción de la arquitectura ........................................................................................... 14
3.3.1
APLICACIONES .............................................................................................................. 14
3.3.2
FRAMEWORK DE APLICACION ................................................................................. 14
3.3.3
FRAMEWORK DE LIBRERIAS Y TIEMPO DE EJECUCION .................................... 15
3.3.3.1
LIBRERIAS: ..................................................................................................................... 15
3.3.3.2
TIEMPO DE EJECUCION ANDROID: .......................................................................... 15
3.3.4
KERNEL DE LINUX ....................................................................................................... 16
3.4
Mecanismos de seguridad a nivel de componentes........................................................... 17
3.4.1
CARACTERISTICAS GENERALES DE SEGURIDAD EN ANDROID ...................... 17
3.4.2
SEGURIDAD A NIVEL DE SISTEMA Y KERNEL ...................................................... 18
3.4.3
CARACTERISTICAS DE SEGURIDAD DEL USUARIO ............................................. 21
3.4.4
SEGURIDAD DE APLICACIONES ................................................................................ 22
3.4.5
INVESTIGACIONES REALIZADAS ............................................................................. 25
3.5
Mejoras de seguridad en Android 4.1 ............................................................................... 25
3.6
Modelo de seguridad basado en los ataques y principios ................................................ 27
3.6.1
DIAGRAMA GENERAL ................................................................................................. 27
3.6.2
MITIGACION POR CAPAS: APLICACIONES ............................................................. 29
Página 2
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.3
MITIGACION POR CAPAS: FRAMEWORK DE APLICACION................................. 30
3.6.4
MITIGACION POR CAPAS: LIBRERIAS / TIEMPO DE EJECUCION ANDROID ... 31
3.6.5
MITIGACION POR CAPAS: KERNEL DE LINUX ...................................................... 32
3.6.6
IDENTIFICACION DE COMPONENTES DEL PRIMER ATAQUE: iCalendar .......... 33
3.6.7
IDENTIFICACION DE COMPONENTES DEL SEGUNDO ATAQUE: Android.Stels 34
3.6.8
IDENTIFICACION DE COMPONENTES DEL TERCER ATAQUE: BadNews .......... 35
4.
CONCLUSIONES ................................................................................................................... 36
5.
REFERENCIAS ...................................................................................................................... 37
Página 3
Documento de Trabajo de Grado - <Proyecto de investigación>
1. OBJETIVO DEL MODELO
El modelo de seguridad tiene como objetivo mitigar los problemas derivados de las
vulnerabilidades en dispositivos móviles Android con respecto a los principios de Integridad,
Confidencialidad y Disponibilidad.
Para lograr este objetivo, el modelo debe identificar correctamente los componentes afectados por
los ataques, basados en la descripción del ataque (características) y en la descripción de los
componentes que conforman la arquitectura de la plataforma Android versión 4.1 (interacción con
otros componentes, responsabilidades, entre otros).
2. POLITICAS DE SEGURIDAD
2.1 Definición
Uno de los componentes de los modelos de seguridad son las políticas de seguridad. Una Política de
seguridad es un conjunto de requisitos definidos por los responsables de un sistema, que indica en
términos generales que está y que no está permitido en el área de seguridad durante la operación
general del sistema [1].
La RFC 1244 define una Política de seguridad como una “declaración de intenciones de alto nivel
que cubre la seguridad de los sistemas informáticos y que proporciona las bases para definir y
delimitar responsabilidades para las diversas actuaciones técnicas y organizativas que se
requerirán” [2].
A grandes rasgos, la formulación de políticas de seguridad conlleva a:
-
Un análisis de riesgos, para adecuar políticas al contexto.
Tener unos encargados para monitorizar las operaciones y los cambios en las políticas de
seguridad.
En el caso del Proyecto de investigación, nuestros cambios en las políticas de seguridad se ven
relacionados con el versionamiento de la plataforma. Para el alcance de este proyecto, se tuvo en
cuenta las políticas definidas por la plataforma Android versión 4.1.
2.2 Aspectos de una política de seguridad
Generalmente en la definición de una política de seguridad, se tienen algunos conceptos aplicados,
como [3]:
Decisión: elección de un curso de acción determinado entre varios posibles.
Plan: conjunto de decisiones que definen cursos de acción futuros y los medios para conseguirlos.
Consiste en diseñar un futuro deseado y la búsqueda del modo de conseguirlo.
Estrategia: conjunto de decisiones que se toman para determinar políticas, metas y programas.
Página 4
Documento de Trabajo de Grado - <Proyecto de investigación>
Política: definiciones establecidas por la dirección, que determina criterios generales a adoptar en
distintas funciones y actividades donde se conocen las alternativas ante circunstancias repetidas.
Meta: objetivo cuantificado a valores predeterminados.
Procedimiento: definición detallada de pasos a ejecutar para desarrollar una actividad determinada.
Norma: forma en que realiza un procedimiento o proceso.
Programa: secuencia de acciones interrelacionadas y ordenadas en el tiempo que se usan para
coordinar y controlar operaciones.
Proyección: predicción del comportamiento futuro, basándose en el pasado sin el agregado de
apreciaciones subjetivas.
Pronóstico: predicción del comportamiento futuro, con el agregado de hechos concretos y
conocidos que se prevé influirán en los acontecimientos futuros.
Control: capacidad de ejercer o dirigir una influencia sobre una situación dada o hecho. Es una
acción tomada para hacer un hecho conforme a un plan.
Riesgo: proximidad o posibilidad de un daño, peligro. Cada uno de los imprevistos, hechos
desafortunados, entre otros, que puede tener un efecto adverso. Sinónimos: amenaza, contingencia,
emergencia, urgencia, apuro.
2.3 Objetivos de la seguridad en Android
-
Proteger datos de usuario
Proteger recursos del sistema
Proveer asilamiento de aplicaciones
Para alcanzar estos objetivos, la plataforma provee características clave de seguridad como: una
seguridad robusta a nivel de sistema operativo a través del kernel de Linux, un componente
Application Sandbox para todas las aplicaciones, una comunicación entre procesos segura, firma de
aplicaciones y unos permisos de usuario y aplicación garantizados.
Página 5
Documento de Trabajo de Grado - <Proyecto de investigación>
2.4 Políticas de seguridad para el modelo propuesto
2.4.1 SELINUX
Secutiry Enhanced Linux (SELinux) [4], implementa una política impulsada por control obligatorio
de acceso (MAC) para el kernel de Linux. Una decisión de diseño esencial de su arquitectura es que
la toma de decisión de una política, se desvincula de la política de aplicación lógica. SELinux usa el
módulo de seguridad de Linux (LSM) que ofrece acceso a varios puntos de aplicación de control de
bajo nivel de recursos como archivos, IPC local o protecciones de memoria.
Cuando una operación del LSM se da, por ejemplo: se abre un archivo, el módulo SELinux solicita
una decisión de política de un servidor de seguridad en el kernel que gestiona las reglas de las
políticas y contiene el acceso a las decisiones lógicas. Dependiendo de la decisión del servidor de
seguridad, el módulo de seguridad de SELinux deniega o permite la operación para proceder.
En un sistema SELinux cada objeto (archivos, canales IPC, ect) y sujeto (procesos) esta etiquetado
con un contexto de seguridad que consiste en una tripleta de atributos (usuario, rol y tipo). Estos
atributos determinan a que objetos un sujeto puede acceder.
El refuerzo de tipos (type enforcement) es el mecanismo primario de control de acceso en SELinux
y está basado en el tipo de contexto del atributo. Por defecto, todos los accesos son negados y deben
ser garantizados explícitamente a través de reglas de políticas permitir reglas en terminología
SELinux.
El atributo usuario y rol forman la base para el control de acceso Role-Bases que se basa en el
refuerzo de tipos definiendo que tipo y que combinaciones de rol son válidas para cada usuario en la
política.

Políticas dinámicas:
SELinux también implementa políticas dinámicas como banderas booleanas que afectan
decisiones de políticas condicionales en tiempo de ejecución. Los booleanos y las
condiciones deben definir prioridad al despliegue de políticas. Las condiciones/booleanos
nuevos no pueden ser añadidas después de que la política ha sido cargada sin recompilar la
política entera.
Ejemplos de políticas dinámicas: booleanos que cambian entre “modo cumplimiento” y
“modo permisivo”.
El mecanismo de políticas dinámicas esta implementado en forma de declaraciones if para
permitir reglas en la política.

Administradores de objetos espaciales de usuario (USOMs) (Userspace Object
Managers):
Responsables de asignar contextos de seguridad a los objetos que manejan, consultando el
servidor de seguridad SELinux para decisiones de control de acceso y haciendo cumplir
estas decisiones.
Ejemplos de USOMs: X Windows System Server [5], GConf [6] , SE-PostgreSQL [7]
Página 6
Documento de Trabajo de Grado - <Proyecto de investigación>
2.4.2 SEANDROID
Prototipa SELinux para el kernel de Linux en Android [8] [9]. Distribuye servicios del sistema y
aplicaciones en diferentes espacios del dominio de seguridad del kernel, aislando aplicaciones entre
sí por medio del servicio de Multi-level security (MLS) de SELinux [4].





SEAndroid hace del Binder Driver de Android un Manejador de Objetos de Espacio en
Kernel (KOMs) (KernelSpace Object Manager), asegurando que todo Binder IPC está
sujeto a toda la aplicación de las políticas de SE Android.
SEAndroid etiqueta los procesos de aplicación con contextos de seguridad específicos de
SELinux que se usan luego en el refuerzo de tipos.
Cuando se encuentra una nueva aplicación Android, los procesos son bifurcados de un
proceso del sistema (Zygote) [10], el cual viene instalado con las librerías de Android y
permite los inicios rápidos de procesos de una nueva aplicación [11].
SEAndroid emplea un mecanismo para obtener el contexto de seguridad de aplicaciones en
tiempo de instalación.
Basados en los permisos que las aplicaciones solicitan o la firma del desarrollador, a las
aplicaciones se les asigna un tipo de seguridad. El mapeo de la meta-información de las
aplicaciones a tipos de seguridad está definido en las políticas SEAndroid.
SEAndroid, además provee soporte para políticas MAC en la capa de middleware (MMAC).
MMAC consiste en tres mecanismos:



MAC en tiempo de instalación: lleva a cabo una política basada en chequeo al momento de
la instalación de nuevas aplicaciones y niega la instalación, cuando la aplicación solicita
una combinación definida de permisos
Revocación de permisos: este mecanismo anula el servicio de chequeo por defecto de
Android, con una decisión basada en políticas para permitir/denegar a una aplicación
aprovechar un permiso garantizado
Intención MAC: que protege con una aplicación de (listado blanco) el envío de Intentos
(intents) a Actividades (Activities), Receptores de Broadcast (Broadcast Receivers) y
Servicios (Services). Las reglas del (listado blanco) están basadas en el tipo de seguridad
del emisor y el receptor del mensaje de Intento, así como los datos del mensaje.
2.4.3 POLITICAS DEL API DE ADMINISTRACION DEL DISPOSITIVO
El API de Administración del dispositivo se usa para escribir aplicaciones de administración de
dispositivos que los usuarios instalan en sus dispositivos. La aplicación de administración del
dispositivo hace cumplir las políticas de seguridad [12] [13].
Una vez que se instala la aplicación de administración de dispositivos, el dispositivo está sujeto a
las políticas de este. El administrador puede:
-
Preguntar al usuario para establecer una nueva contraseña
Página 7
Documento de Trabajo de Grado - <Proyecto de investigación>
-
Bloquear inmediatamente el dispositivo
Realizar un restablecimiento de fábrica en el dispositivo, borrar los datos del usuario (si tiene
permiso)
Si el usuario no activa la aplicación de administración de dispositivos, esta se mantiene en el
dispositivo pero en un estado inactivo. Así, los usuarios no serán sujetos a sus políticas. Si un
usuario incumple con una política de la aplicación de administración de dispositivos, una vez está
instalada, la aplicación decide cómo manejar esto.
Para desinstalar una aplicación de administración de dispositivo, los usuarios necesitan primero
desactivar la aplicación como un administrador del dispositivo.
Políticas de seguridad soportadas por el API de Administración del dispositivo [12]:
Contraseña habilitada
Requiere que el dispositivo pregunte por un PIN
o contraseña.
Tamaño mínimo de la contraseña
Establece el número necesario de caracteres
para la contraseña.
Contraseña alfanumérica requerida
Requiere que la contraseña tenga una
combinación de letras y números. Estos pueden
incluir caracteres simbólicos.
Contraseña compleja requerida
Requiere que las contraseñas contengan al
menos una letra, un digito y un símbolo
especial. Introducido en Android 3.0.
Mínimo de letras requeridas en una contraseña
El mínimo número de letras requeridas en una
contraseña para todos los administradores o
para uno en particular. Introducido en Android
3.0.
Mínimo de letras minúsculas requeridas en una
contraseña
El mínimo número de letras minúsculas
requeridas en una contraseña para todos los
administradores o para uno en particular.
Introducido en Android 3.0.
Mínimo de caracteres que no son letras
requeridos en una contraseña
El mínimo número caracteres que no son letras
requeridos en una contraseña para todos los
administradores o para uno en particular.
Introducido en Android 3.0.
Mínimo de dígitos numéricos requeridos en una
El mínimo número de dígitos numéricos
Página 8
Documento de Trabajo de Grado - <Proyecto de investigación>
contraseña
requeridos en una contraseña para todos los
administradores o para uno en particular.
Introducido en Android 3.0.
Mínimo de símbolos requeridos en una
contraseña
El mínimo número de símbolos requeridos en
una contraseña para todos los administradores o
para uno en particular. Introducido en Android
3.0.
Mínimo de letras mayúsculas requeridas en una
contraseña
El mínimo número de letras mayúsculas
requeridas en una contraseña para todos los
administradores o para uno en particular.
Introducido en Android 3.0.
Tiempo de expiración de la contraseña
Cuando la contraseña caducara, expresada como
un delta en milisegundos desde cuando un
administrador del dispositivo establece el
tiempo de expiración. Introducido en Android
3.0.
Histórico de restricción de contraseñas
Esta política evita que los usuarios vuelvan a
usar las últimas contraseñas. Generalmente se
usa esta política en combinación con
setPasswordExpirationTimeout(), que obliga a
los usuarios a actualizar sus contraseñas,
después de un periodo de tiempo específico.
Introducido en Android 3.0.
Máximo de intentos fallidos de contraseña
Especifica el número de veces que el usuario
puede ingresar una contraseña errónea, antes
que el dispositivo borre sus datos. El API de
Administración del dispositivo, también permite
a los administradores, resetear el dispositivo
remotamente a su configuración de fábrica.
Bloqueo por máximo tiempo de inactividad
Establece el tiempo transcurrido desde que el
usuario toco la pantalla o un botón por última
vez, antes que el dispositivo bloquee la pantalla.
Cuando sucede esto, el usuario debe introducir
su PIN o contraseña de nuevo, antes de poder
usar su dispositivo y datos de acceso. El valor
puede ser entre 1 y 60 minutos.
Página 9
Documento de Trabajo de Grado - <Proyecto de investigación>
Requerir cifrado de almacenamiento
Especifica que el área de almacenamiento debe
ser encriptado, si el dispositivo lo soporta.
Introducido en Android 3.0.
Deshabilitar cámara
Especifica que la cámara debe ser deshabilitada.
Esta no debe ser una des habilitación
permanente, la cámara puede ser habilitada/
deshabilitada basado en el contexto. Introducido
en Android 4.0.
Una política de seguridad además puede requerir cifrado del dispositivo de almacenamiento como
en Android 3.0 o deshabilitar la cámara como en Android 4.0.
Un ejemplo de una aplicación de administración de dispositivos es el Android SDK Manager.
Página 10
Documento de Trabajo de Grado - <Proyecto de investigación>
3. ARQUITECTURA DEL MODELO DE SEGURIDAD
El presente capitulo define la arquitectura que conforma el modelo de seguridad propuesto, la
primera sección del capítulo describe la arquitectura de la plataforma Android (base fundamental
para la elaboración del modelo), la segunda sección presenta un diagrama en donde se ve la relación
de los componentes que generalmente interactúan en una aplicación de tipo Android (APK), la
tercera sección explica cada uno de los componentes mencionados en la primera sección de este
capítulo, la cuarta sección menciona los mecanismos de seguridad existentes en la plataforma, la
quinta sección menciona las mejoras en la plataforma de acuerdo a la versión en la que se desarrolló
el Trabajo de Grado (Android 4.1) y por último la quinta sección presenta el modelo de seguridad
propuesto a partir de las secciones anteriores y de la investigación realizada sobre los ataques
encontrados en la plataforma.
Página 11
Documento de Trabajo de Grado - <Proyecto de investigación>
3.1 Arquitectura de la plataforma Android 4.1
APPLICATIONS
•HOME
•DIALER
•SMS/MMS
•IM
•BROWSER
•CAMERA
•ALARM
•CALCULATOR
•CONTACTS
•VOICE DIAL
•EMAIL
•CALENDAR
•MEDIA PLAYER
•ALBUM
•CLOCK
APPLICATION FRAMEWORK
•ACTIVITY MANAGER
•WINDOW MANAGER
•CONTENT PROVIDER
•VIEW SYSTEM
•NOTIFICATION MANAGER
•PACKAGE MANAGER
•TELEPHONY MANAGER
•RESOURCE MANAGER
•LOCATION MANAGER
•XMPP SERVICE
LIBRARIES
•SURFACE MANAGER
•MEDIA FRAMEWORK
•SQLITE
•OPEN GL|ES
•FREETYPE
•LIBWEBCORE
•SGL
•SSL
•LIBC
ANDROID RUNTIME
•CORE LIBRARIES
•DALVIK VIRTUAL MACHINE
LINUX KERNEL
•DISPLAY DRIVER
•CAMERA DRIVER
•BLUETOOTH DRIVER
•FLASH MEMORY DRIVER
•BINDER IPC DRIVER
•USB DRIVER
•KEYPAD DRIVER
•WIFI DRIVER
•AUDIO DRIVER
•POWER MANAGEMENT
Página 12
Documento de Trabajo de Grado - <Proyecto de investigación>
3.2 Sistema de componentes de aplicación
Ilustración 1: Componentes de una aplicación Android [14]
Página 13
Documento de Trabajo de Grado - <Proyecto de investigación>
3.3 Descripción de la arquitectura
3.3.1 APLICACIONES
La plataforma Android tiene un conjunto de aplicaciones básicas incluyendo un cliente de email, un
programa de SMS (Short Message Service: para enviar y recibir mensajes de texto), calendario,
mapas, navegador, contactos, entre otros. Todas las aplicaciones se escriben usando el lenguaje de
programación Java [15].
3.3.2 FRAMEWORK DE APLICACION
La arquitectura de la plataforma Android, está diseñada para simplificar la reutilización de
componentes. Los desarrolladores tienen acceso completo al mismo framework de APIs usados por
las aplicaciones núcleo del sistema.
Esta capa está compuesta por los siguientes componentes [14] [16] [17]:
-
-
-
-
-
-
View System (Sistema de vista): se pueden usar para construir una aplicación, incluyendo
listas, rejillas, cajas de texto, botones e incluso navegadores web embebidos, entre otros
componentes.
Content Provider (Proveedor de contenido): permite que las aplicaciones accedan a
datos de otras aplicaciones (por ejemplo: contactos), o que compartan su propia
información. Maneja un conjunto de datos de aplicación compartidos, por ejemplo: se
puede almacenar información en un archivo del sistema, una base de datos SQLite en la
web o cualquier ubicación de almacenamiento persistente que la aplicación pueda acceder.
Los proveedores de contenido también son útiles para leer y escribir datos que son
privados para una aplicación y no compartidos.
Telephony Manager (Administrador del teléfono): provee acceso a la información
acerca de los servicios telefónicos del dispositivo. Contiene servicios y estados del teléfono,
así como acceso a información de suscriptor. Las aplicaciones pueden recibir notificaciones
sobre el cambio de estado del teléfono.
Resource Manager (Administrador de recursos): provee acceso a recursos sin código
como gráficos y archivos de diseño. Ejemplos: cadenas de texto traducidas a diferentes
idiomas, imágenes, sonidos o layouts.
Notification Manager (Administrador de notificaciones): permite a todas las
aplicaciones desplegar alertas personalizadas en la barra de estados del sistema.
Activity Manager (Administrador de actividades): maneja el ciclo de vida de las
aplicaciones y provee una navegación común.
Location Manager: provee acceso a los servicios del sistema de localización del
dispositivo, permite a las aplicaciones obtener actualizaciones de la localización geográfica
del dispositivo.
Package Manager: maneja información relacionada con los paquetes de aplicación que
están instalados actualmente en el dispositivo.
Página 14
Documento de Trabajo de Grado - <Proyecto de investigación>
-
Sensor Manager: permite manipular los elementos de hardware del teléfono como
acelerómetro, sensor de luminosidad, sensor de presión, de proximidad, de temperatura,
entre otros.
3.3.3 FRAMEWORK DE LIBRERIAS Y TIEMPO DE EJECUCION
3.3.3.1 LIBRERIAS:
Dentro de las librerías de Android, se encuentran las siguientes [16] [17]:
System C Library (Sistema de librerías de C): una implementación derivada del sistema de
librerías estándar de C (libc) atenta a los dispositivos que tengan Linux embebido.
Media libraries (Librerías media): basados en OpenCORE de PacketVideo [18], librerías que
soportan reproducción y grabación de muchos formatos populares de audio y video, así como
archivos de imágenes estáticas, como MPEG4, H.264, MP3, AAC, AMR, JPG y PNG.
Surface Manager (Administrador de superficie): maneja el acceso a subsistemas de despliegue y
a las capas de gráficos 2D y 3D de muchas aplicaciones.
LibWebCore (Librerías Web): moderno motor de navegador web que refuerza el navegador de
Android y una vista web integrable.
SGL: el motor de gráficos 2D.
3D libraries (Librerías 3D): una implementación basada en los APIs OpenGL ES 1.0 [19], las
librerías usan la aceleración del hardware 3D o la incluida (software 3D rasterizer altamente
optimizado).
Freetype: mapa de bits y fuente vectorial para representaciones (renderizado).
SQLite: un potente y ligero motor de base de datos relacional disponible para todas las
aplicaciones.
3.3.3.2 TIEMPO DE EJECUCION ANDROID:
Android incluye un conjunto de librerías principales que proveen la mayoría del funcionamiento
disponible en las librerías del lenguaje de programación Java.
Cada aplicación de Android corre en su propio proceso, con su propia instancia de la máquina
virtual Dalvik. Dalvik está hecho para que cada dispositivo pueda correr muchas máquinas virtuales
eficientemente. La máquina virtual de Dalvik ejecuta archivos en un formato ejecutable dalvik
(.dex), que esta optimizado para la cantidad de memoria mínima del sistema [16].
Página 15
Documento de Trabajo de Grado - <Proyecto de investigación>
La máquina virtual está basada en registros y corre clases compiladas por un compilador del
lenguaje Java que ha sido transformado al formato (.dex) por la herramienta incluida en el sistema
“dx”.
Este componente además se hace cargo de la distribución de tareas por medio de hilos y del manejo
de memoria de bajo nivel.
3.3.4 KERNEL DE LINUX
Android está basado en la versión 2.6 de Linux para sistema de servicios principales como
seguridad, manejo de memoria, manejo de procesos, red y drivers. El Kernel actúa como una capa
de abstracción entre el hardware y el resto de la pila de software.
Display driver (Controlador de despliegue): en este componente se tiene en cuenta tanto el
despliegue como los gráficos, las vistas y las entradas en el dispositivo.
Camera driver (Controlador de la cámara): es manejado por un servicio de cámara, accedido
mediante la clase Camera, para configurar ajustes de captura de imagen, iniciar/ detener vista
previa, sacar fotos y recuperar los marcos para la codificación del video. Para acceder al dispositivo
de Cámara, se debe declarar el permiso de “CAMERA” en el manifiesto (archivo principal) de
Android [20].
Bluetooth driver (Controlador de bluetooth): contiene funcionalidades como escaneo de
dispositivos, conexión con dispositivos y manejo de transferencia de datos entre dispositivos. Los
APIs existentes para Bluetooth permiten a las aplicaciones [21]:
-
Escanear otros dispositivos Bluetooth
Consultar el adaptador Bluetooth local, para los dispositivos Bluetooth conectados
Establecer canales o sockets RFCOMM [22]
Conectarse a sockets específicos en otros dispositivos
Transferir datos desde y hacia otros dispositivos
Para establecer una comunicación bluetooth usando los APIs, una aplicación debe declarar el
permiso de “BLUETOOTH”.
Android IPC Binder: mecanismo de comunicación interproceso, por medio de este componente un
proceso de Android llama a una rutina en otro proceso de Android, identificando el método a
invocar y enviando los parámetros entre procesos [23]. Ejemplo de comunicación inter-procesos:
Activity Manager (Administrador de actividades) – Windows Manager (Administrador de Ventana)
– Alarm Manager (Administrador de Alarmas).
En el IPC Binder, cada proceso tiene su propia dirección de memoria, se provee el aislamiento de
datos y se prevé interacción directa perjudicial entre procesos. El componente IPC Binder es la reimplementación de OpenBinder [24], el cual brinda enlaces a funciones y datos de un ambiente de
ejecución a otro.
Página 16
Documento de Trabajo de Grado - <Proyecto de investigación>
Características [23]:
-
Driver que facilita la comunicación entre procesos
Alto desempeño por memoria compartida
Pool de hilos por proceso para solicitudes de procesamiento
Conteo de referencias y mapeo de referencias de objetos a través de procesos
Llamados sincrónicos entre procesos
USB driver (Controlador de USB): comunicación con los periféricos de hardware USB. En
Android se manejan dos modos: periféricos USB y accesorios USB (hardware que implementa el
protocolo accesorio de Android). En el modo accesorio USB, el hardware USB externo actúa como
el huésped USB (host USB) [25] [26].
Keypad driver (Controlador de teclado): Android soporta una gran variedad de dispositivos de
teclado incluyendo funciones especiales (controles de volumen y encendido), teclados QWERTY
[27] [28] embebidos y teclados externos tipo computador con todas las funciones [29].
WIFI driver (Controlador de WIFI): componente que tiene funcionalidades de conexión Wifi
(acceso a redes wifi), contiene además información de velocidad de la red de Internet, direcciones
IP, estado de negociaciones e información acerca de otras redes disponibles. Android tiene APIs
que incluyen las funcionalidades de escanear, añadir, guardar, terminar e iniciar conexiones Wifi
[30].
Audio driver (Controlador de audio): componente que maneja varias interfaces de audio.
Android tiene APIs para reproducir y grabar archivos media de audio. Por ejemplo: acceso a
volumen y modo de timbre, acceso a formatos de audio, entre otros. Las clases y métodos de
interacción con el audio del dispositivo se encuentran en la API android.media de Android [31].
Power management (Manejo de energía): componente que permite el control del estado de
energía del dispositivo, por ejemplo: estados (cargando/descargando), completo, desconocido,
fuente de energía (USB, wireless, cargador de corriente alterna), entre otros [32] [33].
3.4 Mecanismos de seguridad a nivel de componentes
La plataforma Android posee una seguridad multicapas. Además, el sistema está diseñado para que
se puedan construir aplicaciones con permisos por defecto y así evitar tomar decisiones acerca de
seguridad.
3.4.1 CARACTERISTICAS GENERALES DE SEGURIDAD EN ANDROID
-
Un framework con implementaciones de funcionalidades de seguridad como criptografía,
permisos y comunicación entre procesos IPC (Interprocess Communication) segura.
Página 17
Documento de Trabajo de Grado - <Proyecto de investigación>
-
-
Tecnologías como ASLR [34], NX, ProPolice [35], safe_iop [36], OpenBSD dlmalloc [37],
OpenBSD calloc [37] y mmap_min_addr de Linux [38] para mitigar riesgos asociados con
errores de manejo de memoria comunes.
Sistema de archivos encriptado que puede ser habilitado para proteger datos perdidos o
dispositivos robados.
Permisos de usuario garantizado para restringir el acceso a características del sistema y datos
de usuario.
Permisos de aplicación para controlar datos de aplicaciones en una base por aplicación.
3.4.2 SEGURIDAD A NIVEL DE SISTEMA Y KERNEL
A nivel de sistema operativo, la plataforma Android ofrece la seguridad del Kernel de Linux así
como una IPC (comunicación entre procesos) segura, para así permitir la comunicación segura entre
aplicaciones que corren en diferentes procesos. Incluso el código nativo está restringido por el
Application Sandbox.
Seguridad Linux [39]: el kernel de Linux es usado en millones de ambientes de seguridad, Linux
se ha convertido en un kernel confiable y estable. El kernel provee a la plataforma, varias
características de seguridad como:
-
Un modelo de permisos basado en el usuario
Aislamiento de procesos
Un mecanismo extensible para IPC segura
La habilidad de remover partes del kernel que no sean necesarias y que sean potencialmente
inseguras
Como sistema operativo multiusuario, Linux pretende aislar recursos de usuario para:
-
Prevenir que el usuario A lea archivos del usuario B
Asegurar que el usuario A no gaste la memoria del usuario B
Asegurar que el usuario A no gaste recursos de CPU del usuario B
Asegurar que el usuario A no gaste dispositivos del usuario B (por ejemplo: GPS, bluetooth,
entre otros)
Application Sandbox [39]: la plataforma Android asigna un ID de usuario único (UID) a cada
aplicación y corre cada aplicación en un proceso por separado. Es decir, cada aplicación tiene sus
propios permisos. Cada uno de los procesos que provengan de la aplicación será ejecutado en el
contexto de ese UID que se encarga del acceso a recursos de bajo nivel.
El kernel presenta seguridad entre aplicaciones y el sistema a nivel de procesos, a través de IDS de
usuarios y de grupos asignados a las aplicaciones. Las aplicaciones tienen acceso limitado al
sistema operativo. Si la aplicación A trata de hacer algo malicioso como leer datos de la aplicación
B o marcar un número telefónico sin permiso, el sistema operativo protege esto, porque la
aplicación A no tiene privilegios de usuario apropiados.
Página 18
Documento de Trabajo de Grado - <Proyecto de investigación>
El Sandbox es simple y está basado en una separación de procesos de usuario estilo UNIX y
permisos de archivos. Como el Application Sandbox se encuentra en el Kernel, el modelo de
seguridad se extiende a código nativo y aplicaciones del sistema operativo. Todos los componentes
que están arriba del Kernel en la arquitectura de la plataforma corren dentro del Application
Sandbox.
En Android no hay restricciones acerca de cómo debe ser escrita una aplicación para brindar
seguridad. Para romper la seguridad en el Application Sandbox, se debe comprometer la seguridad a
nivel del Kernel de Linux.
Partición del sistema y modo seguro [39]: la partición del sistema contiene el Kernel de Android,
así como las librerías del sistema operativo, las aplicaciones y las aplicaciones en tiempo de
ejecución. La partición está configurada como solo lectura. Cuando un usuario arranca el
dispositivo en modo seguro [40] [41], solo las aplicaciones principales de Android están
disponibles, lo cual asegura que el ambiente donde carga el dispositivo del usuario esté libre de
software pirata o software que es parecido al de una compañía dedicada a la venta del mismo.
Permisos del sistema de archivos: permisos que aseguran que un usuario no pueda alterar o leer
archivos de otro usuario.
Cifrado [39]: la plataforma Android provee un conjunto de APIs criptográficos para el uso de
aplicaciones. Aquí se encuentran implementaciones estándar como AES (Advanced Encryptation
Standard) [42], RSA (Rivest, Shamir y Adleman) [43] [44], DSA (Algoritmo de firma digital) [45]
y SHA [46] [47]. Los APIs son proporcionados para protocolos de comunicación de alto nivel como
SSL [48] y HTTPS [49] [50] (protocolos criptográficos de comunicación segura a través de la red o
Internet).
Android 4.0 introdujo la clase KeyChain [51] dentro de su API, la cual permite a las aplicaciones
usar la credencial de almacenamiento del sistema para acceder a llaves privadas y certificados.
Mejoras de seguridad en el Manejo de Memoria [39]:
Android 1.5+:
-
ProPolice [35] para prevenir saturaciones del buffer de pila.
Safe_iop [36] para reducir desbordamiento de entero.
Extensiones a OpenBSD dlmalloc [37] para prevenir vulnerabilidades double free [52] [53]
(que ocasiona desbordamiento de pila) y para prevenir chunk consolidation attacks [54] [55].
OpenBSD calloc para prevenir desbordamiento de enteros durante asignación de memoria.
Android 2.3+:
-
Protección a vulnerabilidades de formato cadena no controlado [56] (-Wformat-security –
Werror=format-security), las cuales radican en el uso sin control de las entradas de los usuarios
a un sistema como parámetros de cierta función.
Página 19
Documento de Trabajo de Grado - <Proyecto de investigación>
-
-
Hardware-based No eXecute (NX) para prevenir ejecución de código en la pila, separando las
áreas de memoria usadas para albergar las instrucciones del procesador (código) y las de
almacenamiento de datos.
Linux mmap_min_addr [38] para mitigar desreferenciación de privilegios null pointer.
Android 4.0+:
-
Address Space Layout Randomization (ASLR) [34], para aleatorizar lugares clave en memoria.
Android 4.1+:
-
-
Soporte PIE(Ejecutable independiente de posición) [57] [58], es código de máquina que se
coloca en algún lugar de la memoria principal y se usa para bibliotecas compartidas, para que
el mismo código de la biblioteca, se pueda cargar en una ubicación en cada espacio de
direcciones de programa en el que no se solapará con cualquier otro uso de la memoria.
Reubicación de solo lectura/ enlazamiento inmediato (-WI, -z, relro –WI, now).
dmesg_restrict [59] habilitado (para evitar fugas de direcciones Kernel).
kptr_restrict habilitado (para evitar fugas de direcciones Kernel).
Android 4.2+:
-
FORTIFY_SOURCE [60], para realizar limites automáticos de comprobación de funciones
peligrosas y así, prevenir desbordamiento de buffer.
Root de dispositivos [39]: en la plataforma Android solo el Kernel y un pequeño subconjunto de
aplicaciones núcleo corren con permisos de root. Android no previene a un usuario o aplicación con
permisos de root, de modificar el sistema operativo, el Kernel y cualquier otra aplicación. Los
permisos root proveen acceso completo a todas las aplicaciones y a todos los datos de las
aplicaciones.
Los usuarios que cambian permisos en Android para obtener accesos root en las aplicaciones,
incrementan la inseguridad por parte de aplicaciones maliciosas y fallas potenciales en aplicaciones.
El cifrado de datos con una llave alojada en el dispositivo, no protege los datos de la aplicación de
los usuarios root. Las aplicaciones pueden añadir una capa de protección de datos usando cifrado
con una llave que no se aloje en el dispositivo (por ejemplo: en un servidor). Esto produce
seguridad temporal, pero en algún momento la llave debe ser proporcionada a la aplicación y por
ende, se convierte accesible a usuarios root.
Página 20
Documento de Trabajo de Grado - <Proyecto de investigación>
3.4.3 CARACTERISTICAS DE SEGURIDAD DEL USUARIO
Cifrado del sistema de archivos [39]: desde la versión 3.0 de la plataforma Android, en adelante,
se provee un sistema de cifrado de archivos completo. Toda la información de usuario puede ser
cifrada en el kernel, usando la implementación dmcrypt de AES128 (Advanced Encryptation
Standard) [42] con CBC y ESSIV:SHA256 [47][46].
La llave de cifrado es protegida por AES128 usando una llave derivada del usuario contraseña,
previniendo acceso no garantizado a la información almacenada sin la clave del usuario del
dispositivo. Para proveer resistencia contra ataques de fuerza bruta [61] o rainbow tables [62] (un
tipo especial de tabla de búsqueda, usada en la recuperación de contraseñas en texto plano de un
texto cifrado), la contraseña es combinada con un número aleatorio y un hash usando el algoritmo
estándar PBKDF2 [63].
Para proveer resistencia ante ataques de diccionario de contraseñas [64], Android provee reglas de
complejidad de contraseñas que pueden ser establecidas por el administrador del dispositivo y
ejecutadas por el sistema operativo. El cifrado del sistema de archivos requiere el uso de un usuario
- contraseña.
Protección de contraseñas [39]: la plataforma Android puede ser configurada para verificar una
contraseña proporcionada por el usuario antes de suministrar acceso al dispositivo. Además de
prevenir el uso no autorizado del dispositivo, esta contraseña protege la llave para el cifrado
completo del sistema de archivos.
Administración del dispositivo [39]: desde la versión 2.2 de la plataforma Android en adelante, se
proporciona el API de Administración del Dispositivo Android, el cual provee características de
administración del dispositivo a nivel de sistema. Por ejemplo, la aplicación integrada de correo
electrónico utiliza la API de Android para mejorar el apoyo Exchange (herramienta para cuentas de
correo). A través de la aplicación de correo electrónico, los administradores pueden hacer cumplir
las políticas de contraseñas, incluyendo contraseñas alfanuméricas o PIN numérico a través de
dispositivos. Los administradores también pueden borrar de forma remota (restaurar los valores
predeterminados de fábrica) teléfonos perdidos o robados.
Almacenamiento de credenciales [39]: la plataforma Android incluye por defecto un conjunto de
Autoridades Certificadoras (CAs) que son confiables para operaciones como establecer conexiones
SSL dentro de un navegador. Desde la versión 4.0 de la plataforma Android en adelante, los
usuarios pueden deshabilitar estas Autoridades Certificadoras preinstaladas dentro de la
configuración del sistema. Además, los usuarios pueden agregar CAs o certificados al sistema,
importándolas por medio USB.
Desde la versión 4.1 de la plataforma Android, en adelante, se permite a los OEMs (fabricantes de
equipo original) añadir hardware de respaldo para almacenamiento KeyChain, el cual une llaves
privadas al dispositivo en el que están almacenadas.
Red privada virtual: Android proporciona una incorporación en el cliente VPN [65] [66] (Red
Privada Virtual) con soporte para PPTP [67] (Protocolo de Comunicaciones Punto a Punto), L2TP
[68] (Layer 2 Tunneling Protocol), e IPsec VPNs. Además, desde la versión 4.0 en adelante, la
Página 21
Documento de Trabajo de Grado - <Proyecto de investigación>
plataforma introduce la clase VPNService [69] para apoyar las soluciones VPN de terceros. La
versión 4.2 de la plataforma Android, permite que un usuario configure una VPN como always on
(siempre encendida), para indicar que las aplicaciones puedan conectarse a la red solo por medio del
VPN conectado.
3.4.4 SEGURIDAD DE APLICACIONES
Modelo de permisos de Android [39]: todas las aplicaciones en Android corren en el Application
Sandbox. Por defecto, una aplicación puede acceder solo a ciertos recursos del sistema. El sistema
gestiona el acceso a recursos por parte de las aplicaciones Android. En caso de que un recurso sea
usado incorrecta o maliciosamente, puede afectar la experiencia de usuario, la red o los datos del
dispositivo.
Estas restricciones de acceso a recursos se aplican de diversas formas, algunas funciones están
restringidas por una falta intencional de APIs a las funcionalidades sensibles (por ejemplo, no hay
ninguna API de Android para manipular directamente la SIM CARD). La separación de funciones,
en algunos casos, proporciona una medida de seguridad. Las APIs sensibles, están destinadas para
el uso de aplicaciones de confianza y son protegidas a través de permisos.
Las APIs protegidas incluyen:
-
Funciones de Cámara
GPS
Funciones de Bluetooth
Funciones del teléfono
Funciones SMS/MMS
Conexiones de red y datos
Estos recursos son solo accesibles a través del sistema operativo. Para hacer uso de las APIs
protegidas en el dispositivo, una aplicación debe definir las funcionalidades que necesita en su
manifiesto (archivo principal).
Cuando se instala una aplicación, el sistema muestra un diálogo al usuario que indica los permisos
requeridos y pregunta si se desea continuar con la instalación. El usuario no puede permitir o
denegar permisos individuales, sino en bloque. Los permisos son quitados si una aplicación es
desinstalada.
Página 22
Documento de Trabajo de Grado - <Proyecto de investigación>
Ilustración 2: Despliegue de permisos al instalar una aplicación en Android
Dentro de la configuración del dispositivo, los usuarios pueden ver los permisos para las
aplicaciones que han instalado previamente. En caso de que una aplicación intente usar una función
protegida que no se ha declarado en el manifiesto de la aplicación, la falla de permiso resultará en
una excepción de seguridad lanzada hacia esta aplicación.
Cuando se define un permiso, un atributo de nivel de protección, le indica al sistema cómo el
usuario debe ser informado de las aplicaciones que requieren del permiso o a quien se le permite
tener el permiso.
Aplicaciones de terceros (third-party applications): la razón por la que se muestran los permisos
de una aplicación al momento de instalarla, es porque el usuario debe determinar si cumple con sus
necesidades o no.
La visión de Android es tener usuarios que cambien fácilmente entre aplicaciones a voluntad. Uno
de los objetivos de seguridad de Android es transmitir información eficientemente al usuario, lo
cual no se puede lograr mostrándole diálogos que el usuario ignorará. Presentando la información
solo una vez y solo cuando se necesita, el usuario puede pensar sobre qué está aceptando o
denegando.
APIs sensibles a los costos: un API sensible al costo, es cualquier función que pueda generar un
costo para el usuario o la red. La plataforma Android ha colocado las APIs sensibles en la lista de
APIs protegidas controlados por el sistema operativo. El usuario otorgará permisos a las
aplicaciones de terceros que requieran usar las APIs sensibles a los costos.
Acceso a la tarjeta SIM: el acceso a Bajo nivel a la SIM CARD, no está permitido para
aplicaciones de terceros. El sistema operativo maneja todas las comunicaciones con la SIM CARD
Página 23
Documento de Trabajo de Grado - <Proyecto de investigación>
incluyendo el acceso a la información personal. Las aplicaciones tampoco pueden usar comandos
AT (ATtention Command) [70] ya que estas son manejadas por la Capa de Interfaz de Radio (Radio
Interface Layer) [71], la cual provee una capa de abstracción entre los servicios de telefonía de
Android y el hardware de radio.
Información personal: dentro del conjunto de APIs protegidas, se encuentran los APIs que
proveen acceso a la información de usuario en Android. Con el uso, los dispositivos acumulan datos
de usuario dentro de aplicaciones de terceros instaladas por el usuario. Para proteger los datos de
usuario se pueden usar chequeos de permisos de Android.
Las aplicaciones que recolectan información personal, tienen esos datos solo para esa aplicación en
específico.
Dispositivos con entrada de datos sensibles: Android provee dispositivos con entrada de datos
sensibles que permiten que las aplicaciones interactúen con la cámara, micrófono o GPS. Para que
una aplicación de terceros acceda a estos dispositivos, primero debe tener un acceso implícito
provisto por el usuario a través de los permisos de la plataforma.
Metadata del dispositivo: Android restringe el acceso a datos que no son intrínsecamente
sensibles, pero que pueden revelar indirectamente características del usuario, sus preferencias y la
forma como estos usan su dispositivo. Por defecto, las aplicaciones no tienen acceso a logs del
sistema operativo, historial del navegador, números telefónicos o información de identificación de
la red o hardware del dispositivo, pero una aplicación podría solicitar acceso a esta información en
tiempo de instalación.
Firma de aplicaciones [39]: la firma de código ayuda a los desarrolladores a identificar el autor de
la aplicación y actualizar su aplicación sin crear interfaces complicadas ni permisos. Cada
aplicación que corre en la plataforma Android debe ser firmada por el desarrollador. Las
aplicaciones que se intenten instalar sin haber sido firmadas, serán rechazadas por Google Play [72]
o el instalador de paquetes de Android.
En Google Play [72], la firma de aplicaciones sirve para mostrar la confianza que Google [73] tiene
con el desarrollador y la confianza que el mismo tiene con su aplicación.
Para poner una aplicación en el Application Sandbox, primero hay que firmarla. La firma define
qué ID de usuario se asocia con qué aplicación. La firma de aplicaciones asegura que una aplicación
no puede acceder a cualquier aplicación, excepto a través de IPC.
Cuando una aplicación se instala en el dispositivo, el Administrador de Paquetes comprueba que el
archivo APK ha sido firmado, con un certificado incluido en ese APK. Si la llave publica del
certificado coincide con la llave para firmar cualquier otro APK en el dispositivo, el nuevo APK
tiene la opción de especificar en el manifiesto que compartirá un UID (ID de usuario) con los otros
APKs firmados igualmente.
Android provee la firma de código usando certificados auto firmados que los desarrolladores
pueden generar sin ayuda externa o permisos. La firma del desarrollador se usa para asegurar una
política del mismo origen para las actualizaciones de aplicación. Las aplicaciones no tienen que ser
Página 24
Documento de Trabajo de Grado - <Proyecto de investigación>
firmadas por una autoridad central (empresa encargada de certificación). Android no realiza
verificación de Autoridades Certificadoras para los certificados de aplicación.
Gestión de derechos digitales: la plataforma Android proporciona un marco DRM extensible
(Framework de gestión de derechos digitales), el cual permite a las aplicaciones manejar contenidos
con derechos protegidos de acuerdo con las restricciones de licencia asociadas al contenido.
3.4.5 INVESTIGACIONES REALIZADAS
Aparte los mecanismos mencionados anteriormente provistos por la plataforma, se han establecido
muchos artículos para mitigar ataques en la capa de middleware de Android, en donde el objetivo
principal es ampliar esta capa con un control especifico de ataque [74] [75] [76] [77] [78].
Aunque muchas de estas soluciones son aproximaciones, es decir no se han terminado de poner en
prueba (muchas no se encuentran en el mercado de aplicaciones de Android o no están finalizadas),
muchas de estas, permiten mejorar el control de acceso a nivel de kernel; como es el caso de
SEAndroid [79] o Tomoyo [80] para mitigar ataques de escalamiento de privilegios a bajo nivel
[81] [82].
Por otro lado, Saint [83] o TISSA [84], proponen soluciones para hacer frente a los requisitos de
seguridad y problemas específicos de los desarrolladores de aplicaciones, aplicaciones de terceros
(compañías terceras) o usuarios finales. Ya que este tipo de stakeholders almacena datos sensibles
en el dispositivo. Los requerimientos de seguridad de los stakeholders, además dependen del
contexto en el que se encuentren. Por ejemplo: la política de seguridad en una empresa puede dictar
que solo ciertas aplicaciones pueden ser accedidas durante horas laborales o mientras que el
dispositivo se encuentra en el lugar de trabajo.
3.5 Mejoras de seguridad en Android 4.1
Para mejorar la experiencia de usuario, la plataforma Android 4.1 tiene unas mejoras de seguridad
[85] [86] [87]:
Servicios aislados: especificando android:isolatedProcess=”true” en la etiqueta <service> del API
de Android, un servicio correrá en su propio proceso de ID usuario aislado que no tiene permisos
por su cuenta.
Manejo de memoria: nuevas constantes en los métodos para el manejo de memoria,
específicamente para conocer acerca del estado de la memoria.
Proveedores de contenido: un nuevo método a nivel de API de Android
acquireUnstableContentProviderClient(), permite acceder a un cliente proveedor de contenido que
puede ser inestable, de tal forma que una aplicación no se bloqueará si el proveedor de contenido lo
hace.
Página 25
Documento de Trabajo de Grado - <Proyecto de investigación>
Descubrimiento de servicio Wi-Fi directo: nueva API proporciona detección de servicios preasociada permitiendo a las aplicaciones obtener más información de los dispositivos cercanos sobre
los servicios que soportan, antes de intentar conectarse.
Manejo de ancho de banda de la red: nueva API provee la habilidad de detectar conexiones a
puntos de acceso móvil (tethering), cuando un dispositivo hace las funciones de un punto de acceso
a la red o router.
Cifrado de aplicaciones: las aplicaciones con costo en el mercado de aplicaciones de Google están
cifradas con una llave específica del dispositivo antes de ser almacenadas en el dispositivo.
Nuevos permisos:
READ_EXTERNAL_STORAGE: provee acceso de lectura protegido a almacenamiento externo.
En Android 4.1 por defecto, todas las aplicaciones aún tienen acceso de lectura. Hay una nueva
opción de desarrollador para activar la restricción de acceso de lectura.
READ_USER_DICTIONARY: permite que una aplicación lea el diccionario del usuario. Esto solo
puede ser requerido por un editor de diccionario como la aplicación de configuración del
dispositivo.
READ_CALL_LOG: permite que una aplicación lea el registro de llamadas del sistema que
contiene información sobre las llamadas entrantes y salientes.
WRITE_CALL_LOG: permite que una aplicación modifique el registro de llamadas del sistema
almacenado en el dispositivo.
WRITE_USER_DICTIONARY: permite que una aplicación escriba en el diccionario del usuario.
Página 26
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6 Modelo de seguridad basado en los ataques y principios
3.6.1
DIAGRAMA GENERAL
Página 27
Documento de Trabajo de Grado - <Proyecto de investigación>
El diagrama anterior, muestra la arquitectura del modelo de seguridad. El modelo de seguridad que
se propone en este Trabajo de Grado está enfocado en ataques que comprometan los principios de
Integridad, Confidencialidad y Disponibilidad de la información. La arquitectura muestra los
principales problemas en relación a estos tres principios que presenta cada componente.
Para la definición de componentes que conforman la arquitectura, se tuvo en cuenta aquellos que en
realidad se ven comprometidos al momento de realizar los ataques a la plataforma Android 4.1.
Cabe resaltar que la arquitectura propuesta para el Modelo de Seguridad, se basó en la arquitectura
de la plataforma.
A continuación, se explicarán los mecanismos y recursos de seguridad que provee el Modelo de
Seguridad propuesto, para mitigar ataques a la plataforma Android 4.1.
Página 28
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.2
MITIGACION POR CAPAS: APLICACIONES
Página 29
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.3
MITIGACION POR CAPAS: FRAMEWORK DE APLICACION
Página 30
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.4
MITIGACION POR CAPAS: LIBRERIAS / TIEMPO DE EJECUCION ANDROID
Página 31
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.5
MITIGACION POR CAPAS: KERNEL DE LINUX
Página 32
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.6
IDENTIFICACION DE COMPONENTES DEL PRIMER ATAQUE: iCalendar
El siguiente diagrama muestra el uso del Modelo de seguridad propuesto para identificar los componentes que se ven afectados en el ataque
iCalendar, descrito en el Documento de Ataques según Principios de Seguridad.
APLICACIONES
SMS/MMS
FRAMEWORK DE
APLICACION
TELEPHONY
MANAGER
INTEGRIDAD
TELEPHONY
MANAGER
CONFIDENCIALIDAD
FRAMEWORK DE
APLICACION
LOCATION
MANAGER
ICALENDAR
DISPONIBILIDAD
KERNEL DE LINUX
APPLICATION
SANDBOX
FRAMEWORK DE
APLICACION
TELEPHONY
MANAGER
KERNEL DE LINUX
WIFI DRIVER
KERNEL DE LINUX
APPLICATION
SANDBOX
CONTROL DE
ACCESO
AUTENTICACION
Página 33
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.7
IDENTIFICACION DE COMPONENTES DEL SEGUNDO ATAQUE: Android.Stels
El siguiente diagrama muestra el uso del Modelo de seguridad propuesto para identificar los componentes que se ven afectados en el ataque
Android.stels, descrito en el Documento de Ataques según Principios de Seguridad.
INTEGRIDAD
FRAMEWORK DE
APLICACION
PACKAGE MANAGER
APLICACIONES
CONTACTOS
LIBRERIAS / TIEMPO
DE EJECUCION
ANDROID
LIBWEBCORE
KERNEL DE LINUX
WIFI DRIVER
LIBRERIAS / TIEMPO
DE EJECUCION
ANDROID
LIBWEBCORE
FRAMEWORK DE
APLICACION
TELEPHONY
MANAGER
APLICACIONES
CONTACTOS
APLICACIONES
SMS/MMS
FRAMEWORK DE
APLICACION
TELEPHONY
MANAGER
CONFIDENCIALIDAD
DISPONIBILIDAD
ANDROID.STELS
CONTROL DE
ACCESO
WIFI DRIVER
KERNEL DE LINUX
APPLICATION
SANDBOX
AUTENTICACION
KERNEL DE LINUX
APPLICATION
SANDBOX
Página 34
Documento de Trabajo de Grado - <Proyecto de investigación>
3.6.8
IDENTIFICACION DE COMPONENTES DEL TERCER ATAQUE: BadNews
El siguiente diagrama muestra el uso del Modelo de seguridad propuesto para identificar los componentes que se ven afectados en el ataque
BadNews, descrito en el Documento de Ataques según Principios de Seguridad.
INTEGRIDAD
FRAMEWORK DE
APLICACION
PACKAGE MANAGER
FRAMEWORK DE
APLICACION
TELEPHONY
MANAGER
APLICACIONES
EMAIL
APLICACIONES
HOME
CONFIDENCIALIDAD
BADNEWS
DISPONIBILIDAD
WIFI DRIVER
KERNEL DE LINUX
APPLICATION
SANDBOX
CONTROL DE
ACCESO
TELEPHONY
MANAGER
FRAMEWORK DE
APLICACION
PACKAGE MANAGER
Página 35
Documento de Trabajo de Grado - <Proyecto de investigación>
4. CONCLUSIONES




El modelo de seguridad propuesto en este documento, identificó componentes comprometidos a
nivel de principios de seguridad de la información de los ataques que se encontraron en la
investigación. En el Documento de Pruebas del Modelo de Seguridad se explicará como el
modelo propone la mitigación de dichos ataques y se hará la comparación entre las pruebas
funcionales de los ataques y la identificación de componentes que realizó el modelo.
Para cada componente de la arquitectura de este modelo de seguridad, se menciona un
mecanismo de seguridad, el cual se espera logre mitigar el ataque a dicho componente.
Se pudo demostrar por medio de este modelo, que existe más de un principio de seguridad
comprometido por cada componente de la arquitectura.
El modelo de seguridad propone recursos en cada componente para la mitigación de ataques
que comprometan la Integridad, Confidencialidad y Disponibilidad de la información a partir de
mecanismos de seguridad existentes en la arquitectura y de otros mecanismos que no existen,
pero que se sugieren como un cambio en el siguiente versionamiento de la plataforma y que
podrían ayudar a solucionar los problemas de seguridad identificados por el modelo.
Página 36
Documento de Trabajo de Grado - <Proyecto de investigación>
5. REFERENCIAS
[1] C. Fernandez, Seguridad en Sistemas Informáticos. España: Ediciones Diaz de Santos S.A, 1988.
[2] P. Holbrook and J. Reynolds, RFC 1244: Site Secutiry Handbook. ISI Editors, 1991.
[3] C. Borghello, “Seguridad Informática: sus implicancias e implementación.” Universidad
Tecnológica Nacional. Argentina, 2001.
[4] S. Bugiel, S. Heuser, and A.-R. Sadeghi, “Towards a Framework for Android Security Modules :
Extending SE Android Type Enforcement to Android Middleware.” Intel Collaborative Research
Institute for Secure Computing, 2012.
[5] E. Walsh, “Application of the flask architecture to the x window system server.” National
Security Agency, 2007.
[6] J. Carter, “Using gconf as an example of how to create an userspace object manager.” National
Security Agency, 2007.
[7] “sepgsql - Security Enhanced PostgreSQL - Google Project Hosting.” [Online]. Available:
https://code.google.com/p/sepgsql/. [Accessed: 03-Apr-2013].
[8] “NB SEforAndroid 1 - SELinux Wiki.” [Online]. Available:
http://selinuxproject.org/page/NB_SEforAndroid_1. [Accessed: 03-Apr-2013].
[9] S. Smalley, “The case for SE Android.” National Security Agency.
[10] D. Ehringer, “The dalvik virtual machine architecture.” Mar-2010.
[11] “Android Zygote Startup - eLinux.org.” [Online]. Available:
http://elinux.org/Android_Zygote_Startup. [Accessed: 03-Apr-2013].
[12] “Device Administration | Android Developers.” [Online]. Available:
http://developer.android.com/guide/topics/admin/device-admin.html. [Accessed: 03-Apr2013].
[13] “Android Device Policy Administration Tutorial - Marakana.” [Online]. Available:
http://marakana.com/s/post/1291/android_device_policy_administration_tutorial.
[Accessed: 03-Apr-2013].
[14] “Application Fundamentals | Android Developers.” [Online]. Available:
http://developer.android.com/guide/components/fundamentals.html. [Accessed: 12-Mar2013].
[15] “Essentials of the Java Programming Language, Part 1.” [Online]. Available:
http://www.oracle.com/technetwork/java/index-138747.html. [Accessed: 12-Mar-2013].
[16] “Surface Manager | Blog Silex Technologies.” [Online]. Available:
http://silextech.wordpress.com/tag/surface-manager/. [Accessed: 05-Mar-2013].
[17] N. Hari and B. Prasad, “Android architecture.” [Online]. Available:
http://www.slideshare.net/kittu565/android-architecture. [Accessed: 13-May-2013].
[18] “android/platform_external_opencore · GitHub.” [Online]. Available:
https://github.com/android/platform_external_opencore. [Accessed: 02-Mar-2013].
[19] “OpenGL ES 1_X - The Standard for Embedded Accelerated 3D Graphics.” [Online]. Available:
http://www.khronos.org/opengles/1_X/. [Accessed: 02-Mar-2013].
[20] “Camera | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/hardware/Camera.html. [Accessed: 06Mar-2013].
[21] “android.bluetooth | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/bluetooth/package-summary.html.
[Accessed: 06-Mar-2013].
[22] “RFCOMM Layer Tutorial.” [Online]. Available:
http://www.palowireless.com/infotooth/tutorial/rfcomm.asp. [Accessed: 06-Mar-2013].
Página 37
Documento de Trabajo de Grado - <Proyecto de investigación>
[23] J. Huang, “Android IPC Mechanism.” [Online]. Available:
http://www.slideshare.net/jserv/android-ipc-mechanism. [Accessed: 12-Mar-2013].
[24] “OpenBinder.” [Online]. Available:
http://www.angryredplanet.com/~hackbod/openbinder/docs/html/. [Accessed: 03-Mar2013].
[25] “android.hardware.usb | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/hardware/usb/package-summary.html.
[Accessed: 07-Mar-2013].
[26] “USB Host and Accessory | Android Developers.” [Online]. Available:
http://developer.android.com/guide/topics/connectivity/usb/index.html. [Accessed: 06-Mar2013].
[27] “Mobile Phone Termonologies.” [Online]. Available:
http://www.bakwaash.com/2011/07/05/mobile-phone-termonologies/. [Accessed: 07-Mar2013].
[28] “Why QWERTY was Invented.” [Online]. Available:
http://home.earthlink.net/~dcrehr/whyqwert.html. [Accessed: 08-Mar-2013].
[29] “Keyboard Devices | Android Open Source.” [Online]. Available:
http://source.android.com/tech/input/keyboard-devices.html. [Accessed: 08-Mar-2013].
[30] “android.net.wifi | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/net/wifi/package-summary.html.
[Accessed: 08-Mar-2013].
[31] “android.media | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/media/package-summary.html. [Accessed:
09-Mar-2013].
[32] “PowerManager | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/os/PowerManager.html. [Accessed: 08Mar-2013].
[33] “BatteryManager | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/os/BatteryManager.html. [Accessed: 09Mar-2013].
[34] “What is ASLR?” [Online]. Available:
http://netsecurity.about.com/od/quicktips/qt/whatisaslr.htm. [Accessed: 09-Mar-2013].
[35] “X.Org Wiki - ProPolice.” [Online]. Available: http://www.x.org/wiki/ProPolice. [Accessed: 09Mar-2013].
[36] “README - safe-iop - safe_iop - a safe integer operation library for C - Safe Integer Operation
Library for C - Google Project Hosting.” [Online]. Available: https://code.google.com/p/safeiop/wiki/README. [Accessed: 09-Mar-2013].
[37] “Take a closer look at OpenBSD.” [Online]. Available:
http://www.ibm.com/developerworks/aix/library/au-openbsd.html. [Accessed: 10-Mar-2013].
[38] “mmap_min_addr - Debian Wiki.” [Online]. Available:
http://wiki.debian.org/mmap_min_addr. [Accessed: 10-Mar-2013].
[39] “Android Security Overview | Android Open Source.” [Online]. Available:
http://source.android.com/tech/security/index.html. [Accessed: 18-Feb-2013].
[40] “How To Boot Into Android Safe Mode On Your Smartphone / Tablet | Redmond Pie.”
[Online]. Available: http://www.redmondpie.com/how-to-boot-into-android-safe-mode-onyour-smartphone-tablet/. [Accessed: 12-Mar-2013].
Página 38
Documento de Trabajo de Grado - <Proyecto de investigación>
[41] “Use Android’s ‘Safe Mode’ to Disable Apps and Troubleshoot Problems.”[Online]. Available:
http://lifehacker.com/5965022/how-to-reboot-your-android-phone-or-tablet-into-safe-mode.
[Accessed: 12-Mar-2013].
[42] D. Osvik, A. Shamir, and E. Tromer, “Cache Attacks and Countermeasures: the Case of AES.”
Weizmann Institute of Science and Applied Mathematics, 20-Nov-2005.
[43] D. Boneh, “Twenty years of attacks on the RSA cryptosystem.” 1998.
[44] D. Pointcheval, “How to Encrypt Properly with RSA.” 2002.
[45] “FIPS 186 - (DSS), Digital Signature Standard.” [Online]. Available:
http://www.itl.nist.gov/fipspubs/fip186.htm. [Accessed: 12-Mar-2013].
[46] “Digest::SHA - search.cpan.org.” [Online]. Available: http://search.cpan.org/~mshelor/DigestSHA-5.62/lib/Digest/SHA.pm. [Accessed: 13-Mar-2013].
[47] “Unix crypt with SHA-256/512.” [Online]. Available: http://www.akkadia.org/drepper/shacrypt.html. [Accessed: 13-Mar-2013].
[48] “RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2.” [Online]. Available:
https://tools.ietf.org/html/rfc5246. [Accessed: 13-Mar-2013].
[49] “HTTPS Security Improvements in Internet Explorer 7.” [Online]. Available:
http://msdn.microsoft.com/en-us/library/bb250503.aspx. [Accessed: 13-Mar-2013].
[50] “RFC 2818 - HTTP Over TLS.” [Online]. Available: http://tools.ietf.org/html/rfc2818. [Accessed:
13-Mar-2013].
[51] “KeyChain | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/security/KeyChain.html. [Accessed: 13-Mar2013].
[52] “CWE - CWE-415: Double Free (2.4).” [Online]. Available:
http://cwe.mitre.org/data/definitions/415.html. [Accessed: 13-Mar-2013].
[53] “Double Free - OWASP.” [Online]. Available: https://www.owasp.org/index.php/Double_Free.
[Accessed: 13-Mar-2013].
[54] “Using freed memory - OWASP.” [Online]. Available:
https://www.owasp.org/index.php/Using_freed_memory. [Accessed: 15-Mar-2013].
[55] “13.5 Heap Overflows :: Chapter 13. Application-Level Risks :: Network security assessment ::
Networking :: eTutorials.org.” [Online]. Available:
http://etutorials.org/Networking/network+security+assessment/Chapter+13.+ApplicationLevel+Risks/13.5+Heap+Overflows/. [Accessed: 15-Mar-2013].
[56] “CWE - CWE-134: Uncontrolled Format String (2.4).” [Online]. Available:
http://cwe.mitre.org/data/definitions/134.html. [Accessed: 15-Mar-2013].
[57] “Gentoo Linux Documentation -- Position Independent Code internals.” [Online]. Available:
http://www.gentoo.org/proj/en/hardened/pic-internals.xml. [Accessed: 15-Mar-2013].
[58] “2.6. Position Independent Executables.” [Online]. Available: http://linuxfromscratch.xtranet.org/hlfs/view/unstable/glibc-2.4/chapter02/pie.html. [Accessed: 15-Mar-2013].
[59] “Enabling the kernel’s DMESG_RESTRICT feature.” [Online]. Available:
https://lists.ubuntu.com/archives/ubuntu-devel/2011-May/033240.html. [Accessed: 16-Mar2013].
[60] “FORTIFY_SOURCE Semantics | NYU Poly ISIS Lab.” [Online]. Available:
https://isisblogs.poly.edu/2011/04/11/fortify_source-semantics/. [Accessed: 15-Mar-2013].
[61] “Brute force attack - OWASP.” [Online]. Available:
https://www.owasp.org/index.php/Brute_force_attack. [Accessed: 16-Mar-2013].
[62] “Testing for Brute Force (OWASP-AT-004) - OWASP.” [Online]. Available:
https://www.owasp.org/index.php/Testing_for_Brute_Force_(OWASP-AT-004). [Accessed:
16-Mar-2013].
Página 39
Documento de Trabajo de Grado - <Proyecto de investigación>
[63] “RFC 6070 - PKCS #5: Password-Based Key Derivation Function 2 (PBKDF2) Test Vectors.”
[Online]. Available: http://tools.ietf.org/html/rfc6070. [Accessed: 16-Mar-2013].
[64] “Using password systems - OWASP.” [Online]. Available:
https://www.owasp.org/index.php/Using_password_systems. [Accessed: 16-Mar-2013].
[65] “Virtual Private Networking: An Overview.” [Online]. Available:
http://technet.microsoft.com/en-us/library/bb742566.aspx. [Accessed: 18-Mar-2013].
[66] “VPN Technologies: Definitions and Requirements.” [Online]. Available:
http://www.vpnc.org/vpn-technologies.html. [Accessed: 19-Mar-2013].
[67] “RFC 2637 - Point-to-Point Tunneling Protocol (PPTP).” [Online]. Available:
http://tools.ietf.org/html/rfc2637. [Accessed: 19-Mar-2013].
[68] “RFC 2661 - Layer Two Tunneling Protocol ‘L2TP’.”[Online]. Available:
http://tools.ietf.org/html/rfc2661. [Accessed: 19-Mar-2013].
[69] “VpnService | Android Developers.” [Online]. Available:
http://developer.android.com/reference/android/net/VpnService.html. [Accessed: 17-Mar2013].
[70] “SMS Tutorial: Introduction to AT Commands, Basic Commands and Extended Commands.”
[Online]. Available: http://www.developershome.com/sms/atCommandsIntro.asp. [Accessed:
18-Mar-2013].
[71] “Android - Radio Layer Interface.” [Online]. Available:
http://www.netmite.com/android/mydroid/development/pdk/docs/telephony.html.
[Accessed: 18-Mar-2013].
[72] “Aplicaciones de Android en Google Play.” [Online]. Available: https://play.google.com/store.
[Accessed: 18-Nov-2012].
[73] “Company – Google.” [Online]. Available: http://www.google.com/about/company/.
[Accessed: 18-Mar-2013].
[74] W. Enck, P. Gilbert, B.-G. Chun, L. P. Cox, J. Jung, P. McDaniel, and A. N. Sheth, “TaintDroid,”
2010. [Online]. Available: http://dl.acm.org/citation.cfm?id=1924971. [Accessed: 21-Mar2013].
[75] P. Hornyack, S. Han, J. Jung, S. Schechter, and D. Wetherall, “These aren’t the droids you’re
looking for,” 2011. [Online]. Available: http://dl.acm.org/citation.cfm?id=2046780. [Accessed:
22-Mar-2013].
[76] M. Conti, V. T. N. Nguyen, and B. Crispo, “CRePE,” 2010. [Online]. Available:
http://dl.acm.org/citation.cfm?id=1949355. [Accessed: 22-Mar-2013].
[77] R. Xu, H. Saidi, and R. Anderson, “Aurasium,” 2012. [Online]. Available:
http://dl.acm.org/citation.cfm?id=2362793.2362820. [Accessed: 22-Mar-2013].
[78] M. Backes, S. Gerling, C. Hammer, M. Maffei, and P. von Styp-Rekowsky, “AppGuard — Realtime policy enforcement for third-party applications.” 2012.
[79] “SEforAndroid - SELinux Wiki.” [Online]. Available: http://selinuxproject.org/page/SEAndroid.
[Accessed: 22-Mar-2013].
[80] T. Harada, T. Horie, and K. Tanaka, “Task Oriented Management Obviates Your Onus on
Linux.” 2004.
[81] S. Smalley and R. Craig, “Security Enhanced (SE) Android: Bringing Flexible MAC to Android.”
2013.
[82] L. Davi, A. Dmitrienko, A.-R. Sadeghi, and M. Winandy, “Privilege escalation attacks on
android,” in Proceedings of the 13th international conference on Information security, Berlin,
Heidelberg, 2011, pp. 346–360.
Página 40
Documento de Trabajo de Grado - <Proyecto de investigación>
[83] M. Ongtang, S. McLaughlin, W. Enck, and P. McDaniel, “Semantically Rich Application-Centric
Security in Android,” 2009. [Online]. Available: http://dl.acm.org/citation.cfm?id=1723245.
[Accessed: 22-Mar-2013].
[84] Y. Zhou, X. Zhang, X. Jiang, and V. W. Freeh, “Taming information-stealing smartphone
applications (on Android),” in Proceedings of the 4th international conference on Trust and
trustworthy computing, Berlin, Heidelberg, 2011, pp. 93–107.
[85] A. Ghosh, “Introducing Android 4.1 (Jelly Bean) preview platform, and more | Android
Developers Blog.” [Online]. Available: http://androiddevelopers.blogspot.com/2012/06/introducing-android-41-jelly-bean.html. [Accessed: 22Mar-2013].
[86] “Security Enhancements in Jelly Bean | Android Developers Blog.” [Online]. Available:
http://android-developers.blogspot.com/2013/02/security-enhancements-in-jelly-bean.html.
[Accessed: 19-Mar-2013].
[87] “Android 4.1 APIs | Android Developers.” [Online]. Available:
http://developer.android.com/about/versions/android-4.1.html. [Accessed: 22-Mar-2013].
Página 41

Documentos relacionados