Che cosa rende vulnerabile un'applicazione Android a SQL Injection?

2

Definizione di SQL Injection

SQL injection è una tecnica di iniezione di codice, utilizzata per attaccare applicazioni guidate dai dati, in cui istruzioni SQL malevoli sono inserite in un campo di immissione per l'esecuzione (ad esempio per scaricare il contenuto del database sull'attaccante).

In che modo SQL Injection influisce su Android O.S

Le SQLite utilizzate nelle app Android sono database completamente funzionali, quindi, proprio come SQL Server o MySQL, possono essere suscettibili all'iniezione SQL. L'iniezione SQL funziona in genere aggiungendo dati alla stringa di query o aggiungendo dati in un campo modulo; per consentire agli hacker di accedere a un database o accessi non autorizzati. SQL Injection viene solitamente utilizzato per attaccare Web Views o un servizio Web, ma può anche essere utilizzato per attaccare le attività.

La causa principale della vulnerabilità di SQL Injection è dovuta all'uso di query SQL dinamiche o concatenate. Se le query SQL sono costruite concatenando input forniti dall'utente; L'utente può quindi fornire vettori di attacco SQL invece di input validi e manipolare la query SQL back-end.

Il processo di iniezione funziona terminando prematuramente una stringa di testo e aggiungendo un nuovo comando. Poiché il comando inserito può avere ulteriori stringhe aggiunte prima che venga eseguito, la stringa inserita viene terminata con un segno di commento "-". Il testo successivo viene ignorato al momento dell'esecuzione.

La mia domanda

Anche se capisco quale SQL Injection è e come SQL Injection può aver luogo . Non so quali fattori rendono vulnerabile una selezione di codice Android a tale attacco.

    
posta 22.05.2015 - 19:14
fonte

2 risposte

3

Gli attacchi di SQL injection si applicano quando un'applicazione usa SQL e assembla incautamente richieste SQL con elementi forniti da un utente malintenzionato. Qui, "incautamente" significa "senza utilizzare istruzioni preparate ". Le istruzioni preparate sono il modo corretto di fare SQL con dati forniti esternamente; molti sviluppatori tentano di pensarlo in termini di "escape dei caratteri di quotatura", che è un metodo sbagliato e porta a un disastro (anche se alla fine qualcosa sfugge, solo le dichiarazioni preparate garantiscono che sia fatto correttamente).

Android non è un fattore in tutto questo, tranne in modo molto indiretto: Android viene fornito con SQLite , quindi gli sviluppatori sono molto tentati di usarlo e quindi giocare con SQL, anche nei casi in cui non è strettamente necessario. Quando il tuo unico strumento è un martello, è meglio che i problemi siano i chiodi, perché ci sarà un duro colpo. Naturalmente, quando gli sviluppatori hanno il potere di SQL ma non sono abbastanza attenti a usarlo correttamente, allora gli attacchi di SQL injection diventano una possibilità definita.

Un altro effetto è che le applicazioni Android si basano su un linguaggio simile a Java, che è intrinsecamente protetto dagli overflow del buffer (perché tutti gli accessi agli array sono controllati sistematicamente) e dalle situazioni double-free e use-after-free (a causa del GC gestione della memoria basata su). Pertanto, altri tipi di attacchi costituiscono meccanicamente una percentuale maggiore di tutte le vulnerabilità complessive. Avere molte vulnerabilità di SQL injection nelle app Android potrebbe essere, in effetti, il risultato di avere relativamente meno di altri tipi di attacchi.

    
risposta data 22.05.2015 - 19:34
fonte
1

SQLite supporta query preparate e parametri associati, quindi il problema è più legato all'uso dello strumento piuttosto che allo strumento stesso.

Se si utilizzano parametri di interrogazione è impossibile iniettare SQL nel processo perché i dati vengono gestiti separatamente dall'istruzione. Il problema sorge solo se lo sviluppatore ha fatto qualcosa del tipo:

SQLStatement="seleziona * dagli utenti dove password = '" + thePassword + "' e email = '" + theEmailAddr + "';";

Questo perché offre all'utente la possibilità di digitare una password che termina l'istruzione e ne aggiunge un'altra, oppure specificare le condizioni in cui qualsiasi password potrebbe funzionare. Ad esempio, se l'utente digita una password di

' or password!='fred

e un indirizzo email reale, ad esempio [email protected], la query inviata al database è:

select * from users where password='' or password!='fred' and email='[email protected]';

Se si utilizzano i parametri, non è possibile inserire nuovi sql nel testo del comando, poiché i dati vengono trattati separatamente dal comando.

    
risposta data 22.05.2015 - 19:41
fonte

Leggi altre domande sui tag