Metodi per la memorizzazione di password in chiaro su un client

1

Mi è stato affidato un po 'di automazione del backend che ha bisogno di raschiare i dati da un sito Web interno utilizzando il nome utente / password di un dipendente per accedere al sito.

Esiste un server database di back-end, ma non ho accesso a detto database (la burocrazia è un ostacolo). In particolare, tutti i dipendenti hanno accesso a questi dati tramite un login utente / password sul sito interno, e anche il mio raschietto deve.

Poiché ho un scrap automatico che deve essere eseguito a intervalli regolari, sfortunatamente ho bisogno di memorizzare un set di credenziali in testo semplice, in modo che possano essere utilizzati per l'autenticazione con il sito, e quindi raschiare le informazioni per la digestione. Il sistema host per questi script è bloccato, dietro la chiave SSH richiesta, ed è probabilmente più strong della sicurezza fisica in questo ufficio comunque (qualcuno con accesso all'ufficio potrebbe ottenere queste informazioni molto più facilmente che attaccare il mio server).

La mia domanda: come posso rendere le password in chiaro memorizzate sul client il più a basso rischio possibile, dato che è impossibile evitare del tutto?

Come addenda per potenziali domande aggiuntive, il sito è un semplice modulo HTTPS, nome utente / password vengono postati e un token di autenticazione (ID sessione) viene utilizzato per ulteriori richieste. Purtroppo l'ID scade, quindi ho bisogno di ripetere l'autenticazione della password ogni 2 ore.

Modifica

Sulla base delle domande che ho ricevuto finora, la mia attuale implementazione teorica è quella di mantenere il nome utente / password memorizzati, crittografati su disco e richiedono la chiave di decrittografia al primo avvio / riavvio e in un periodo di tempo prestabilito. In teoria ciò ridurrebbe il rischio che il dispositivo venisse rubato fisicamente e compromettesse le informazioni di autenticazione.

Un'opzione alternativa che sto considerando è di avere un servizio di intermediazione in esecuzione su un'istanza / contenitore separato o bloccato, la cui immagine sarebbe crittografata su disco. Questo può essere il servizio di autenticazione di middle man e avrebbe un unico scopo, recuperare la chiave ID di sessione dal sito su richiesta e memorizzare le informazioni di username / password temporaneamente decodificate. Questo potrebbe servire a separare ulteriormente le informazioni utente / pass dal servizio potenzialmente più esposto.

    
posta Baron_Von_Munchhausen 04.09.2018 - 22:58
fonte

4 risposte

0

Come al solito con questo tipo di domande, iniziamo definendo un Modello di minacce . La Electronic Frontier Foundation ha un articolo chiamato Valutazione del modello di minaccia dove ti chiedono di meditare su tre domande ( mio in corsivo ):

  1. What are you protecting? (The data, communications, and other things that could cause problems for you if misused)
  2. Who are you protecting it from? (The people, organizations, and criminal actors who might seek access to that stuff)
  3. How many resources can you invest in protecting it? (The money, time, and convenience you're willing to dispense with protecting those things)

Sembra:

  1. Stai proteggendo A) i dati che sono già pubblici, almeno all'interno della tua organizzazione, e B) un nome utente / password per questo contenuto.
  2. Lo stai proteggendo dagli hacker che entrano nel tuo server, che è sepolto in profondità nella rete locale, ma escludendo come una minaccia chiunque abbia accesso fisico all'ufficio (e presumibilmente anche l'accesso alla rete?). Quindi quali sono gli attori di minacce che stai effettivamente cercando di proteggere?
  3. Sembra che tu sia disposto a investire qualche sforzo nella protezione del nome utente / password, ma non puoi avere un babysitter umano 24/7.

Come indicato nella domanda e nei commenti, il software ha bisogno di accedere al nome utente / password, quindi il meglio che puoi fare è crittografarlo su disco e richiedere a un essere umano di inserire la password di decrittazione di volta in volta. Esistono alcune opzioni su come eseguire questa operazione a seconda del modello di minaccia / del paranoico che si desidera essere:

  1. Usa openssl (o altre crypto lib) nella tua app per leggere il file crittografato dal disco e chiedi a un umano la password di decodifica ogni volta che il raschietto lo richiede, quindi cancellalo dalla memoria (questo protegge dagli utenti malintenzionati che hanno compromesso il server su cui è in esecuzione).
  2. Utilizza openssl come sopra, ma richiede solo una password di decrittazione all'avvio del processo.
  3. Trova qualche trucco di Linux che lo protegga all'interno della home directory dell'utente (qualcosa di equivalente a API di protezione dei dati di Microsoft ).
  4. Se si tratta di un server per utente singolo o se non si è preoccupati di trattare altri utenti come dannosi, abilitare la crittografia completa del disco sulla macchina in modo che richieda una password durante l'avvio. Questo protegge solo dal furto fisico del server, ma forse è appropriato per il tuo modello di minaccia?

Dovresti anche creare un account utente separato per il raschietto piuttosto che dargli le credenziali di un utente umano, questo A aiuta a controllare i registri per comportamento bizzarro causato dal raschiatore, B) protegge la password di quella persona da perdite, specialmente se riutilizzano quella password per altri account, C) ti consente di sospendere facilmente l'account di Scraper se sospetti compromessi.

    
risposta data 05.09.2018 - 17:22
fonte
3

La soluzione rapida e facile (ma sbagliata) è una password principale per crittografare i login e le password. Dovrai digitare questa password ogni volta che esegui lo script. Se non vuoi doverlo digitare ogni volta, puoi vedere questa domanda per altre opzioni.

Il modo corretto per farlo è andare all'amministratore del tuo sito interno e chiedere loro le credenziali di scraping web che ti danno tutti i diritti di accesso appropriati per racimolare ciò di cui hai bisogno. Non si dovrebbe mai avere accesso ai login e alle password degli altri. È pericoloso per l'azienda e una responsabilità per te stesso se succede qualcosa di brutto. Sfortunatamente, questo potrebbe non essere un'opzione in quanto richiede la collaborazione di qualcun altro.

    
risposta data 04.09.2018 - 23:47
fonte
0

My question: How can I make the stored plaintext passwords on the client as low a risk as possible, given that it is impossible to avoid altogether?

Se hai davvero bisogno di salvarlo su disco, potresti spiegare qual è il motivo? Questo potrebbe rendere più facile dare una risposta precisa. Potrei immaginare che lo memorizzi non criptato perché lo hai codificato nella sceneggiatura? E lo script è memorizzato su disco? In questo caso, invece di codificare a fondo la password, potresti leggerla da una variabile ambientale. Questo è più sicuro rispetto all'hard coding direttamente nello script.

    
risposta data 04.09.2018 - 23:34
fonte
0

Suggerisco di utilizzare qualcosa come keepass, memorizzare nome utente e password e bloccarlo con la password principale (oppure semplicemente crittografare la password del nome utente tramite OpenSSL), ora è necessario proteggere la password principale.

Puoi inserire la password principale nel keystore di Windows o nel portachiavi di Linux e associarla all'account di servizio sul sistema che può eseguire lo script automatico e rilasciare la password principale per accedere a nome utente e password.

    
risposta data 05.09.2018 - 02:36
fonte

Leggi altre domande sui tag