Proteggi il traffico TCP per la comunicazione tra processi

3

Ho diversi processi in esecuzione su un sistema che interagiscono tra loro tramite TCP (ad esempio con il protocollo di messaggistica asincrona di twisted).

process1 <=====> broker <=====> process2

C'è un'istanza del server (broker) in esecuzione su un host Linux, che ascolta un socket TCP localhost: port . Esistono anche altri processi, in esecuzione sullo stesso host, che interrogano l'istanza del broker utilizzando il socket tramite TCP (fornito da twisted). Il broker ha accesso a un modulo di sicurezza hardware (HSM).

Attualmente sto pensando agli aspetti di sicurezza di questo design. Sarebbe possibile per un intercettatore, che ha accesso fisico diretto all'host, ascoltare il traffico TCP tra i client e il broker su questo host? Poiché a volte vengono trasferiti dati sensibili, voglio proteggere la comunicazione tra i processi e il broker sull'host.

Come si può fare? C'è sempre il problema di memorizzare un segreto privato. Per il broker non è un problema perché ha accesso a HSM, ma per i processi client che interagiscono con il broker. È difficile nascondere un segreto per un utente malintenzionato che ha accesso fisico all'host. Come si può realizzare l'autenticazione / crittografia tra processi e broker?

Spero tu capisca il mio problema e mi possa aiutare!

MODIFICA: SSL / TLS non sarebbe un buon approccio, poiché comporta un sovraccarico elevato e esiste anche il problema dell'archiviazione sicura per i segreti privati.

    
posta Ovomaltine 27.12.2016 - 14:08
fonte

3 risposte

2

Se si desidera limitare la comunicazione tra processi su una macchina, suggerirei di eliminare TCP e utilizzare invece il socket di dominio Unix. Il socket di dominio Unix può essere utilizzato esattamente allo stesso modo di TCP (è un socket bidirezionale), ma crea un file socket invece di ascoltare su una porta TCP. È possibile controllare l'autorizzazione sul file socket utilizzando le autorizzazioni standard del filesystem. Twisted supporta il socket dominio Unix.

Se davvero devi usare TCP, allora puoi usare SSL senza crittografia . Per impostazione predefinita, il codice eNULL e l'autenticazione aNULL non sono consentiti in OpenSSL, ma è possibile richiederlo esplicitamente. Personalmente non lo consiglierei.

Potresti anche avere un po 'di fortuna nel definire regola iptable che limita il modo in cui i processi può connettersi ad alcune porte TCP.

Nel complesso, cercare di difendersi da qualcuno con accesso root / fisico illimitato alla tua macchina è uno sforzo inutile, e la crittografia per la comunicazione tra processi all'interno della stessa macchina è piuttosto sciocca ma è abbastanza innocua.

    
risposta data 29.12.2016 - 07:01
fonte
3

L'ascolto sul traffico di localhost è possibile anche su Windows e Linux.

In Linux tcpdump -i lo .

Devi prendere in considerazione almeno la codifica con algoritmo speciale della tua comunicazione e anche considerare di proteggere il processo del broker da dumping, debug o reverse-engineering.

    
risposta data 27.12.2016 - 16:15
fonte
2

Le comunicazioni tra questi processi possono sempre essere intercettate da un utente malintenzionato con accesso privilegiato al sistema.

Con l'accesso root alla casella, l'utente malintenzionato possiede il sistema e può aggirare qualsiasi cosa e tutto ciò che si implementa (per la maggior parte). Traffico crittografato? Le funzioni che elaborano le chiavi di crittografia possono essere agganciate o la memoria di processo può essere scaricata. L'anti-reverse engineering è una possibilità, ma può essere sempre aggirato da qualcuno abbastanza abile. Il modo più efficace e sicuro per farlo sarebbe scrivere un LKM che imponga la sicurezza dei tuoi processi a livello di kernel; questo richiede una grande esperienza nella programmazione del kernel ed è estremamente difficile da fare correttamente (oserei dire impossibile ?!) - qualcuno troverà sempre una scappatoia, anche se è qualcosa da considerare.

Inoltre, gli utenti non root non possono creare socket grezzi, che sono necessari per sniffare i pacchetti (il che significa che un utente malintenzionato avrà bisogno dell'accesso di root al sistema per intercettare le comunicazioni tra i processi).

La protezione delle informazioni su un sistema da parte di un utente malintenzionato che già la possiede non è un'attività banale. Puoi rendere più difficile l'accesso a tali informazioni, ma non puoi mai proteggerle completamente.

    
risposta data 29.12.2016 - 02:31
fonte

Leggi altre domande sui tag