Uno dei primi “peccati” descritti nel libro 24 deadly sins of software security di M. Howard, D. LeBlanc, J. Viega è l’SQL injection: un tipo di attacco diretto ai database di cui ci occuperemo in questo articolo.
Ma, prima di tutto vediamo cosa significa SQL, ovvero Structure Query Language: come suggerisce il suo nome letto per esteso è un linguaggio utilizzato per interrogare delle strutture ed, in particolare, i database (ovvero i luoghi d’archivio di varie informazioni, i più conosciuti sono Microsoft SQL, MySQL, Oracle Net Listener ed operano rispettivamente sulle porte 1433, 3306 e 159). In altre parole, l’SQL è il linguaggio di programmazione utilizzato per creare, gestire, modificare, rendere navigabili i database ed i loro dati.
La SQL injection, invece, può essere anche un serio difetto (possiamo chiamarlo anche errore di programmazione nel caso questo non sia voluto) che si può trovare all’interno del codice SQL e che rende il sistema del database particolarmente vulnerabile. Questo è uno dei primi 25 errori di programmazione più pericolosi e viene indicato in questo modo: CWE-89: Failure to Preserve SQL Query Structure. Se, per esempio, creiamo un’applicazione in grado di comunicare con un database ed il nostro codice presenta una o più vulnerabilità di questo tipo il suo controllo d’accesso risulta inefficace e tutti i dati del suddetto archivio si trovano a rischio. Va anche sottolineato che tutti i linguaggi di programmazione possono esserne affetti, quindi usare Python piuttosto che C++ o Java o altro ancora non cambierà il possibile problema.
Questo tipo di attacco, inoltre, è uno dei più utilizzati contro i database dei siti internet ed in special modo quelli di grosse organizzazioni. Nel passato, per esempio, hanno subito attacchi di SQL injection il Wall Street Journal e numerose agenzie di Governo.
Una delle varianti più comuni di questo “peccato” è abbastanza semplice da mettere in pratica: un aggressore invia alcuni dati alterati che, in seguito, il database andrà ad utilizzare per costruire una SQL statement usando una concatenazione di stringhe: questo permetterà così al nostro “amico” di cambiare la semantica della query SQL. Infatti, l’utilizzo di concatenazioni di stringhe costituisce un metodo molto semplice per costruire dei database ma non l’unico, né il migliore, in termini di sicurezza.
Ma diamo un’occhiata ad una delle ultime SQL Injection sul panorama di internet: si chiama Dvmap (denominato da Kaspersky Trojan.AndroidOS.Dvmap.a) ed è il primo malware che funziona con SQL injection su Android.
Al contrario di altri trojan che comunque girano su varie applicazioni in GooglePlay, Dvmap inietta un codice che va ad inficiare proprio le librerie relative ai tempi di esecuzione dei programmi (libdmv.so o libandroid_runtime.s) rallentando le funzionalità del nostro smartphone o persino bloccandolo.
Secondo lo studio riportato su SecureList i creatori di Dvmap sono riusciti a superare i controlli di GooglePlay semplicemente caricando un’applicazione “pulita” e senza malware al suo interno alla fine di marzo 2017 poi, per un piccolo periodo di tempo (meno di 24 ore) la alternavano con una versione “sporca” lasciando che gli utenti ignari la scaricassero.
Una volta entrato nel sistema Dvmap cerca di accedere al root del nostro smartphone per installare alcuni moduli. Questo significa che Dvamp inizializza l’esecuzione del codice malevolo nel pacchetto locale del sistema utilizzando quattro diversi blocchi a seconda del tipo di telefonino che sta tentando di invalidare: tre pacchetti compatibili per i sistemi con architettura di 32bit ed uno per i 64bit (più rari).
L’immagine qui sopra (riportata dal sito Securelist) ci mostra il codice utilizzato per la scelta tra i quattro diversi pacchetti: la prima parte infatti relativa all’if suggerisce come cambiare i valori nel caso l’architettura sia a 32 bit mentre l’else if è relativa al 64bit.
Dopodiché il malware procede con la sua SQL injection. Dvmap allora crea un backup della libreria che gli interessa per, poi, riscriverla.
Nel caso di Android 4.4.4 o di una versione precedente andrà a cercare la libreria denominata livdvm.so; mentre nel caso di un Android 5 o più recente la libandroid_runtime.so; entrambe sono comunque librerie relative al runtime a cui avevamo già accennato.
Questo permetterà anche un ulteriore uso dell’applicazione com.qualcmm.timeservices (già in uso nella fase iniziale per accedere al root) la quale abiliterà la possibilità di installare applicazioni terze senza l’autorizzazione dell’utente. Inoltre questa applicazione permette a Dvmap di connettersi ad un server C&C (Command & Control, ovvero un server che può inviare delle istruzioni su come agire al malware).
Come possiamo notare da questo esempio, quindi, la SQL injection non non viene necessariamente usata singolarmente ma a volte è anche accompagnata da altri metodi di attacco. Inoltre, questo tipo di exploit, essendo tutti i linguaggi di programmazione coinvolti, non è unicamente utilizzato per accedere a siti internet e relativi archivi ma, effettivamente, viene messo in atto anche su altri tipi di piattaforme come Android.
Se siamo interessati al SQL injection su siti web e a come proteggere il nostro sito consiglio la lettura dell’articolo in italiano di html.it intitolato Proteggersi dalla SQL injection.
FONTI:
M. Howard, D. LeBlanc, J. Viega, 24 deadly sins of software security, McGraw-Hill, U.S. 2010
D. Bancal, 10 millions de données clients volés à Orange Espagne?, in Zataz Megazine, 05.01.2015
B. Dickson, How to Protect Your Website Against SQL Injection Attacks, in Sitepoint, 16.09.2016
J. Kirk, SQL injection flaw in Wall Street Journal database led to breach, in PcWorld, 23.07.2014
M.J. Schwartz, FBI Blames Federal Hacks On Anonymous Campaign, in DarkReading, 18.11.2013
R. Unuchek, Dvmap: the first Android malware with code injection, in SecureList 8.06.2017
Lascia un commento