Se i dati crittografati in un database sono accessibili dall'applicazione, significa che l'applicazione ha la chiave di decodifica?

7

Sto utilizzando un'applicazione collegata a un database che contiene dati riservati (numeri). Secondo lo sviluppatore, questi dati sono crittografati. Tuttavia, posso facilmente generare un rapporto che mostrerà i numeri in chiaro. In che modo l'applicazione può accedere e ottenere questi dati se sono crittografati? E se i dati sono accessibili dall'applicazione, quali sono i vantaggi della crittografia in primo luogo? L'attacco può essere avviato a partire dall'app Web in quel caso che supererà la crittografia ...

    
posta Optimus Prime 25.07.2013 - 09:00
fonte

2 risposte

6

Questa è una precauzione contro (alcune forme di) SQL injection o chiunque possa accedere al database in altro modo (violazione interna sul server del database). L'applicazione farà qualcosa di simile a questo:

Fetch information from DB ==> use decrypt function on information ==> present to the user

Mentre quando si usa SQL injection, si useranno direttamente le query iniettate per estrarre i dati. Tuttavia, poiché non è possibile chiamare la funzione di decrittografia (poiché fa parte del codice dell'applicazione) utilizzata dall'applicazione, è possibile ottenere solo dati crittografati.

Questo potrebbe non essere vero per tutte le situazioni in cui è possibile utilizzare l'iniezione SQL. Se una funzione è vulnerabile per l'iniezione SQL in cui è presente un codice che scorre attraverso una matrice di risultati e decodifica tali informazioni e si è in grado di modificare i risultati raccolti dalla funzione (ad esempio iniezione a 1=1 istruzione). Otterrai i risultati restituiti, decrittografati.

Si noti che la crittografia del database è solo una parte delle misure di sicurezza per rafforzare le applicazioni guidate dai dati. Puoi anche dare un'occhiata a questo articolo di RSA .

    
risposta data 25.07.2013 - 09:11
fonte
3

La crittografia garantisce la riservatezza . La crittografia non garantisce assolutamente la riservatezza, ma traduce il problema nella chiave : quando i dati sono crittografati, saranno leggibili solo dalle entità che hanno accesso alla chiave di decrittografia. La chiave non deve essere memorizzata nello stesso posto dei dati stessi, e questo è il tipo di separazione di cui stiamo parlando qui. Vale a dire, i dati crittografati sono nel database ma la chiave di decrittografia è nell'applicazione , che può essere una macchina distinta, quindi offre protezione contro gli attaccanti che possono dare un'occhiata sul server del database, ma non sul computer dell'applicazione.

Come sottolinea @Lucas, questo funziona contro alcune forme di SQL injection purché la decrittografia non sia fattibile in SQL . Alcuni database hanno capacità di eseguire la crittografia da soli, quindi gli attacchi di SQL injection possono sfruttare queste capacità. Come caso estremo, considera ciò che Microsoft chiama Transparent Data Encryption in SQL Server: tutti i dati sono crittografato, ma questo viene fatto automaticamente dal server del database stesso; l'applicazione non è nemmeno a conoscenza di esso. Questo offre la protezione zero (nil, void, nada) contro le iniezioni SQL e altri hack a livello di applicazione. TDE è solo contro le persone che leggono il supporto di memorizzazione senza passare attraverso il codice SQL Server.

Un utente malintenzionato che dirotta il computer dell'applicazione sarà in grado di leggere l'intero database e decrittografarlo interamente, quindi la crittografia non può proteggerlo. In effetti, ci sono relativamente pochi scenari plausibili in cui la crittografia del database offre in realtà una protezione extra (al contrario dell'hash della password , che è a senso unico, e che offre molta protezione extra come seconda linea di difesa).

    
risposta data 25.07.2013 - 17:31
fonte

Leggi altre domande sui tag