Qué buscar cuando se aplican aplicaciones de ingeniería inversa para Android

La ingeniería inversa se refiere al proceso de desarmar algo para ver cómo funciona, ya sea un objeto físico como una cerradura o, en este caso, una aplicación móvil. La descompilación es una forma de ingeniería inversa en la que se analiza una aplicación móvil observando su código fuente. Un programa descompilador examina el binario y traduce su contenido de una abstracción de bajo nivel a una abstracción de mayor nivel.

El equipo de servicios de NowSecure realiza con frecuencia ingeniería inversa en aplicaciones móviles para descubrir vulnerabilidades de seguridad y fallas de privacidad. Confiamos en una combinación de herramientas personalizadas y de código abierto en nuestras pruebas de penetración, incluidos los descompiladores. Este tutorial lo ayudará a dominar los conceptos básicos del análisis de una aplicación de Android y lo que debe buscar.

Un binario de Android se llama APK, que significa Kit de paquete de Android. El APK contiene datos de la aplicación en forma de archivos Dalvik Executable (.dex) comprimidos. Los archivos DEX constan de los siguientes componentes:

  • Encabezado de archivo
  • Tabla de cadenas
  • Lista de clase
  • Tabla de campo
  • Tabla de métodos
  • Tabla de definición de clase
  • Lista de campo
  • Lista de métodos
  • Encabezado de código
  • Lista de variables locales

Para obtener más información sobre los archivos .dex, consulte el documentación oficial de Android.

Un descompilador es una herramienta que toma el contenido de la APK e intenta mostrar el código original que se usó para construir las diferentes funcionalidades de la aplicación. Aunque este proceso es bastante consistente, en algunos casos especiales, el descompilador puede fallar al revertir una pequeña parte de la aplicación.

Hay muchos más aspectos de la ingeniería inversa de los que se pueden cubrir aquí, por lo que este blog se concentrará en algunos de los problemas más comunes que encontramos en las aplicaciones de producción de Android cuando investigamos con un descompilador. Si bien hay muchos descompiladores para elegir, prefiero jadx-gui porque es una herramienta simple pero efectiva que tiene una interfaz fácil de usar. Lo utilizaremos para analizar el “InsecureBankv2.apk”, una aplicación de Android de código abierto que contiene deliberadamente muchas vulnerabilidades.

Primeros pasos Analizando el APK

Abra el APK usando jadx-gui y verá un menú en el lado izquierdo de la pantalla que contiene algunos submenús desplegables. Esto es común en todas las aplicaciones de Android.

Que buscar cuando se aplican aplicaciones de ingenieria inversa para

Cada menú desplegable se explica por sí mismo en su mayoría. La sección «Código fuente» contiene los diferentes archivos que componen el código de la aplicación. El «com» generalmente contiene la parte principal del código de la aplicación, incluidas las funcionalidades principales, mientras que otras secciones incluyen componentes de apoyo/complementarios, como bibliotecas, marcos y otros recursos utilizados para crear la aplicación. La sección «Recursos» contiene los activos de la aplicación, las versiones, los certificados, las propiedades, el manifiesto de Android, la información de la firma del APK, etc.

Explorando el manifiesto de Android

Comencemos por analizar el manifiesto de la aplicación, AndroidManifest.xml. Este archivo es una parte importante de la aplicación porque proporciona datos sobre la estructura y los metadatos de la aplicación, sus componentes y los requisitos. Esto se hace estableciendo permisos de usuario, actividades de la aplicación, intenciones, acciones, etc. Al hacer doble clic en el archivo AndroidManifest.xml en el menú del lado izquierdo, se abre el siguiente archivo:

1678098579 322 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

Observe cómo está segmentado en diferentes secciones. Las primeras líneas contienen los diferentes permisos de usuario declarados por la aplicación. Estos siempre serán variables y dependerán de la aplicación que esté tratando de aplicar ingeniería inversa, pero siempre es una buena práctica asegurarse de que la aplicación no solicite más permisos de los que debería tener o necesita usar. Por ejemplo, hemos visto que muchas aplicaciones solicitan permisos de ubicación sin siquiera tener una función que requiera la ubicación del usuario. Esto generalmente termina en la divulgación de algún tipo de información personal del usuario y, en la mayoría de los casos, el desarrollador ni siquiera lo hace intencionalmente.

Otras cosas importantes a tener en cuenta en el manifiesto son el debuggable y el allowBackup banderas Como sugiere el nombre, el primero se refiere a que la aplicación está en modo de depuración, lo que significa que es posible adjuntar un depurador al proceso de la aplicación y ejecutar código arbitrario. Desde hace unos años, Google no permite que se publiquen en Play Store apps que tengan habilitada esta bandera. Sin embargo, aún es importante tener esto en cuenta al desarrollar una aplicación, especialmente porque las compilaciones a menudo se intercambian entre desarrolladores. Si uno cae en las manos equivocadas, podría tener consecuencias negativas. La segunda bandera, allowBackup, define si los datos de la aplicación pueden ser respaldados y restaurados por un usuario que haya habilitado la depuración de USB. Esto significa que los piratas informáticos que se conectan a un dispositivo a través de adb pueden obtener fácilmente cualquier dato de la aplicación que esté almacenado en el dispositivo, incluidos los datos personales en el almacenamiento privado.

Como puede ver en la captura de pantalla a continuación, el Manifiesto de Android muestra que la aplicación InsecureBankv2 tiene ambas banderas habilitadas.

1678098579 308 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

El Manifiesto también puede incluir actividades exportadas y proveedores de contenido. Estos permiten que las aplicaciones externas accedan a los datos en la aplicación, por lo que siempre es importante verificar las actividades enumeradas como true porque estos pueden potencialmente filtrar datos de usuario a otras aplicaciones. Las actividades que no están destinadas a ser accedidas por otras aplicaciones siempre deben establecerse en false. En la aplicación de muestra en cuestión, podemos ver que múltiples actividades son exportables:

1678098580 225 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

Búsqueda de valores codificados

A continuación, busque credenciales codificadas, es decir, cualquier cosa codificada en una aplicación, como nombres de usuario, tokens de sesión, claves secretas, etc. Los atacantes a menudo pueden acceder fácilmente a esta información y esta aplicación no es una excepción.

Las credenciales codificadas se pueden encontrar en casi cualquier lugar dentro de la aplicación, por lo que recomendamos usar la función de búsqueda de jadx para buscar estos valores. Por lo general, comienzo buscando claves secretas codificadas. Estos pueden ser algo fáciles de reconocer, ya que generalmente se almacenarán en una matriz de bytes. En este caso, la búsqueda de la palabra ‘secreto’ revela un atisbo de lo que podemos encontrar en la aplicación.

1678098580 980 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

Asegúrese de revisar todos los resultados, especialmente cuando busque un término como «secreto», ya que probablemente revele valores confidenciales. Navegando a com.android.InsecureBankv2.CryptoClass muestra información valiosa, incluido un vector de inicialización para uno de los métodos criptográficos utilizados y la clave criptográfica.

1678098581 473 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

¡Fresco! Tenemos un hallazgo de mala práctica criptográfica. Si bien muchos otros hallazgos relacionados con la criptografía aquí podrían captar nuestra atención, avanzaremos ahora para cubrir otras cosas.

Análisis de WebViews en una aplicación

WebViews es un navegador integrable que una aplicación nativa puede usar para mostrar contenido web. Es posible que no estén implementados en todas las aplicaciones, pero cuando lo están, pueden proporcionar un vector de ataque arriesgado. Algunos parámetros/indicadores importantes para probar en WebViews son setWebContentsDebuggingEnabled(true), clearCache(true)y EnableSafeBrowsing. El primero permite inspecciones del contenido de WebView desde un navegador remoto, por lo que siempre debe establecerse en falso. La búsqueda de esto no arroja resultados, por lo que no vemos que se utilice en esta aplicación de prueba, pero no olvide tenerlo en cuenta al invertir otras aplicaciones. El segundo borra los cachés de WebView del dispositivo cliente. Esto puede mitigar los problemas relacionados con los datos confidenciales almacenados en el sistema de archivos local. De hecho, vemos que esta es utilizada por una biblioteca de Google importada por la aplicación, ¡no está mal!

1678098581 210 Que buscar cuando se aplican aplicaciones de ingenieria inversa para
1678098582 579 Que buscar cuando se aplican aplicaciones de ingenieria inversa para

Finalmente, EnableSafeBrowsing muestra advertencias cuando se carga un sitio web de phishing conocido o comprometido en WebView. Tampoco vemos este utilizado en la aplicación. Al analizar más a fondo WebViews en esta aplicación, encontramos que el com.android.insecurebankv2.ViewStatement La clase hace un uso intensivo de WebViews. Una cosa que llama nuestra atención es el mecanismo de carga de archivos, que no parece ser muy seguro debido a la falta de comprobaciones y validaciones adecuadas. Esta clase también habilita JavaScript, lo que significa que un script potencialmente vulnerable podría cargarse en la aplicación para su explotación.

Conclusión

Explorar la aplicación definitivamente arrojará muchos otros hallazgos relacionados. Sin embargo, no entraremos en demasiados detalles porque esta es una aplicación intencionalmente vulnerable y podríamos pasar mucho tiempo jugando con los términos y analizando diferentes clases en busca de vulnerabilidades. Además de buscar datos codificados, también puede buscar funciones vulnerables que se estén utilizando, como malas funcionalidades de red, interfaces de JavaScript, mala gestión de la memoria del dispositivo, falta de validación de entrada en ciertas funciones y mala criptografía, por nombrar algunas.

Utilice el carácter ‘@’ en la función de búsqueda para buscar todos los lugares donde se llama a una determinada función de interés. Repita el proceso hasta que esté satisfecho con los resultados. Tenga en cuenta que esto dependerá de la aplicación que esté tratando de aplicar ingeniería inversa. Recuerda ser siempre un pensador crítico y evaluar las situación basada en la aplicación en la que está realizando ingeniería inversa. ¡Las posibilidades son infinitas!

Para aquellos que carecen del tiempo o la experiencia para realizar ingeniería inversa en una aplicación móvil para identificar las vulnerabilidades de la aplicación móvil para remediar, NowSecure tiene soluciones y servicios que pueden ayudar. La solución de prueba de seguridad de aplicaciones móviles automatizada de NowSecure Platform reduce el trabajo que conlleva la evaluación de aplicaciones y brinda consistencia. Nuestro equipo de servicios profesionales ofrece capacitación en seguridad de aplicaciones móviles y está disponible para realizar pruebas integrales de penetración móvil. Consulte esta útil lista de verificación para evaluar empresas de seguridad de aplicaciones móviles para realizar pruebas de penetración de aplicaciones móviles.

Deja un comentario