¿Cómo asegurar un socket local?

7

He creado un servicio escrito en c que se ejecuta en el sistema operativo Android como un servicio central. Tengo algunas aplicaciones de Android que se comunican con este servicio a través de una conexión de socket (Java - > C).

Mi problema es que cualquiera puede abrir una conexión a mi servicio si saben qué puerto está usando. Las aplicaciones no tienen credenciales y solo se ejecutan en el recinto de seguridad de Android.

¿Qué métodos puedo usar para al menos intentar y evitar que una aplicación incorrecta acceda a este servicio? ya que en el host local ssl no parece relevante?

Ambas aplicaciones están compiladas para que yo pueda compartir una clave secreta entre ellas, pero las aplicaciones de Android podrían ser descompiladas.

¿Cómo puede asegurar normalmente las conexiones cliente / servidor en la misma máquina?

    
pregunta Lunar 13.08.2015 - 12:10
fuente

2 respuestas

4

Esto se siente como una instancia de el problema XY .

La respuesta corta es:

En general, esta es la forma en que proporciona información desde una aplicación y luego controla el acceso a esa información.

La respuesta más larga:

Está utilizando el zócalo para comunicar información de su Servicio a otras aplicaciones, pero esta no es realmente la forma "Android-y" de hacer las cosas. Android tiene un sistema para la comunicación entre procesos que utiliza algo llamado Intents . Sin embargo, eso se está alejando un poco de la pregunta específica de seguridad, por lo que si está colgado de los documentos de Android, ¡no dude en preguntar en StackOverflow!

El resultado final es que este sistema de Intenciones y Permisos es la herramienta de Android para limitar el acceso a las aplicaciones. Tenga en cuenta que esto difiere del modelo de escritorio tradicional (que se basa en usuarios, en lugar de aplicaciones), porque el desarrollo móvil está dirigido a un caso de uso de un solo usuario.

    
respondido por el mfrankli 13.08.2015 - 16:36
fuente
0

Desde mi lectura del libro Embedded Android parece que los sockets locales se usan comúnmente en Android internamente para proporcionar servicios de hardware, por lo que esta arquitectura no es totalmente fuera de lo común para Android. Los sockets locales toman el permiso de su directorio que contiene en Linux:

  

En la implementación de Linux, sockets que son visibles en el   El sistema de archivos respeta los permisos del directorio en el que se encuentran. Sus   Propietario, grupo y permisos pueden ser cambiados. Creación de un nuevo   el socket fallará si el proceso no tiene escritura y búsqueda   Permiso (ejecución) en el directorio donde se crea el socket.   La conexión al objeto socket requiere permiso de lectura / escritura.

     

Este comportamiento difiere de muchos sistemas derivados de BSD que ignoran   Permisos para sockets de dominio UNIX. Los programas portátiles no deberían   Confíe en esta función para la seguridad.

Consulte enlace

    
respondido por el satur9nine 06.11.2015 - 18:24
fuente

Lea otras preguntas en las etiquetas