aplicación de Android ataque en el medio

0

Supongamos que tengo una aplicación para Android que, después de una autenticación sólida, extrae datos confidenciales del servidor A y los envía al servidor B sin almacenarlos. Los datos aparecen solo en el tráfico de red (obviamente cifrado) y en el segmento de memoria de la aplicación.

La pregunta es: ¿es posible o incluso posible modificar el apk y enlazarlo de alguna manera para reemplazar los datos que se reenvían del servidor A al B con una cadena predefinida?

Sé que confiar en la seguridad del lado del cliente es un gran no, pero me gustaría entender la complejidad de este truco (obtener el apk, descompilar, encontrar la función para enganchar, compilar, instalar) y los posibles tapones del show .

En este escenario, ¿cuánto más seguridad podría dar la ofuscación de código? ¿Qué tan fácil de descompilar y aplicar ingeniería inversa a un código ofuscado?

No soy un desarrollador de Android ni Java, pero estoy más o menos familiarizado con los conceptos de seguridad

    
pregunta Richard Leonard Kirner 19.06.2017 - 19:46
fuente

3 respuestas

1

Mi respuesta asume que su atacante es "experto en la técnica" para hacer este tipo de trabajo.

  

obteniendo la apk

Le tomaría menos tiempo de lo que le tomó escribir la pregunta.

  

descompilar

Depende un poco de la velocidad de la computadora, pero debe estar en el orden de unos minutos.

  

encontrando la función para enganchar

Si haces todo lo posible para intentar que esto no sea obvio ... ¿quizás un día? Es un poco difícil decirlo en abstracto, ya que depende mucho del tamaño y la complejidad de la aplicación, ya sea una "función" o si el trabajo es mucho más complicado, etc.

Basta con decir que cualquier persona que quiera tomarse el tiempo podrá encontrar lo que necesita ser cambiado.

  

compilando

Depende un poco de la velocidad de la computadora y del tamaño del código base, pero nuevamente debe medirse en minutos.

  

instalando

Le tomaría menos tiempo de lo que le tomó escribir la pregunta.

  

En este escenario, ¿cuánto más seguridad podría dar la ofuscación de código?

Hace unos años, un investigador de seguridad me dijo que el uso de la ofuscación simple de ProGuard en realidad hacía más fácil este tipo de ataque.

Hay ofuscadores más poderosos por ahí, incluyendo el "hermano mayor" de ProGuard, DexGuard. Del mismo modo, hay personas que crean des-ofuscadores, herramientas que reducen la ofuscación de nivel DexGuard a algo más parecido a ProGuard. Por ejemplo, DexGuard intenta encriptar la mayor cantidad posible de su aplicación; los ofuscadores generarían una edición desencriptada del código.

Por lo tanto, el beneficio de los ofuscadores de alto nivel varía, según el estado actual de la carrera de armamentos entre los desarrolladores de ofuscadores y los desarrolladores de ofuscadores. No puedo decir con certeza dónde se encuentra la carrera de armamentos ahora, y mucho menos cuando alguien más lea esta respuesta dentro de unos años.

Yo comparo a los ofuscadores con la vieja historia de dos cazadores en el bosque perseguidos por un oso. Si fuiste uno de los cazadores, no tienes que correr más rápido que el oso para escapar. Solo tienes que correr más rápido que el otro cazador. En el caso de los ofuscadores, el objetivo es hacer que la aplicación no sea atractiva, lo que hace que los atacantes se muevan hacia otros objetivos potencialmente más fáciles. El problema con este enfoque es que asume que el atacante no se preocupa específicamente por su aplicación, que su aplicación es simplemente un objetivo entre muchos. Los atacantes que se preocupan por atacar su aplicación por razones específicas no se comportarán de esa manera, y pasarán el tiempo para descifrarla. En otras palabras, correr más rápido que el otro cazador supone que el oso no está molesto contigo específicamente.

    
respondido por el CommonsWare 19.06.2017 - 20:39
fuente
1

La posibilidad de MITM con una aplicación de Android está en el orden dado.

1. Sin SSL / TLS

Es bastante fácil realizar MITM en este caso. El uso de SSL / TLS en lugar de solo 'cifrado' fue intencional. SSL / TLS no solo proporciona 'Confidencialidad' sino que también proporciona 'Autenticación'. Por lo tanto, si la comunicación de su aplicación no está en HTTPS u otro canal SSL, es bastante fácil realizar un MITM a nivel de red y manipular todas las solicitudes y respuestas.

2. Utilizando el almacén de credenciales de confianza del dispositivo.

Al igual que los navegadores, los dispositivos Android también tienen un conjunto de CA confiables. Si la aplicación se basa en el almacén de credenciales de confianza del dispositivo para la autenticación a través de SSL, [no estoy hablando de autenticación de contraseña aquí], todavía es vulnerable a MITM en las siguientes situaciones: a) una de las CA confiables en la lista de credenciales del dispositivo la tienda se vio comprometida, b) un adversario pudo agregar una autoridad de certificado personalizado a la tienda de credenciales del dispositivo, que tiene al menos una probabilidad mayor de 0.

3. Fijación SSL

Fijación de SSL es un método en el que la aplicación utiliza las credenciales de los dispositivos de confianza. se almacena, pero limita los CA a un subconjunto de lo que está disponible. Hay métodos con los que esto también se puede omitir, posiblemente por un malware. Un ejemplo es el uso de módulos Cydia Substrate / Xposed como JustTrustMe para realizar la prueba de penetración en aplicaciones de Android que utilizan la fijación SSL.

4. Utilizando un almacén de certificados personalizado

Esto es cuando una aplicación utiliza su propio almacén de certificados donde toda la información se incluye en el propio APK. En este caso, el atacante, para realizar un ataque MITM, tendría que descompilar o desarmar la aplicación, modificar el código smali para agregar su propio certificado, volver a compilar y firmar el apk y t = hacer que la víctima lo instale. Sí, es bastante difícil.

    
respondido por el hax 19.06.2017 - 22:30
fuente
0

Si tu aplicación de Android está escrita en Java (o Kotlin), y no usas un ofuscador, el ataque es bastante fácil. Las herramientas de ofuscación profesionales pueden disuadir al pirata informático, pero si el objetivo es reemplazar la salida con una cadena predefinida, la ofuscación de código no ofrecerá protección real.

La gente puede incluso realizar estos cambios en el nivel de la plataforma, porque tu aplicación utilizará la API de red del sistema, que es de código abierto en Android.

Debes buscar una respuesta en el nivel de protocolo. Si ambos servidores firman sus paquetes e incluyen una firma del paquete entrante en su respuesta, el desafío de MitM será mucho más difícil.

    
respondido por el Alex Cohn 19.06.2017 - 20:59
fuente

Lea otras preguntas en las etiquetas