Attualmente sto formulando best practice e requisiti di sicurezza per lo sviluppo continuo del software Java nel mio dipartimento e mi sono accontentato di raccomandare l'utilizzo del framework Jasypt per la crittografia / decrittografia delle credenziali dell'account di servizio memorizzate nei file delle proprietà dell'applicazione sul sistema. Il requisito genitore generale del nostro team di Cyber Security è che i dati riservati a riposo devono essere protetti tramite crittografia, tuttavia non ci sono specifiche fornite sulla corretta gestione delle chiavi.
Lo schema appropriato fornito da Jasypt consiste nell'utilizzare un algoritmo PBE che accetta una passphrase segreta come input e la utilizza per decrittografare le informazioni protette nei file delle proprietà dell'applicazione. È possibile fornire la passphrase segreta in diversi modi e il modo universale più appropriato che sembra bilanciare praticità, supportabilità e sicurezza è ottenere questo segreto attraverso una variabile di ambiente utente runtime.
L'impostazione di una variabile di ambiente globale non è chiaramente sicura e il nostro amministratore di sistema afferma che non possiamo impostarlo a livello di utente perché afferma che verrebbe caricato solo come parte del profilo di bash e ciò significherebbe che l'applicazione richiede di essere lanciato da una shell, il che impedisce che venga eseguito come un processo demone.
Stavo pensando di poter eseguire l'applicazione da uno script di shell bash in cui la variabile di ambiente necessaria è impostata nell'ambito dello script prima dell'esecuzione del comando dell'applicazione Java. Potrei quindi leggere proteggere il file di script della shell solo dall'utente runtime del processo demone.
Il sistema operativo in questione è RHEL 6.5 in esecuzione su server virtualizzati all'interno della nostra intranet privata.
La mia domanda è: ci sono degli exploit notevoli qui dove un utente malintenzionato potrebbe derivare in qualche modo il valore della variabile di ambiente? Ad esempio, eseguendo la cronologia di bash, sfruttando i processi in esecuzione, sbirciando la memoria condivisa, ecc.
In generale ci sono grossi difetti evidenti con questo approccio?