Una password preimpostata in un sistema embedded è sufficientemente sicura?

1

Ho un dispositivo embedded safety-critical, che invia gli aggiornamenti dei dati (nelle richieste get) e richiama le impostazioni da un server. Il dispositivo utilizza un chipset integrato di microcontroller / wifi chiamato Particle P1; questo prende tutti i dati inviati e lo crittografa con AES, lo invia a un server di proprietà della società chipset (che assumeremo per ora è abbastanza sicuro), viene decrittografato e quindi inviato su SSL al mio server. Per garantire che nessuno possa inviare dati falsi o impostazioni al server, ogni dispositivo ha sia un numero seriale pubblicamente accessibile, sia una password preimpostata di ~ 50 caratteri generata in modo casuale corrispondente a quel numero seriale. Il server cerca il numero di serie in un database e confronta la password fornita a quella su file prima di prendere in considerazione uno qualsiasi dei dati.

Questo tipo di sistema di token di accesso permanente è sicuro?

EDIT: secondo il fornitore del microcontrollore, il collegamento tra il dispositivo e questi è adeguatamente protetto con TLS a chiave pubblica:

The Particle cloud uses RSA for session key exchange and authentication and then AES for data encryption for all cloud transactions. Each device has its own copy of the Particle cloud public key and its own private key. I don't know of a doc reference but the source code is all on github for anyone to see.

    
posta 0xDBFB7 21.03.2016 - 17:41
fonte

3 risposte

3

Bene, la preoccupazione principale qui è che un utente malintenzionato potrebbe intercettare il traffico tra la società di chipset e il tuo server.

Come fa il dispositivo a sapere che sta parlando al server corretto? Se ho intercettato il traffico tra il dispositivo e il server e ho fatto finta di essere il server, il dispositivo mi avrebbe dato felicemente la sua password?

Il modo "corretto" per farlo è usare SSL autenticato dal client. Ciò significa che invece di una "password", ogni dispositivo riceve un RSA o ECC coppia di chiavi e un certificato corrispondente dal server (che è un Autorità di certificazione in questo caso). Ciò ti consente di utilizzare il TLS handshake autenticati dal client bidirezionale

.

Esistono modi sicuri per fare l'autenticazione usando un segreto precondiviso noto sia al server che al client, ma "ecco la mia password, assicurati che corrisponda!" non è uno di questi (almeno non senza risolvere autonomamente il problema "come faccio a sapere che sto parlando al server corretto?"). Un modo è quello di avere entrambi i fini MAC il massaggio con una chiave derivata dal segreto condiviso. Quindi l'altra parte può calcolare lo stesso MAC usando la loro copia del segreto condiviso e assicurarsi che venga fornito con lo stesso MAC. Un altro modo è utilizzare AES nella modalità di crittografia autenticata (AE) .

... Oppure, come @SEJPM sottolinea, salta l'intera cosa "rolling your own" e usa uno dei Codice di sicurezza cifrature precondivise (TLS-PSK) .

    
risposta data 21.03.2016 - 18:24
fonte
1

Senza il client che verifica il server, qualsiasi schema come questo è vulnerabile alla rappresentazione. Specificamente, implementando un falso server e costringendo il client a connettersi ad esso (magari attraverso una regola del firewall), il server falso riceverà i dettagli inviati dal client e potrebbe quindi utilizzarli per inviare ulteriori contenuti dannosi al server legittimo .

Per proteggersi da questo, il client potrebbe confrontare il certificato del server legittimo con quello del server a cui si sta connettendo e inviare solo i dati se corrisponde. Tuttavia, ciò richiederebbe al client di conoscere il certificato pubblico corrispondente alla parte privata utilizzata dal server, che non è sempre possibile nei dispositivi integrati (ad esempio, tendono ad essere privi della capacità di aggiornamento in caso di modifiche del certificato).

Pertanto, sarebbe possibile utilizzare altri metodi che consentono a entrambe le estremità di verificare l'altro: forse un nonce, generato dal server e inviato al client, hash con un metodo predefinito (ad es. concatenare un pre stringa definita al nonce, quindi hashing con un algoritmo di hashing crittografico) e restituita. Poiché la stringa predefinita non viene mai inviata, questo dovrebbe essere difficile da interrompere senza l'accesso al dispositivo o al server (entrambi i quali devono conoscere la stringa), anche se si conosce il nonce per una determinata richiesta.

In sostanza, è necessario verificare che si stia comunicando con l'altro dispositivo previsto, da entrambe le estremità, per essere sicuri che i dati non possano essere manomessi. Questo però comporta più passaggi.

    
risposta data 21.03.2016 - 18:24
fonte
0

A rischio di essere eccessivamente generosi, la tua soluzione è sicura salvo due circostanze.

"Each device has its own copy of the Particle cloud public key"

Ciò significa che (salvo un bug del software che consente a qualcosa come l'ingannare il client di utilizzare una versione debole di TLS / SSL) il dispositivo sarà semplicemente in grado di parlare con il server che ha la chiave privata corretta, ovvero il "Particle cloud" ospite. Pertanto, il server e il dispositivo hanno una forma di autenticazione a due vie ed è fatto in segreto, quindi c'è riservatezza e non ripudio.

L'altra estremità libera è, cosa succede se la chiave privata di Particle Cloud dovesse essere compromessa? Una corretta gestione dei certificati (tramite CA) consente questa inevitabilità invalidando una chiave e sostituendola con una nuova. Se la chiave è hardcoded, sembra che sia possibile solo tramite un aggiornamento del firmware.

Gli aggiornamenti del firmware sono disponibili in-band? fuori dalla band? solo come parte di questa meccanizzazione del cloud? Affatto? La risposta potrebbe essere ciò che determina quanto sei a tuo agio nel credere che il canale di comunicazione sia pronto per le applicazioni di sicurezza della vita. Qualsiasi problema con questi due avvertimenti potrebbe lasciare i dispositivi tristemente non protetti fino a quando un aggiornamento del firmware per correggere il problema viene fatto a tutti i dispositivi, in modo sicuro (non posso fidarci del cloud per spingerlo di più se la chiave è compromessa, eh?)

    
risposta data 21.03.2016 - 20:51
fonte

Leggi altre domande sui tag