Check Pointi uurijad DEF CON konverentsil tutvustasid nad uusi rünnakutehnikaid rakendustele, mis kasutavad haavatavaid SQLite versioone. Check Pointi meetod käsitleb andmebaasifailide analüüsi võimalusena integreerida haavatavuste ekspluateerimise skripte erinevates sisemistes SQLite alamsüsteemides, mis ei ole tõrkeotsinguks kergesti kättesaadavad. Uurijad on samuti arendanud välja haavatavuste ekspluateerimise tehnika, kodeerides eksploidid SQLite andmebaasi SELECT-päringute ahelana, mis võimaldab ASLR-i ületamist.
Edukaks rünnakuks on vajalik rünnatavate rakenduste andmebaasifailide modifitseerimise võimalus, mis piirab meetodi kasutamist rakendustele, mis kasutavad SQLite andmebaasina transit andmete ja sisendite formaati. Meetodit saab kasutada ka juba saadud kohalikku ligipääsu laiendamiseks, näiteks varjatud tagauksede integreerimiseks kasutatavatesse rakendustesse, samuti turvamehhanismide vältimiseks, mida uurijad kasutavad pahatahtliku tarkvara analüüsimisel. Ekspluateerimine toimub pärast faili asendamist, kui rakendus sooritab oma esimest SELECT-päringut muudetud andmebaasi tabelisse.
Näidisena on demonstreeritud koodi käivitamise võimalust iOS-is aadressiraamatu avamisel, mille andmefail "AddressBook.sqlitedb" muudeti kasutades pakutud meetodit. Rünnaku aluseks oli haavatavus fts3_tokenizer funktsioonis (CVE-2019-8602, näitajate dereferentseerimise võimalus), mis parandati SQLite 2.28 aprillikuu uuenduses, koos teiste haavatavustega. aknafunktsioonide rakenduses. Samuti on demonstreeritud meetodi kasutamine pahatahtlike isikute poolt PHP taustaserveri kaugjuhtimiseks, kelle tegevus seisnes paroolide kogumises, mis saadi kahjuliku koodi toimimise käigus (kokkuvõtlikud paroolid edastati SQLite andmebaasi kujul).
Rünnaku meetod põhineb kahe tehnika, "Query Hijacking" ja "Query Oriented Programming" kasutamisel, mis võimaldavad ära kasutada juhuslikke probleeme, mis viivad SQLite mootoris mälu kahjustamiseni. "Query Hijacking" olemus seisneb sqlite_master süsteemitableti "sql" väljaväärtuse asendamises, mis määratleb andmebaasi struktuuri. Antud väli sisaldab DDL-i (Data Definition Language) plokki, mida kasutatakse objektide struktuuri määratlemiseks andmebaasis. Kirjeldus antakse tavakasutatava SQL süntaksiga, st kasutatakse konstruktsiooni "CREATE TABLE",
mis täidetakse andmebaasi algatamise protsessi käigus (esimese käivitamise ajal
funktsiooni sqlite3LocateTable) jaoks, et luua tabeliga seotud sisemised struktuurid mälus.
Idee on selles, et asendades „CREATE TABLE“ „CREATE VIEW“ -ga, on võimalik oma esitluse kaudu juhtida igasugust juurdepääsu andmebaasile. „CREATE VIEW“ -ga seondub tabeliga operatsioon „SELECT“, mida kutsutakse välja asemel „CREATE TABLE“ ja mis võimaldab pääseda erinevatele SQLite tõlgendaja osadele. Edasi liikudes oleks kõige lihtsam rünnakuviis funktsiooni „load_extension“ kutsumine, mis võimaldab laadida mis tahes teegi laiendusega, kuid see funktsioon on vaikeolekus keelatud.
Rünnaku teostamiseks olukordades, kus on võimalik teostada operatsiooni „SELECT“, on välja pakutud tehnika „Query Oriented Programming“, mis võimaldab ära kasutada SQLite probleeme, mis viivad mäluprobleemideni. See tehnika meenutab tagasipöördumise suunatud programmeerimist (, tagasipöördumiste suunatud programmeerimine), kuid kasutab kõnede ahela („gadgetide“) loomisel mitteekisteerivaid masinkoodilõike, vaid alamsõnumite sisestusi SELECTi sisemuses.
Allikas: opennet.ru
