Cercetători de la Check Point
Pentru un atac de succes, este necesar să se poată modifica fișierele bazei de date ale aplicațiilor atacate, ceea ce limitează metoda la atacuri asupra aplicațiilor care folosesc baza de date SQLite ca format pentru tranzit și date de intrare. Metoda poate fi folosită și pentru a extinde accesul local existent, de exemplu, pentru a integra ușile ascunse în aplicațiile utilizate, precum și pentru a ocoli mecanismele de securitate atunci când analizează programele malware de către cercetătorii în domeniul securității. Operația după înlocuirea fișierului este efectuată în momentul în care aplicația execută prima interogare SELECT pe un tabel din baza de date modificată.
Ca exemplu, am demonstrat capacitatea de a rula cod în iOS la deschiderea unei agende de adrese, fișierul cu baza de date „AddressBook.sqlitedb” a fost modificat folosind metoda propusă. Atacul a folosit o vulnerabilitate în funcția fts3_tokenizer (CVE-2019-8602, capacitatea de dereferire a indicatorului), remediată în actualizarea SQLite 2.28 din aprilie, împreună cu o altă
Metoda de atac se bazează pe utilizarea a două tehnici „Query Hijacking” și „Query Oriented Programming”, care permit exploatarea unor probleme arbitrare care duc la coruperea memoriei în motorul SQLite. Esența „Query Hijacking” este înlocuirea conținutului câmpului „sql” din tabelul de servicii sqlite_master, care determină structura bazei de date. Câmpul specificat conține un bloc DDL (Data Definition Language) folosit pentru a descrie structura obiectelor din baza de date. Descrierea este specificată folosind sintaxa SQL standard, adică se folosește construcția „CREATE TABLE”,
care se execută în timpul procesului de inițializare a bazei de date (în timpul primei lansări
sqlite3LocateTable funcționează pentru a crea structuri interne legate de tabel în memorie.
Ideea este că, ca urmare a înlocuirii „CREATE TABLE” cu „CREATE VIEW”, devine posibil să controlezi orice acces la baza de date prin definirea propriei vizualizări. Folosind „CREATE VIEW” o operație „SELECT” este legată de tabel, care va fi apelată în loc de „CREATE TABLE” și vă permite să accesați diferite părți ale interpretului SQLite. În continuare, cea mai simplă metodă de atac ar fi apelarea funcției „load_extension”, care vă permite să încărcați o bibliotecă arbitrară cu o extensie, dar această funcție este dezactivată implicit.
Pentru a efectua un atac atunci când este posibilă efectuarea operației „SELECT”, este propusă tehnica „Query Oriented Programming”, care face posibilă exploatarea problemelor din SQLite care duc la coruperea memoriei. Tehnica amintește de programarea orientată spre întoarcere (
Sursa: opennet.ru