Sono autorizzato in questo caso particolare a memorizzare la password nel programma java?

5

Ho un programma Java-Server in esecuzione su Ubuntu-Server che riceve ogni 5 minuti i dati sulla posizione corrente del mio smartphone Android (che porto con me). La mia architettura è la seguente: Il mio smartphone si connette al server usando tlsv1.2 e trasmette la posizione GPS. Dopo aver ricevuto i dati, il programma server stabilisce una connessione a un mysql-database locale inserendo la posizione, l'ora e così via.

Ho letto questa risposta da William Brandl e io abbiamo pensato, sì, ma questo non ha aumentato il mio livello di sicurezza.

Sono l'unico ad avere accesso fisico alla mia macchina. Quindi il mio programma java può essere disattivato solo se il mio server viene compromesso. Memorizzare il nome utente e la password in un file separato non ha assolutamente senso per me in questa particolare situazione. Il programma è in esecuzione con un utente con privilegi bassi. Quindi, se il mio utente o il mio server venissero compromessi, qualcuno potrebbe facilmente decodificare il mio programma arrivando al miele (nome utente e password) semplicemente aprendo il file contenente il nome utente e le password che è leggibile dallo stesso utente.

In questo caso particolare memorizza nome utente e password in un file separato solo più carico di lavoro? C'è un modo più sicuro riguardo a questo caso di memorizzare i dati sensibili?

Resta con me se questo è il posto sbagliato da chiedere.

    
posta Mike 12.07.2015 - 00:28
fonte

3 risposte

4

Vorrei memorizzare la password solo in memoria in fase di esecuzione, ma questo ha uno svantaggio. È necessario digitare la password ogni volta che si avvia / riavvia il server. Questo è il modo più sicuro per gestire le password in chiaro.

Inoltre avrei seguito il consiglio di r00t, creare due utenti sul server MySQL, uno con permesso di lettura e uno con permesso di scrittura. Nel caso in cui qualcuno fosse in grado di accedere al tuo server e scaricare la memoria.

    
risposta data 12.07.2015 - 03:00
fonte
1

Ti consiglierei di creare due utenti mysql e di avere quello con solo accesso in scrittura memorizzato nel programma java.

Per te, usa il secondo con accesso in lettura.

Se il server viene compromesso, l'utente malintenzionato non sarà in grado di leggere le tue posizioni, basta inserire quelle false.

- Modifica--

Per rispondere se riesci a inserire le tue credenziali nel codice:

Non migliora o peggiora la sicurezza delle credenziali, ma diventa più difficile modificarlo. In effetti, dovrai ricompilare il tuo codice java.

La buona pratica dice che le credenziali dovrebbero essere in un file per questo motivo. In caso di divulgazione della password, il tempo di risposta sarà più alto.

    
risposta data 12.07.2015 - 00:45
fonte
1

Per iniziare: sono d'accordo con te sul fatto che il pezzo di William Brandl penda più sulla convenienza che sulla sicurezza. Potrei persino dire che ha torto quando dice che archiviare le credenziali in un file è l'unica strada da percorrere. Almeno quando lascia fuori qualsiasi parte riguardante la crittografia. Il link che fornisce al articolo CWE-259 dice anche specificamente che:

Username and password information should not be included in a configuration file or a properties file in plaintext as this will allow anyone who can read the file access to the resource. If possible, encrypt this information and avoid CWE-260 and CWE-13.

Il fatto è che, indipendentemente da cosa hai deciso di fare, un utente malintenzionato con accesso ai tuoi file sarà in grado di rubare le tue credenziali.

Dato che stai usando il server con un utente con privilegi bassi, con accesso limitato e una password sicura, sei generalmente abbastanza sicuro. Finché blocchi tutti gli utenti, dai ai tuoi utenti del database solo i privilegi minimi richiesti, ecc. Probabilmente non avrai problemi.

File separato

Potresti considerare di archiviare le credenziali in un file separato, solo per tua comodità. Questo perché è possibile scambiare facilmente nuove credenziali se si decide di modificare il database. In questo modo, non è necessario ricompilare la fonte.

Potresti anche crittografare le credenziali memorizzate in quel file separato. Ciò richiede tuttavia che il codice decodifichi la chiave, il che significa che la chiave di decrittografia si trova nei file Java compilati. Questa è davvero solo sicurezza attraverso l'oscurità (ad esempio un falso senso di sicurezza), e onestamente non aggiunge molto. Tuttavia, aumenterà leggermente la difficoltà, anziché solo un nome utente e una password in testo semplice.

Start-up

L'unica cosa che posso suggerire per renderlo più sicuro, evitando l'hardcoding e l'archiviazione delle credenziali in un file separato, è quello di fornire le credenziali all'avvio. Ciò sarà più ingombrante dal punto di vista tecnico (ad esempio, dovrai riavviare manualmente il server ogni volta che si interrompe), ma almeno rimuoverà tutti i problemi relativi a dove archiviare le credenziali.

Tuttavia, le credenziali saranno memorizzate. Quindi, se un utente malintenzionato vuole davvero ottenere le credenziali, un dump della memoria potrebbe essere tutto ciò che serve, indipendentemente da dove si memorizzano le credenziali.

Sommario

Dico, per tua comodità, di memorizzare le credenziali in un file, ma non preoccuparti se hai voglia di conservare le credenziali nel codice sorgente. (Fai attenzione ai programmatori che stanno rivedendo il tuo codice, perché è una cattiva pratica ;-)). Anche in questo caso, assicurati di monitorare il tuo server, assicurati di applicare un tipo di politica dei privilegi minimi agli utenti e ai servizi e assicurati che tutte le credenziali siano uniche e forti.

Nota:

Per i futuri lettori; Questo non vuol dire che non dovresti preoccuparti di come gestisci le credenziali. Molti framework e linguaggi offrono modi per crittografare e proteggere le tue credenziali e il seguire le migliori pratiche è sempre incoraggiato. Ma il fatto è che se qualcuno ha accesso ai tuoi file, di solito sei sfortunato. Quindi proteggi i tuoi file!

    
risposta data 12.07.2015 - 02:05
fonte

Leggi altre domande sui tag