2012-01-10 16 views
15

Las pautas de Security and Design describen en detalle varios métodos para dificultar que un atacante comprometa la implementación de facturación en la aplicación.Buena ingeniería de software vs. Seguridad

Especialmente notorio es lo fácil que es realizar una ingeniería inversa de un archivo .apk, incluso si está ofuscado a través de Proguard. Por lo tanto, incluso recomiendan modificar todos los códigos de la aplicación de muestra, especialmente los "puntos de entrada y salida conocidos".

Lo que me falta es cualquier referencia a los determinados métodos de verificación de envoltura en un solo método, como la estática Security.verify() que devuelve boolean: Una buena práctica de diseño (código de reducir la duplicación, reutilizable, fácil de depurar, auto-documentado, etc. .) pero todo lo que un atacante necesita hacer ahora es identificar ese método y hacerlo siempre devolver true ... Así que independientemente de cuántas veces lo usé, retrasado o no, al azar o no, simplemente no importa.

Por otro lado, Java no tiene macros como en C/C++, lo que permite reducir la duplicación del código fuente, pero no tiene un solo punto de salida para una función verify().

Así que mis preguntas:

¿Hay una contención inherente entre los/prácticas bien conocidas de ingeniería de software de codificación y el diseño para la llamada de seguridad? (en el contexto de Java/Android/transacciones seguras al menos)

Qué se puede hacer para mitigar los efectos secundarios del "diseño para la seguridad" que parece "dispararse en el pie" en términos de sobrecomplicación software que podría haber sido más simple, más fácil de mantener y depurar mejor?

¿Puede recomendar buenas fuentes para seguir estudiando este tema?

+0

Maday! ¡Creo que tenemos hacker! –

+0

Para In-app, creo que la clase de seguridad debe ser su servidor de aplicaciones. –

+0

El valor de la ofuscación de código es debatido acaloradamente, que * no es para lo que stackoverflow es. –

Respuesta

7

Como de costumbre, es una compensación. Hacer que su código sea más difícil de aplicar ingeniería inversa/crackear implica hacer que sea menos legible y más difícil de mantener. Usted decide qué tan lejos llegar, en función de su base de usuarios prevista, sus propias habilidades en el área, tiempo/costo, etc. Esto no es específico de Android. Mire this Google I/O presentation para las diversas etapas de ofuscación y haga que su código sea resistente a las alteraciones. Luego, decida qué tan lejos está dispuesto a ir para sus propias aplicaciones.

Por otro lado, no hay que confundir/endurecen, etc. todo de su código, sólo la parte que se ocupa de la concesión de licencias, etc. Eso es por lo general una muy pequeña parte de todo el código base y realmente no necesita cambiar eso a menudo, por lo que probablemente pueda vivir siendo difícil de seguir/mantener, etc. Simplemente mantenga algunas notas sobre cómo funciona, así se lo recordará a usted mismo 2 años después :).

+0

Gracias por confirmar lo que he estado observando, sin estar realmente seguro acerca de esto, ya que este no es un área que estudié. Solo ahora, antes de usar la facturación en la aplicación por primera vez, estoy empezando a darme cuenta de lo contraproducente que es (intentar) proteger el software. –

5

La productividad del contador que está describiendo es la punta del iceberg ... Ningún software está 100% libre de errores en el lanzamiento, entonces, ¿qué hace cuando los usuarios comienzan a informar problemas?

¿Cómo resolver problemas o depurar problemas de campo después de deshabilitar el registro, el seguimiento de pila y todo tipo de información que ayuda a los ingenieros de ingeniería inversa pero también ayuda al equipo de desarrollo legítimo?

3

Por más difíciles que sean los métodos de ofuscación, siempre hay una forma de realizar una ingeniería inversa. Quiero decir, si su software se vuelve más popular entre la comunidad de hakers, eventualmente alguien intentará realizar una ingeniería inversa.

La ofuscación es solo un método para hacer que el proceso de ingeniería inversa sea más difícil.

Así que está empacando.Creo que hay muchos métodos de embalaje disponibles, pero también lo es el proceso de ingeniería inversa.

Puede consultar el www.tuts4you.com para ver cómo toneladas de guías están disponibles.

No soy un experto como muchos otros, pero esta es mi experiencia en el proceso de aprendizaje de ingeniería inversa. Recientemente también he visto muchas guías para la ingeniería inversa de aplicaciones Android. He visto incluso en nullc0n (no estoy seguro) CTF, había una aplicación en Reversing Android. Si lo desea, puedo mencionar el sitio después de buscar.

+2

Quizás sea una buena información para niños, pero es dolorosamente difícil de leer. Normalmente no ofuscamos las respuestas en StackOverflow :) –

+0

@owlstead: lo siento mucho por esa mala edición. Nuevo en stackoverflow. :(Lo edité. Si crees que es de algún uso, por favor hazlo 0 (reputación) –

Cuestiones relacionadas