Supponiamo che sto creando un servizio per archiviare tutte le informazioni protette o sensibili utilizzate dalle altre mie applicazioni. Pensa alle password o alle chiavi SSH private. Sotto il vecchio paradigma di programmazione di "fare una cosa davvero, molto bene", voglio rendere questo servizio il più ironico possibile. Sto prendendo le seguenti precauzioni:
- Tutti i dati sono crittografati nel database (duh)
- I dati memorizzati vengono assegnati in modo casuale a uno di più database (anche se un database è stato compromesso, non tutti i dati sono su quello)
- L'accesso ai dati è controllato da specifiche autorizzazioni token - il token A non ha l'autorizzazione per accedere ai dati del token B e viceversa, e il token C è l'unico con permesso di scrivere dati, A e B possono solo leggerlo (per esempio)
- Il servizio effettivo viene eseguito su AWS, quindi abbiamo le precauzioni di sicurezza "fisiche"
- L'accesso SSH alla produzione è permanentemente disabilitato - quando una nuova distribuzione deve essere attivata, uno script viene eseguito su AWS che fa girare un nuovo server. Il server ha uno script di avvio che estrae la build più recente da Bitbucket ed esegue i passaggi di configurazione necessari
- C'è un cruscotto effettivo per gestire i token, ecc. - questa dashboard è protetta dall'autenticazione a due fattori (ottengo un codice sul mio telefono che devo inserire quando voglio accedere, oltre al nome utente / password)
Questo mi sembra un ambiente abbastanza sicuro, ma posso identificare un paio di vulnerabilità:
- Il mio account AWS: se il mio account AWS è stato compromesso, un utente malintenzionato potrebbe facilmente modificare lo script di avvio del server per fare qualcosa di dannoso o aprire l'accesso SSH al server di produzione.
- Il mio account Bitbucket: allo stesso modo, se il mio account Bitbucket fosse stato compromesso, un utente malintenzionato potrebbe includere codice dannoso nella mia build del progetto, che verrebbe quindi richiamato dal server al prossimo deployment.
Queste sono le ovvie vulnerabilità - nondimeno, non sono sicuro di come proteggere quella via di attacco. Sono anche preoccupato di non sapere cosa non so - ci sono dei vettori di attacco che non ho considerato, o difetti nella mia configurazione pianificata?