Descriptions:
•
Per l'autenticazione in ingresso: anziché codificare staticamente un nome utente e una password predefiniti, una chiave o altre credenziali di autenticazione per i primi accessi, utilizzare una modalità "primo accesso" che richieda all'utente di inserire una password o una chiave univoca e robusta.
•
Per l'autenticazione in uscita: memorizza password, chiavi e altre credenziali al di fuori del codice in un file di configurazione o in un database fortemente protetto e crittografato, che sia schermato dall'accesso di tutti gli esterni, inclusi altri utenti locali sullo stesso sistema. Proteggi adeguatamente la chiave (CWE-320). Se non puoi utilizzare la crittografia per proteggere il file, assicurati che i permessi siano il più restrittivi possibile [REF-7].
Negli ambienti Windows, il File System Crittografato (EFS) può offrire una certa protezione.
•
Se il prodotto deve contenere credenziali hard-coded o non possono essere rimosse, eseguire controlli di accesso e limitare le entità che possono accedere alla funzionalità che richiede le credenziali hard-coded. Ad esempio, una funzionalità potrebbe essere abilitata solo tramite la console di sistema anziché tramite una connessione di rete.
•
Per l'autenticazione in ingresso tramite password: applicare hash unidirezionali forti alle password e memorizzare tali hash in un file di configurazione o in un database con controlli di accesso appropriati. In questo modo, il furto del file/database richiede comunque all'attaccante di tentare di decifrare la password. Durante la gestione di una password in ingresso durante l'autenticazione, calcolare l'hash della password e confrontarlo con l'hash salvato.
Utilizzare sali assegnati casualmente per ogni hash generato. Ciò aumenta la quantità di calcolo che un attaccante deve eseguire in un attacco brute-force, limitando eventualmente l'efficacia del metodo della rainbow table.
•
Per le connessioni front-end a back-end: sono possibili tre soluzioni, anche se nessuna è completa.
- La prima proposta prevede l'uso di password o chiavi generate che vengono cambiate automaticamente e devono essere inserite, a intervalli di tempo stabiliti, da un amministratore di sistema. Queste password saranno mantenute in memoria e saranno valide solo per gli intervalli di tempo specificati.
- Successivamente, le password o chiavi dovrebbero essere limitate dal back end a eseguire solo azioni valide per il front end, evitando così un accesso completo.
- Infine, i messaggi inviati dovrebbero essere contrassegnati e verificati tramite checksum con valori sensibili al tempo, al fine di prevenire attacchi di tipo replay.