Come posso creare un servizio che si collega automaticamente a un servizio di terze parti senza memorizzare le credenziali in testo normale?

6

So che memorizzare le credenziali di accesso in testo semplice è uno dei principali non sicurezza della sicurezza, ma sto lavorando a qualcosa in cui non riesco a pensare a nessuna altra soluzione.

Il mio servizio si connette all'e-mail di un utente tramite IMAP. Per connettersi al server e-mail, il mio servizio deve conoscere le credenziali di accesso dell'account e-mail dell'utente.

Normalmente, utilizzerei una sorta di meccanismo di crittografia o di hashing per memorizzare le credenziali dell'utente nel database, ma dal momento che gli hash sono (supposto essere) a senso unico, non posso accedere al server e-mail con il credenziali hash.

Come posso creare un sistema sicuro per il mio servizio se l'utente deve avere le credenziali per connettersi a un sistema di terze parti e al mio sistema?

    
posta Peter Olson 20.05.2012 - 00:25
fonte

2 risposte

5

Sarà necessario memorizzare la password e-mail dell'utente in una forma recuperabile. Puoi ancora criptare le password, ma non puoi cancellarle.

Memorizzare le password degli utenti in forma recuperabile comporta alcuni rischi per la sicurezza. Se il database delle password utente è mai trapelato, hai una grave violazione della sicurezza. Tuttavia, questa è solo la natura del tuo servizio. Le persone normalmente consigliano l'hashing per cercare di mitigare questo rischio, ma dal momento che non puoi usare l'hashing della password nella tua particolare applicazione, dovrai usare altre misure per mitigare il rischio.

Ecco la mia raccomandazione su come farlo nel modo più sicuro possibile. Configura una macchina (o VM) separata che viene utilizzata esclusivamente ai fini della gestione delle password e-mail. Esegue un servizio - chiamiamolo il servizio di password-keeper - che espone alcune semplici API:

  • Registra account IMAP. Il chiamante fornisce informazioni su un account di posta elettronica, ad esempio nome utente e password. Il tuo servizio di password-keeper memorizza queste informazioni.

  • Leggi email. Il chiamante identifica un account IMAP precedentemente registrato con il servizio. Il tuo servizio di password-keeper cerca il nome utente e la password per l'account IMAP, si connette al server IMAP e autentica su di esso, scarica qualsiasi nuova e-mail e restituisce i messaggi e-mail desiderati al chiamante.

Questo servizio di password-keeper è come un Hotel California per le password e-mail: le password entrano, ma non se ne vanno mai. Il servizio di password-keeper è responsabile per la memorizzazione delle password nel modo più sicuro possibile, e mai per esporle ad altri. Potrebbe memorizzare le password in un database separato, crittografato con una chiave speciale. La chiave di crittografia potrebbe essere archiviata in un file di configurazione accessibile a questo servizio, ma non a nessun altro. Il servizio di password-keeper ora può controllare l'accesso agli account di posta elettronica dei tuoi utenti. Ad esempio, può eseguire la registrazione protetta (in modo da poter rintracciare le intrusioni), limitare la velocità (per ridurre l'impatto di una violazione degli altri sistemi) o altre protezioni. Puoi anche bloccare chi o cosa può accedervi.

Ora, scrivi al resto del tuo sistema come cliente del servizio di password-keeper. Configura il servizio di password-keeper in modo che sia accessibile solo al tuo codice (e non al pubblico) e utilizzi un'autenticazione strong per la connessione del tuo codice. Assicurati di non memorizzare mai le password e-mail degli utenti in nessun'altra parte del tuo sistema. Quando l'utente fornisce una password di posta elettronica all'applicazione, è necessario richiamare immediatamente l'API "Registra account IMAP del servizio password", passare la password ed eliminare tutte le altre copie della password.

Questo non fornisce una protezione perfetta, ma ti offre un posto dove stare: un modo per ottenere la massima protezione possibile, per le password degli utenti. Con questo tipo di approccio e una certa diligenza, penso che tu possa fornire un livello ragionevole di sicurezza ai tuoi utenti.

    
risposta data 21.05.2012 - 02:06
fonte
1

Il servizio deve dimostrare al servizio di terze parti che è autorizzato ad accedere a quel servizio. Qualunque credenziale utilizzi per farlo deve essere conservata in modo sicuro. A parte l'utilizzo di un HSM per archiviare la chiave ed eseguire le operazioni di crittografia alla fine (e il servizio di terze parti partecipa a un protocollo di chiave pubblica compatibile), penso che tu sia bloccato con la memorizzazione di una password equivalente nella casella eseguendo il tuo servizio.

Se l'utente deve avere (e inserire quando necessario) le credenziali per ogni sistema coinvolto, allora può creare un sistema sicuro, nel senso che non è necessario archiviare e essere in grado -per recuperare tali credenziali. Dove manca un sistema di questo tipo non è in sicurezza ma in comodità dell'utente .

    
risposta data 20.05.2012 - 03:55
fonte

Leggi altre domande sui tag