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?
Maday! ¡Creo que tenemos hacker! –
Para In-app, creo que la clase de seguridad debe ser su servidor de aplicaciones. –
El valor de la ofuscación de código es debatido acaloradamente, que * no es para lo que stackoverflow es. –