Una breve historia sobre c贸mo la conveniencia a veces se dispara en la rodilla

Artem Azariev, Jefe del Centro de Competencia de Canales de Servicio Remoto de la Direcci贸n de Tecnolog铆as de la Informaci贸n del ICD

Hola Habr!

Mi nombre es Artyom Azariev, soy el l铆der del equipo de Android del Banco de Cr茅dito de Mosc煤 y hoy quiero hablar sobre la seguridad de las aplicaciones desde el punto de vista de las bibliotecas de depuraci贸n. Hace un par de a帽os trabaj茅 por cuenta propia, luego, durante 4 a帽os, particip茅 en un desarrollo completo para un sistema operativo m贸vil. Dio la casualidad de que en los a帽os de mi trabajo independiente para mejorar mis propias calificaciones, toqu茅 el tema de la ingenier铆a inversa de las aplicaciones de Android, y gradualmente se convirti贸 en mi hobby.

Introduccion


No es ning煤n secreto que durante mucho tiempo Android Studio no present贸 ning煤n mecanismo para recibir adecuadamente los datos de la aplicaci贸n desde el dispositivo: el contenido de la base de datos, SharedPrefrences, solicitudes de red. Todos sufrieron, incluidos gigantes como Facebook.

Fueron ellos quienes dieron a la comunidad una biblioteca extremadamente 煤til para depurar Shetho (https://github.com/facebook/stetho) con una integraci贸n muy simple en el proyecto en solo un par de l铆neas. No hablar茅 sobre la biblioteca en s铆; lo m谩s probable es que muchas personas ya lo sepan, pero a qui茅n le importa, lo leen por su cuenta.

La integraci贸n de esta biblioteca es la siguiente:





Al usar el navegador Chrome, tenemos acceso a los contenidos de las bases de datos y a la configuraci贸n almacenada en el dispositivo, y si conectamos el complemento para okhttp3, tambi茅n a los contenidos de las solicitudes de red.



"Pero oye, 驴tambi茅n estar谩 en la versi贸n de lanzamiento?" - se preguntar谩 el desarrollador atento. Pasemos a la descripci贸n de la biblioteca: 驴qu茅 se nos aconseja sobre esto?

El proyecto de muestra muestra que esta biblioteca solo debe inicializarse en la rama de depuraci贸n sobrecargando el manifiesto en una de las opciones de compilaci贸n.



Ensamblamos el ensamblaje de lanzamiento con la minificaci贸n habilitada (bandera minifyEnabled). Estamos revisando el navegador, no vemos ninguna aplicaci贸n disponible para depurar y silenciosamente nos vamos a dormir.

La minificaci贸n es un proceso destinado a reducir el tama帽o del c贸digo fuente mediante la eliminaci贸n de caracteres innecesarios sin cambiar su funcionalidad. La herramienta Proguard utilizada en Android tambi茅n est谩 involucrada en la limpieza del proyecto del c贸digo no utilizado.

Hackers


Cualquier ingenier铆a inversa de la aplicaci贸n comienza con el estudio de posibles marcadores y puertas traseras, que los desarrolladores dejaron amablemente por s铆 mismos.

Primero, descompilamos la aplicaci贸n en Java tanto como sea posible y estudiamos el 谩rbol de paquetes.



Lo m谩s dulce que se puede encontrar en la aplicaci贸n atacada es el viejo Stetho. La minificaci贸n configurada de forma predeterminada no la elimina, y en general toda la base de c贸digo de esta biblioteca simplemente se arrastra a una compilaci贸n de producci贸n.

Vi muchas aplicaciones de compa帽铆as bastante buenas y grandes que han dejado tal biblioteca en versiones de producci贸n durante muchos a帽os.

Alguien preguntar谩: 鈥溌縔 qu茅 es? Esta apagado Adem谩s, incluso si lo enciendes, intenta compilar esta aplicaci贸n m谩s tarde ".

Es cierto que descompilar en Java casi nunca proporciona un c贸digo de trabajo del 100%. Pero hay smali / backsmali.
Smali / backsmali es un ensamblador / desensamblador para el formato dex utilizado por dalvik, una implementaci贸n de Java VM en Android.

Al desmontar nuestra aplicaci贸n, veremos que nada est谩 realmente incluido.



Pero, despu茅s de agregar un par de l铆neas y tener en el proyecto todo el c贸digo de la biblioteca, nosotros, sin esforzarnos particularmente, podemos volver a activarlo.



Para el complemento okhttp3, el soporte tambi茅n se habilita de la misma manera: agregando un Interceptor a OkhttpClient.

Despu茅s de haber recogido la aplicaci贸n (y es f谩cil hacerlo desde smali), vemos que la depuraci贸n a trav茅s de stetho est谩 nuevamente disponible, y todos sus datos en el repositorio de configuraci贸n local, toda su API est谩 completamente frente a los ojos de hackers astutos.

Que hacer


Hay muchas opciones para excluir el paquete de la compilaci贸n final. Personalmente, prefiero escribir un peque帽o contenedor para inicializar la biblioteca Stetho y descomponer sus diversas implementaciones de acuerdo con las opciones de ensamblaje.
liberar



depurar



Y tambi茅n indique que esta base de c贸digo solo es necesaria en la compilaci贸n de depuraci贸n.



Puede exhalar


Me gustar铆a concluir expresando los principios b谩sicos que uso cuando trabajo en el contexto de la seguridad de las aplicaciones de Android:

  • Minimiza y, si es posible, ofusca todo lo que obtienes.

    En cualquier caso, esto complica el an谩lisis del c贸digo descompilado. Un argumento adicional para crear canas en la cabeza del pirata inform谩tico ser谩 la bandera de reempaquetado de clases, que mover谩 las clases minimizadas a un solo paquete. Habr谩 muchos de ellos.
  • Explore sus propias aplicaciones.

    Al menos una inspecci贸n superficial del 谩rbol de sus paquetes puede decir mucho sobre la estructura utilizada en el proyecto, los marcos, las bibliotecas. Lo que obviamente no pertenece all铆 debe ser eliminado sin piedad.
  • Cualquier herramienta puede tarde o temprano dispararte en la rodilla.

Cuando agregue algo a su proyecto, incluso por buenas razones, piense en c贸mo hacerlo correctamente y cu谩nto lo necesita.

Espero que mi experiencia te sea 煤til.

Source: https://habr.com/ru/post/471738/


All Articles