Cercetătorii de la Check Point la conferința DEF CON, detalii despre o nouă tehnică de atac asupra aplicațiilor care folosesc versiuni vulnerabile de SQLite. Metoda Check Point consideră fișierele cu baze de date ca o oportunitate de integrare a scenariilor de exploatare a vulnerabilităților în diverse subsisteme interne SQLite, inaccesibile pentru exploatare directă. Cercetătorii au pregătit, de asemenea, o tehnică de exploatare a vulnerabilităților cu codificarea exploatului sub formă de șiruri de interogări SELECT în baza de date SQLite, permițând ocolirea ASLR.
Pentru un atac de succes este necesară abilitatea de a modifica fișierele bazei de date ale aplicațiilor atacate, ceea ce limitează metoda la atacuri asupra aplicațiilor care utilizează SQLite ca format pentru datele de tranzit și de intrare. Metoda poate fi, de asemenea, utilizată pentru a extinde accesul local deja obținut, de exemplu, pentru a integra backdoor-uri ascunse în aplicațiile utilizate, dar și pentru a ocoli mecanismele de protecție în timpul analizei malware-ului. Exploatarea după înlocuirea fișierului are loc în momentul în care aplicația execută prima interogare SELECT către tabelul din baza de date modificată.
Ca exemplu, a fost demonstrată posibilitatea executării codului pe iOS atunci când se deschide agenda de contacte, fișierul bazei de date „AddressBook.sqlitedb” fiind modificat utilizând metoda propusă. Pentru atac a fost folosită o vulnerabilitate în funcția fts3_tokenizer (CVE-2019-8602, posibilitatea dereferinței unui pointer), corectată în actualizarea din aprilie a SQLite 2.28, împreună cu o altă în implementarea funcțiilor fereastră. În plus, a fost demonstrată aplicarea metodei pentru capturarea de la distanță a controlului asupra serverului backend scris în PHP de către atacatorii care strâng parolele interceptate în timpul funcționării codului malițios (parolele interceptate erau transmise sub formă de bază de date SQLite).
Metoda de atac se bazează pe utilizarea a două tehnici, „Query Hijacking” și „Query Oriented Programming”, care permit exploatarea unor probleme ale memoriei în motorul SQLite. Esența „Query Hijacking” constă în înlocuirea conținutului câmpului „sql” din tabela de sistem sqlite_master, care definește structura bazei de date. Câmpul menționat conține un bloc DDL (Data Definition Language), utilizat pentru a descrie structura obiectelor din baza de date. Descrierea se face folosind sintaxa SQL standard, adică se folosește construcția „CREATE TABLE”,
care este executată în timpul inițializării bazei de date (în timpul primei rulări
a funcției sqlite3LocateTable) pentru a crea structuri interne asociate cu tabela în memorie.
Ideea este că, prin înlocuirea „CREATE TABLE” cu „CREATE VIEW”, apare posibilitatea de a controla orice acces la baza de date prin definiția propriei vederi. Folosind „CREATE VIEW”, operația de „SELECT” este legată de tabel, care va fi apelată în loc de „CREATE TABLE” și permite accesul la diferite părți ale interpretului SQLite. Apoi, cea mai simplă metodă de atac ar fi apelarea funcției „load_extension”, care permite încărcarea unei biblioteci externe, dar această funcție este dezactivată implicit.
Pentru a efectua atacul în condițiile în care se poate executa operația „SELECT”, a fost propusă tehnica „Query Oriented Programming”, care oferă posibilitatea de a exploata probleme în SQLite ce duc la deteriorarea memoriei. Tehnica este similară programării bazate pe returnare (, Return-Oriented Programming), dar folosește pentru construirea lanțului de apeluri („gadgeturi”) fragmente de cod mașină inexistente, ci inserții în setul de sub-interogări din cadrul SELECT.
Sursa: opennet.ro
