Estoy trabajando en un proyecto de Android cuyo objetivo es identificar qué funciones nativas o de Java deben estar conectadas y monitoreadas en tiempo de ejecución para verificar si la aplicación contiene un comportamiento malicioso o prácticas de programación deficientes.
Por ejemplo, conectar el connect () permite acceder a la información del puerto y detectar conexiones que usan http (80) en lugar de https (443), lo que es definitivamente una práctica de programación débil.
edit: aparentemente, verificar el número de puerto no es suficiente para saber si es http o https, y se requeriría un análisis de tráfico (gracias @ André Borie).
He identificado muchos otros comportamientos potencialmente maliciosos y prácticas de programación débiles, y he preparado estructuras de enlace similares. Quería preguntarte qué funciones engancharías para verificar si la aplicación intenta:
1) acceder a la tarjeta SD,
2) detectar GPS,
3) acceso a la cámara o micrófono,
4) números premium de llamadas.
Además, el uso de métodos en desuso es potencialmente peligroso por razones de seguridad. Por lo tanto, quiero comprobar si la aplicación está utilizando alguna. Lo que estoy pensando es usar una lista negra de todos los métodos obsoletos conocidos y luego escanear el código de la aplicación para buscar métodos de esa lista. ¿Estás de acuerdo con esto? (Considere un escenario en el que no hay ofuscación de código). Lo mismo para la API de cifrado débil (por ejemplo, MD5?): ¿Cómo detectarlos?
edit: Reconozco el hecho de que no todos los métodos en desuso están en desuso por razones de seguridad (gracias a @CommonsWare), pero algunos de ellos lo están. ¿Cómo separaría los métodos que han quedado en desuso por problemas de seguridad conocidos de los demás? Sería bueno tener una lista completa.