(Okay, quindi confesso in anticipo che mentre sto cercando di istruirmi sullo stato attuale delle mie conoscenze sulla sicurezza delle applicazioni web è ancora piuttosto superficiale, quindi apprezzo la tua pazienza se il modo in cui lo chiedo è un po ' goffo.)
Recentemente mi sono imbattuto in notizie infosec quando mi sono imbattuto in this item su un ricercatore / hacker di sicurezza con cappello grigio che è stato arrestato all'inizio di questo mese con l'accusa di irruzione nel sito web delle elezioni della contea corpo in Florida. Da un punto di vista tecnico, sembra che si sia verificato un compromesso quando questo individuo ha utilizzato un attacco di SQL injection contro un database di login e è riuscito a rubare la password in chiaro (!) Di un supervisore alle elezioni della contea. Ha quindi utilizzato tali credenziali per accedere al sistema di gestione dei contenuti del sito Web, e così è stato.
Dopo aver letto qualcosa di strano mi ha colpito. Mi sono reso conto che c'era un punto piuttosto fondamentale sulla natura di questi ultra furti di furti d'iniezione SQL dai database delle password che non avevo davvero capito / non capisco affatto. Detto questo: perché è persino possibile manipolare un database di login per rivelare gli hash delle password (e / o nomi utente, sali o qualsiasi altra informazione relativa all'autenticazione) in primo luogo?
Posso capire perché l'injection SQL può funzionare contro i database in generale; il lavoro comune archetipico di un database consiste nel restituire le informazioni leggibili dall'utente memorizzate in esso in risposta a una query utente. Ma il lavoro di un database di credenziali di accesso è molto diverso. In realtà non richiede l'invio di informazioni di autenticazione memorizzate al di fuori del database , ma invece fornisce solo una risposta al server web che trasmette le credenziali fornite dall'utente sulla loro validità o meno. (Giusto?)
Quindi, perché usiamo persino il software di database a piena potenza e le query SQL per gestire le esigenze piuttosto limitate di username & autenticazione con password? Perché non ci sono applicazioni di database a scopo limitato specificamente mirate a fare solo ciò che un database di password deve fare, contro l'uso di applicazioni generiche che lasciano molto spazio per l'iniezione SQL? Cosa mi manca?