Istraživači iz kompanije Check Point na konferenciji DEF CON predstavili su detalje nove tehnike napada na aplikacije koje koriste ranjive verzije SQLite. Metod Check Point razmatra datoteke s bazama podataka kao mogućnost za integraciju skripti za eksploataciju ranjivosti u različitim unutrašnjim podsistemima SQLite, koje je teško iskoristiti direktno. Istraživači su takođe pripremili tehniku eksploatacije ranjivosti kodiranjem eksploita u obliku lanca SELECT upita u SQLite bazi podataka, što omogućava zaobilaženje ASLR-a.
Za uspešan napad neophodno je imati mogućnost modifikacije datoteka baze podataka napadnutih aplikacija, što ograničava metodu napadima na aplikacije koje koriste SQLite kao format za tranzitne i ulazne podatke. Metod se takođe može primeniti za proširenje već dobijenog lokalnog pristupa, na primer, za integraciju skrivenih bekdora u korišćene aplikacije, kao i za zaobilaženje mehanizama zaštite prilikom analize malicioznog softvera od strane istraživača. Eksploatacija nakon zamene datoteke odvija se u trenutku kada aplikacija prvi put izvrši SELECT upit prema tabeli u modifikovanoj bazi podataka.
Kao primer demonstrirana je mogućnost pokretanja koda u iOS-u pri otvaranju imenika, čija je datoteka baze podataka "AddressBook.sqlitedb" modifikovana korišćenjem predloženog metoda. Za napad je korišćena ranjivost u funkciji fts3_tokenizer (CVE-2019-8602, mogućnost dereferenciranja pokazivača), koja je ispravljena u aprilskoj ažuriranju SQLite 2.28, zajedno s drugom u implementaciji prozor funkcija. Pored toga, demonstrirana je primena metode za daljinsko preuzimanje kontrole nad PHP backend serverom malicioznih aktera, koji prikupljaju lozinke, uhvaćene tokom rada malicioznog koda (uhvaćene lozinke su se prenosile u obliku SQLite baze podataka).
Metoda napada bazira se na korištenju dviju tehnika „Query Hijacking“ i „Query Oriented Programming“, koje omogućuju eksploataciju proizvoljnih problema koji dovode do oštećenja memorije u SQLite engineu. Bit „Query Hijacking“ leži u zamjeni sadržaja polja „sql“ u sustavnoj tablici sqlite_master, koja definira strukturu baze podataka. To polje sadrži DDL blok (Data Definition Language), koji se koristi za opisivanje strukture objekata u bazi podataka. Opis se definira korištenjem standardne SQL sintakse, tj. koristi se konstrukcija „CREATE TABLE“
koja se izvršava tijekom inicijalizacije baze podataka (prilikom prvog pokretanja
funkcije sqlite3LocateTable) za stvaranje povezanih unutarnjih struktura u memoriji.
Ideja je da, zamjenom „CREATE TABLE“ s „CREATE VIEW“, dobijemo mogućnost kontrolirati bilo koji pristup bazi podataka kroz definiranje svog prikaza. Pomoću „CREATE VIEW“ povezuje se operacija „SELECT“ koja će se pozvati umjesto „CREATE TABLE“ i omogućuje pristup raznim dijelovima SQLite interpreter-a. Nadalje, najjednostavniji način napada bio bi poziv funkcije „load_extension“ koja omogućava učitavanje proizvoljne biblioteke s proširenjem, ali je ta funkcija prema zadanim postavkama isključena.
Za izvršenje napada u uvjetima mogućnosti izvršavanja operacije „SELECT“ predložena je tehnika „Query Oriented Programming“, koja omogućava eksploataciju problema u SQLite koji dovode do oštećenja memorije. Tehnika nalikuje upravljanju povratnim orijentiranim programiranjem (, Return-Oriented Programming), ali koristi umetke unutar skupa podupita unutar SELECT-a za izgradnju lanca poziva („gadgets“) umjesto nepostojećih isječaka strojno kodiranih podataka.
Izvor: opennet.ru
