Java tiene una función llamada Interfaz nativa de Java (JNI) , que permite llamar nativo Función de código de máquina desde dentro del código de bytes de Java. Esta función permite ejecutar efectivamente el código nativo de la máquina desde una biblioteca nativa compartida, que, en el caso de las aplicaciones apk de Android, el desarrollador de la aplicación proporciona dentro del paquete apk.
Mi duda es si este JNI debería ser un problema de seguridad . Es decir. Ese código fuera de la máquina virtual Dalvik, el código nativo directo podría suponer un mayor riesgo de ataque al sistema, ya que es el código de bytes de Java a través de Dalvik.
¿Es el código nativo una mayor preocupación de seguridad que el código en una máquina virtual?
Algunos antecedentes
JNI no es la única forma de ejecutar código nativo, aunque sea conveniente, porque no es necesario hacer muchas copias / incrustaciones de un binario para ejecutarse (es decir, de los activos de APKS a una ubicación ejecutable). posible:
Runtime.getRuntime().exec("/data/data/my.package/my.code.bin").
Ahora soy consciente de que, en última instancia, no se pierde nada, solo porque se ejecuta el código nativo, por ejemplo. El modelo de seguridad de muchas cajas de escritorio también funciona con aplicaciones nativas en ejecución. De hecho, al menos uno tiene suerte de que Android coloque las aplicaciones en su propio ID de usuario, por lo que se podría decir de primera mano, que incluso de forma nativa es más seguro en Android, que ejecutar Firefox y chromium con el mismo usuario me@mybox
en algunas cajas de escritorio. .
El punto curial, que también motiva la pregunta si constituye un problema de seguridad, es que el código nativo me parece mucho más flexible para atacar el sistema a través de llamadas al sistema y sobrecargas de búfer, etc., que un posible ataque desde dentro de la apk / codebase Java de aplicaciones. Después de todo, incluso para cosas legítimas, Dalvik / Java se interpone y se deshabilita debido a su objetivo de portabilidad.
Suponiendo que hay un riesgo asociado con JNI y la llamada del ejecutivo, me estoy equivocando o Android no tiene una configuración de permiso para eso. Así que en respuesta a la evaluación de la pregunta, debería haber "upvotes extra" para confirmar o refutar que Android no tiene una configuración de permisos según la aplicación para JNI. Mi aplicación poc al menos se instala con el mensaje:
¿Quieres instalar esta aplicación? No requiere ninguna acceso especial?
que parece indicarme que no requeriría ningún permiso en absoluto. Sin embargo, sé que puede ejecutar código nativo y código nativo JNI.