Domanda:
La protezione con password di un database che risiede accanto all'applicazione aggiunge sicurezza?
Cedric Reichenbach
2018-05-16 16:28:47 UTC
view on stackexchange narkive permalink

Ho visto configurazioni in cui un database protetto da password risiedeva sullo stesso server di un'applicazione che deteneva le credenziali di tale database in testo normale.

Quali sono i vantaggi di tale configurazione rispetto a un semplice database non protetto?

A parte qualche offuscamento, dover configurare entrambi, database e applicazione, a quelle credenziali sembra solo aggiungere complessità, ma non vera sicurezza. Un utente malintenzionato con accesso al server potrebbe sempre trovare le credenziali nel file di configurazione dell'applicazione.

Modifica: sto parlando di un database visibile solo all'interno della stessa macchina e non esposto all'esterno.

Oggi decidi di non dover proteggere con password il database perché il database consente connessioni solo da localhost.Due anni dopo decidi che sarebbe stato conveniente se il tuo server avesse un proxy http.
Otto risposte:
Stef Heylen
2018-05-16 16:37:24 UTC
view on stackexchange narkive permalink

Ha senso proteggere il database con una password se si protegge l'accesso al file di configurazione dell'applicazione che contiene le credenziali di testo in chiaro. Quando si limita l'accesso in lettura solo all'account dell'applicazione, l'attaccante richiede l'accesso come root per vedere la password. Nel caso in cui abbia violato qualsiasi altro account (meno privilegiato), non sarà in grado di accedere al database.

Penso di vedere: se il DB è esposto tramite una porta su localhost, non può essere limitato semplicemente a utenti specifici, ma un file di configurazione dell'applicazione sì.
"Se il DB è esposto tramite una porta su localhost, non può essere semplicemente limitato a utenti specifici" iptables può farlo con il flag `uid-owner`.
@CedricReichenbach Qualcos'altro che potresti prendere in considerazione è l'utilizzo di un socket UNIX invece di una porta TCP, se il tuo database e l'app lo supportano.
L'aggressore non si limita al requisito di ottenere il root per ottenere la password per l'attaccante potrebbe compromettere l'applicazione.
Serge Ballesta
2018-05-16 17:20:31 UTC
view on stackexchange narkive permalink

Questa è una specie di protezione onion (nota anche come " Sicurezza a più livelli " o " Difesa in profondità " come visto, ad esempio , nel white paper " Layered Security: Why It Works" di SANS). Se un utente malintenzionato riesce a raggiungere le macchine, non può ottenere l'accesso completo al database. L'applicazione dovrebbe avere un accesso limitato limitato alle sole tabelle richieste e tutto ciò che non deve essere scritto dovrebbe essere di sola lettura. Qualsiasi accesso più elevato dovrebbe richiedere una password diversa mai utilizzata nell'applicazione.

@RenatoGuimaresMogekag: IMHO la tua modifica proposta aggiunge troppo alla mia risposta e si concentra sui database NoSQL che non è il mio intento.Preferiresti scriverlo nella tua risposta, dicendo che è un complemento alla mia.
Mike Scott
2018-05-16 16:30:32 UTC
view on stackexchange narkive permalink

Il vantaggio è che un utente malintenzionato che ha accesso di rete al database ma non l'accesso al file system al server non sarà in grado di accedere effettivamente al database.

Spiacenti, non è stato specificato che: Sto parlando di database visibili solo all'interno della stessa macchina.
@CedricReichenbach Come fai a sapere che non è possibile accedere al database tramite la rete?Potresti non _intendere_ che sia accessibile tramite la rete, ma se tutto andasse come previsto, nessun aggressore potrebbe avere accesso di alcun tipo e la tua domanda non avrebbe importanza.
Sì, ha senso.Ma anche all'interno della macchina, può fare la differenza, come sottolineato nella [risposta di Stef Heylen] (https://security.stackexchange.com/a/185891/125571).
I presupposti @CedricReichenbach sono pericolosi nella sicurezza IT.L'intero punto di difesa in profondità è che non * ti aspetti * che il primo livello fallisca, ma implementi comunque livelli aggiuntivi.Nel tuo scenario il primo livello è che il database non è esposto alla rete.Il secondo livello è che è protetto da password nel caso in cui in qualche modo venga esposto.
sleske
2018-05-17 15:24:54 UTC
view on stackexchange narkive permalink

Se questo fornisce una sicurezza aggiuntiva dipenderà dal tuo scenario di minaccia e dai tuoi obiettivi di sicurezza. Conosco almeno due situazioni in cui aggiunge sicurezza:

  • Ti consente di controllare più accuratamente l'accesso legittimo al database: potrebbero esserci persone che hanno legittimamente bisogno l'accesso al database, ma non ai dati all'interno, come gli amministratori di DB che eseguono la manutenzione. Un database crittografato può (a seconda della configurazione) consentire la concessione dell'accesso al database pur mantenendo segreti i dati.
    In modo simile, la crittografia di una parte del database (ad es. Solo colonne con password) consente un accesso limitato (ad esempio per problemi di debug, per la segnalazione o per un data warehouse ) proteggendo le informazioni critiche.
  • Può proteggere i backup del database. Se viene eseguito il backup del database a livello di file o con uno strumento di backup che supporta database crittografati, il backup verrà crittografato. Ciò è utile perché i backup possono essere una fonte di violazioni dei dati, poiché spesso non sono protetti così come i server da cui sono stati prelevati (vedere ad esempio La scarsa sicurezza del backup porta alla perdita di dati del client Ameriprise).
questa è la differenza tra la protezione contro lo snooping incompetente e lo snooping competente.non possono semplicemente eseguire "stringhe" sui file del database, ma non impediranno a qualcuno che acquisisce il database e fa una minima quantità di sviluppo per leggerlo tutto in seguito.
@Rob: Se il DB è correttamente crittografato, la lettura sarà impossibile senza la password.Ovviamente questo dipende dalla configurazione della crittografia che utilizzi.
dal post originale: "sullo stesso server di un'applicazione che detiene le credenziali di detto database in testo normale".questo purtroppo è uno scenario molto comune.non direi "nessuna protezione", ma non ti protegge da nessuno di cui ti preoccupi.è comune perché le persone vogliono essere in grado di eseguire un riavvio automatico.
jrtapsell
2018-05-17 01:37:53 UTC
view on stackexchange narkive permalink

Vantaggi della protezione tramite password del DB

  • Se non è possibile utilizzarlo in modo insicuro, si riduce il rischio che se DB e server devono essere divisi in una fase successiva, essi verrà lasciato in modo insicuro, portando a futuri exploit.

  • Se un utente malintenzionato può violare la macchina con un account limitato, potrebbe essere in grado di connettersi ai servizi locali, ma non reimpostare la password del database; richiedere all'autore dell'attacco di autenticarsi limita il danno che può fare.

  • Se un attacco può essere utilizzato per riflettere / ritrasmettere il traffico, allora un avversario remoto può sembrare essere sulla macchina locale ( un esempio potrebbe essere un proxy che può essere convinto a caricare un'API DB o un servizio che mostra i dati ricevuti quando una connessione non riesce a un determinato URL)

  • Se vengono utilizzate le password quindi è possibile impedire a diversi sistemi e utenti di utilizzare gli account degli altri, altrimenti un utente malintenzionato di qualsiasi sistema può fingere di essere qualsiasi altro sistema.

koyae
2018-05-17 03:42:37 UTC
view on stackexchange narkive permalink

Se non hai grandi problemi di ridimensionamento in futuro, potrebbe non aggiungere alcuna sicurezza avere una password , anche se tieni presente che "no avere una password " non è la stessa cosa " fidarsi di chiunque affermi di essere la tua applicazione ".

Se la tua applicazione viene eseguita come un proprio utente sul server *, alcuni database possono consentire di utilizzare l'autenticazione di terze parti (ad esempio, ciò che Postgres chiama autenticazione peer ) che consente al server di utilizzare meccanismi di rete o del sistema operativo per determinare quali utenti sono chi dicono di essere. Ad esempio, sotto la configurazione corretta, l'utente della shell "bob" potrebbe accedere all'account del database "bob" senza fornire una password. Fare in modo che le cose siano semplici può rendere più facile la protezione del database e dell'applicazione.

Detto questo, come suggerisce jrtapsell answer, potresti dover spostare il tuo applicazione a un altro server per motivi di costi o prestazioni. In tal caso, probabilmente avrai bisogno di una password memorizzata o di un altro segreto come una chiave privata, sebbene ci siano alcuni metodi principalmente all'interno di reti private che potrebbero essere utilizzati per evitarlo.

Se pensi che ci siano buone probabilità di aver bisogno di una password (o di un altro segreto memorizzato) in futuro, allora dovresti solo prendere accordi ora in modo che non siano resi insicuri in seguito da qualcuno con meno tempo o esperienza.

* Idealmente, quell'account dovrebbe essere protetto da password o disponibile solo per accedere tramite sudo o meccanismo equivalente

Ian Kemp
2018-05-17 12:43:44 UTC
view on stackexchange narkive permalink

Conosci tutte quelle violazioni dei dati avvenute di recente? Quelli in cui le persone hanno trovato backup di database non protetti da password in bucket Amazon S3 non protetti? Sì.

Mai presumere che il tuo database vivrà solo sul tuo server protetto dietro venti miliardi di firewall. Il piccolo fastidio di una password sul tuo DB è un piccolo prezzo da pagare per la sicurezza essenzialmente gratuita che fornisce.

Renato Guimares Mogekag
2018-05-24 11:31:53 UTC
view on stackexchange narkive permalink

Come complemento alla risposta di Serge Ballesta.

Questo diventa particolarmente complicato se stai usando un database NoSQL, ad es. MongoDB, poiché per impostazione predefinita qualsiasi utente di database avrà i privilegi di sola lettura per tutti i database e non viene nemmeno configurato per avere un utente di database pronto all'uso . Ci sono alcuni punti deboli come affermato da Spider Labs Blog qualche tempo fa (intorno al 2013), ma le raccomandazioni di solito non vengono seguite nemmeno per le grandi aziende, ad es. MacKeeper incidente (fine 2015).

In entrambi i riferimenti, troverai un elenco delle vulnerabilità più comuni. Se preferisci leggere le linee guida "ufficiali", puoi trovarle qui, saranno analoghe per i database SQL. Tuttavia, mi piace pensare che non ci siano sovraccarichi quando l'argomento è la sicurezza.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...