Come proteggere un socket locale?

7

Ho creato un servizio scritto in c che viene eseguito sul sistema operativo Android come servizio principale. Ho alcune app Android che comunicano con questo servizio tramite una connessione socket (Java - > C).

Il mio problema è che chiunque può aprire una connessione al mio servizio se sa quale porta sta usando. Le applicazioni non hanno credenziali e funzionano solo nella sandbox Android.

Quali metodi posso utilizzare per provare almeno a evitare che l'app non valida acceda a questo servizio? come il suo host locale ssl non sembra rilevante?

Entrambe le app sono compilate in modo da poter condividere una chiave segreta tra di loro, ma le app Android potrebbero essere decompilate.

Come si possono normalmente proteggere le connessioni client / server sulla stessa macchina?

    
posta Lunar 13.08.2015 - 12:10
fonte

2 risposte

4

Sembra un'istanza di il Problema XY .

La risposta breve è:

In generale, questo è il modo in cui fornisci le informazioni da un'app e quindi controlli l'accesso a tali informazioni.

La risposta più lunga:

Stai utilizzando il socket per comunicare informazioni dal tuo Servizio ad altre applicazioni, ma questo non è proprio il modo "Android-y" di fare le cose. Android ha un sistema per la comunicazione tra processi che utilizza qualcosa chiamato Intenti . Questo però sta diventando un po 'lontano dalla domanda specifica per la sicurezza, quindi se sei bloccato sui documenti Android, non esitare a chiedere su StackOverflow!

Il risultato è che questo sistema di Intenti e Permessi è lo strumento di Android per limitare l'accesso alle app. Nota che questo differisce dal modello desktop tradizionale (che è basato sugli utenti, piuttosto che sulle applicazioni), perché lo sviluppo mobile è finalizzato a un caso d'uso per singolo utente.

    
risposta data 13.08.2015 - 16:36
fonte
0

Dalla mia lettura del libro Embedded Android sembra che le prese locali siano comunemente utilizzate internamente in Android per fornire servizi hardware, quindi questa architettura non è del tutto fuori dall'ordinario per Android. Le prese locali prendono il permesso della loro directory contenente su Linux:

In the Linux implementation, sockets which are visible in the filesystem honor the permissions of the directory they are in. Their owner, group, and permissions can be changed. Creation of a new socket will fail if the process does not have write and search (execute) permission on the directory the socket is created in. Connecting to the socket object requires read/write permission.

This behavior differs from many BSD-derived systems which ignore permissions for UNIX domain sockets. Portable programs should not rely on this feature for security.

Vedi link

    
risposta data 06.11.2015 - 18:24
fonte

Leggi altre domande sui tag