Riesgo de seguridad con una biblioteca enlazada dinámicamente

2

Escenario: tengo una aplicación de Android que utiliza una biblioteca con licencia LGPL. Para satisfacer esta licencia, vinculo dinámicamente a dicha biblioteca en tiempo de ejecución, lo que permite al usuario cambiar el archivo .so si hubiera una actualización de la biblioteca o por cualquier otro motivo.

Problema: Para intercambiar el archivo .so, el usuario tendría que desempaquetar la apk, reemplazar el archivo .so, volver a empaquetarlo y luego renunciar a él. Las herramientas como apktool funcionan bien para esto, pero mi aplicación se basa en gran medida en un backend que requiere que la apk esté firmada por mi almacén de claves. Así que el intercambio de esta biblioteca haría que la aplicación fuera inútil.

Mi solución: Cuando el usuario inicia la aplicación, simplemente copio el archivo .so de su casa en "/ data / data / package name / lib" a un directorio al que el usuario puede acceder. Luego uso void *handle = dlopen("path/to/external/storage", RTLD_NOW|RTLD_GLOBAL); para enlazar a la biblioteca. Esta solución funciona a la perfección y le permite al usuario cambiar libremente el archivo .so a su gusto.

Mi pregunta: ¿Hay algún riesgo de seguridad involucrado aquí? Aparte de ver al Sr. Robot, no tengo experiencia con el "pirateo". En este caso, alguien podría modificar y compilar su propio .so utilizando los mismos símbolos a los que me vinculo, lo que les permitiría ejecutar su código detrás de todos los permisos que mi aplicación ha permitido. ¿Es esta una amenaza potencial o no importa porque solo estaría en el dispositivo de ese usuario? ¿Hay una mejor manera de hacer esto? Finalmente, ¿es necesario que el usuario tenga acceso de esta manera ya que técnicamente pueden desempaquetar y volver a empaquetar la apk para cambiar el archivo .so para que la LGPL esté satisfecha aunque no puedan pasar la actividad de inicio de sesión después de hacerlo? ?

    
pregunta foolioJones 03.10.2016 - 12:50
fuente

1 respuesta

4

Esto es definitivamente peligroso, ya que cualquier programa con permiso para cambiar el almacenamiento externo (una gran proporción de las aplicaciones de Android tiene esto) puede cambiar el .so y ejecutar código arbitrario con los permisos de su aplicación.

Si realmente quieres que los usuarios puedan cambiar la biblioteca. Debes proporcionar una IU que les permita elegir un archivo y luego copiar el .so en el directorio /data de tu propia aplicación antes de vincularlo.

    
respondido por el billc.cn 03.10.2016 - 15:24
fuente

Lea otras preguntas en las etiquetas