Ricercatori di Check Point
Per un attacco riuscito è necessario poter modificare i file del database delle applicazioni attaccate, il che limita il metodo agli attacchi contro applicazioni che utilizzano il database SQLite come formato per il transito e l'immissione dei dati. Il metodo può essere utilizzato anche per espandere l'accesso locale esistente, ad esempio per integrare backdoor nascoste nelle applicazioni utilizzate, nonché per aggirare i meccanismi di sicurezza durante l'analisi del malware da parte dei ricercatori di sicurezza. L'operazione dopo la sostituzione del file viene eseguita nel momento in cui l'applicazione esegue la prima query SELECT su una tabella nel database modificato.
Ad esempio, abbiamo dimostrato la possibilità di eseguire codice in iOS all'apertura di una rubrica, il file con il database "AddressBook.sqlitedb" è stato modificato utilizzando il metodo proposto. L'attacco ha utilizzato una vulnerabilità nella funzione fts3_tokenizer (CVE-2019-8602, capacità di dereferenziazione del puntatore), risolta nell'aggiornamento SQLite 2.28 di aprile, insieme a un'altra vulnerabilità
Il metodo di attacco si basa sull'utilizzo di due tecniche “Query Hijacking” e “Query Oriented Programming”, che consentono di sfruttare problemi arbitrari che portano alla corruzione della memoria nel motore SQLite. L'essenza del "Query Hijacking" è sostituire il contenuto del campo "sql" nella tabella di servizio sqlite_master, che determina la struttura del database. Il campo specificato contiene un blocco DDL (Data Definition Language) utilizzato per descrivere la struttura degli oggetti nel database. La descrizione viene specificata utilizzando la sintassi SQL standard, ad es. viene utilizzata la costruzione “CREATE TABLE”,
che viene eseguito durante il processo di inizializzazione del database (durante il primo avvio
funzioni sqlite3LocateTable per creare strutture interne relative alle tabelle in memoria.
L'idea è che, sostituendo “CREATE TABLE” con “CREATE VIEW”, diventa possibile controllare qualsiasi accesso al database definendo la propria vista. Utilizzando "CREATE VIEW" viene associata alla tabella un'operazione "SELECT", che verrà chiamata al posto di "CREATE TABLE" e permette di accedere a diverse parti dell'interprete SQLite. Successivamente, il metodo di attacco più semplice sarebbe chiamare la funzione “load_extension”, che consente di caricare una libreria arbitraria con un'estensione, ma questa funzione è disabilitata per impostazione predefinita.
Per effettuare un attacco quando è possibile eseguire l'operazione “SELECT”, viene proposta la tecnica della “Query Oriented Programming”, che consente di sfruttare problemi di SQLite che portano alla corruzione della memoria. La tecnica ricorda la programmazione orientata al rendimento (
Fonte: opennet.ru