En jtsec llevamos algún tiempo desarrollando una herramienta que pueda servir de ayuda a usuarios de todos los niveles para comprobar la calidad de la seguridad en sus dispositivos móviles. Nuestros esfuerzos han dado sus frutos y ya podemos presentar la primera versión de Android Security Configuration Tester (ASCT).
Android Security Configuration Tester (ASCT) viene a cubrir la necesidad actual de garantizar, a un nivel básico, la seguridad de los dispositivos Android de una forma sencilla e intuitiva. Esta herramienta engloba comprobaciones sobre los mecanismos de seguridad presentes en las versiones más recientes de Android, así como las protecciones clásicas. Se completa además el análisis al hacer comprobaciones a varios niveles tanto en la configuración del dispositivo desde la perspectiva del usuario como dentro del sistema Linux sobre el que se ejecuta. En definitiva, aspira a ser una herramienta que aporte al usuario tanto una garantía de seguridad básica en su dispositivo como una cantidad asequible de información específica y relevante para llevar a cabo un análisis posterior más profundo y completo.
En resumidas cuentas, ASCT es un conjunto de scripts escritos en bash. Cada uno de estos scripts lleva a cabo comprobaciones específicas sobre un mecanismo de seguridad concreto y aporta al usuario información que le pueda ser de utilidad. De esta forma, el análisis se lleva a cabo en varias etapas, cada una de ellas relacionada con un elemento crítico para la seguridad de un dispositivo Android.
En primer lugar, se extraen del dispositivo cada una de las aplicaciones que contiene considerando que éstas se encuentran en /system/app y /system/priv-app. Estas aplicaciones son decompiladas usando apktool (https://github.com/iBotPeaches/Apktool) y procesadas siguiendo una serie de criterios que permiten comprobar hasta qué punto se ejecutan con seguridad. Primero, se hace un análisis estático de vulnerabilidades de las aplicaciones usando androwarn (https://github.com/maaaaz/androwarn/), que estudia las aplicaciones en busca de vulnerabilidades y comportamientos sospechosos. A continuación, se analizan los manifiestos de las aplicaciones decompiladas, se analizan los permisos que utilizan y se comprueba si comparten ID con otras aplicaciones para, posteriormente, hacer un estudio de qué información están compartiendo.
Una vez completado el análisis de las aplicaciones del dispositivo, se hace un recorrido completo por el sistema de ficheros en busca de archivos con permisos especiales. En los sistemas Linux, estos permisos (setgid, setuid, sticky bit) suelen ser usados para permitir comportamientos específicos como, por ejemplo, el que se observa en el directorio /tmp en el que todos los usuarios pueden editar archivos, pero sólo los propietarios pueden borrarlos. Sin embargo, si no se utilizan correctamente, estos permisos pueden dar lugar a agujeros de seguridad. En este sentido, la herramienta recopila información sobre los archivos con este tipo de permisos y la muestra al usuario.
La tercera etapa del análisis se basa en comprobaciones de dos mecanismos de protección de sistemas Linux que están también presentes en los dispositivos Android más recientes: Kernel Module Signing y Security Enhanced Linux (SELinux).
En primer lugar, el “firmado de los módulos del Kernel” es una protección basada en una serie de parámetros que determinan si la firma de los módulos es comprobada y con qué nivel de rigurosidad. ASCT comprueba la presencia y los valores de estos parámetros en el arranque del sistema. En la siguiente imagen se muestran los tres parámetros que son considerados por la herramienta para comprobar en qué nivel está funcionando la comprobación de firmas de los módulos del Kernel.
Por otro lado, se hacen una serie de comprobaciones sobre SELinux. SELinux es un control del acceso adicional que se encuentra en los sistemas Linux y que se ha incorporado recientemente como medida de seguridad en dispositivos Android. En la misma línea que para Kernel Module Signing, se hace una comprobación de los parámetros de configuración de esta protección dejando al usuario la información de su sistema para comprobar que sigue el esquema recomendado ( https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index). Una vez hecha esta comprobación, y siguiendo la misma línea de recomendaciones para una configuración segura de SELinux, se comprueba que no haya más procesos ejecutándose en el dominio init que el mismo proceso init.
En esta misma línea de comprobación de procesos, se muestra al usuario una lista de los procesos que se ejecutan con permisos elevados, para que se pueda hacer una comprobación de los mismos. Estos procesos son los únicos que pueden dar pie a que un atacante obtenga permisos root sobre el dispositivo, por lo que su análisis es especialmente importante.
En la cuarta etapa, la herramienta hace un análisis del estado y tipo de cifrado presente en el dispositivo, así como una comprobación de las opciones de configuración relacionadas. Los parámetros del cifrado han de servir al usuario para garantizar que sus datos están protegidos y saber si están en funcionamiento los mecanismos de protección hardware que ofrecen los dispositivos Android más recientes.
Una vez hecha esta comprobación, ASCT analiza la Address Space Randomization Layout (ASLR) prestando atención a diferentes factores. En primer lugar, siguiendo la línea de las comprobaciones anteriores, se hace un estudio de los parámetros que afectan a su funcionamiento. A continuación, se hacen una serie de pruebas para garantizar la aleatorización real de las direcciones de memoria de forma que se demuestre que no sólo la configuración de la ASLR, sino también su implementación, son correctas. Finalmente, se comprueba el modo de compilación de los binarios presentes en el sistema para comprobar que hacen uso de la aleatorización.
Finalmente, se comprueban los parámetros que activan y sirven de configuración para Android Verified Boot (https://source.android.com/security/verifiedboot/). La presencia de AVB aspira a garantizar que todo el código que se ejecuta en un dispositivo proviene de fuentes confiables mediante el establecimiento de una cadena de confianza basada en un clave hardware.
En resumen, Android Security Configuration Tester cubre los puntos clave para garantizar la seguridad de un dispositivo Android a nivel básico y proporciona información al usuario sobre los mecanismos analizados que ayude al usuario a hacer un análisis posterior más profundo.
En jtsec estamos muy orgullosos con los primeros pasos de nuestra nueva herramienta, que viene a unirse al arsenal que ponemos a disposición de nuestros clientes para mejorar la seguridad de sus desarrollos.