Check Pointi teadlased
Edukaks rünnakuks on vaja muuta rünnatud rakenduste andmebaasifaile, mis piirab meetodi rünnakutega rakendustele, mis kasutavad SQLite andmebaasi transiidi- ja sisendandmete vorminguna. Meetodit saab kasutada ka olemasoleva lokaalse juurdepääsu laiendamiseks, näiteks integreerida kasutatud rakendustesse peidetud tagauksi, samuti turvateadlaste poolt pahavara analüüsimisel turvamehhanismidest mööda hiilida. Toiming pärast faili asendamist teostatakse hetkel, kui rakendus täidab muudetud andmebaasis oleva tabeli esimese SELECT-päringu.
Näitena demonstreerisime aadressiraamatu avamisel iOS-is koodi käivitamise võimalust, andmebaasiga “AddressBook.sqlitedb” faili muudeti pakutud meetodil. Rünnak kasutas haavatavust funktsioonis fts3_tokenizer (CVE-2019-8602, kursori viitamise võimalus), mis parandati aprilli SQLite 2.28 värskenduses, koos mõne muuga.
Rünnakumeetod põhineb kahe tehnika „Query Hijacking“ ja „Query Oriented Programming“ kasutamisel, mis võimaldavad ära kasutada suvalisi probleeme, mis põhjustavad SQLite'i mootoris mälu rikkumist. Päringu kaaperdamise olemus seisneb teenindustabelis sqlite_master välja "sql" sisu asendamises, mis määrab andmebaasi struktuuri. Määratud väli sisaldab DDL (Data Definition Language) plokki, mida kasutatakse andmebaasis olevate objektide struktuuri kirjeldamiseks. Kirjeldus on täpsustatud standardse SQL-i süntaksi abil, st. kasutatakse konstruktsiooni "LOO TABEL",
mis käivitatakse andmebaasi initsialiseerimise käigus (esimese käivitamise ajal
Funktsioonid sqlite3LocateTable tabelitega seotud sisemiste struktuuride loomiseks mällu.
Mõte seisneb selles, et “CREATE TABLE” asendamisel sõnaga “LOO VAATE” on võimalik kontrollida juurdepääsu andmebaasile, määratledes oma vaate. "CREATE VIEW" abil seotakse tabeliga operatsioon "SELECT", mida kutsutakse "CREATE TABLE" asemel ja mis võimaldab teil pääseda juurde SQLite'i tõlgi erinevatele osadele. Järgmiseks oleks lihtsaim ründeviis kutsuda välja funktsioon “load_extension”, mis võimaldab laadida suvalise laiendiga teeki, kuid see funktsioon on vaikimisi keelatud.
Rünnaku läbiviimiseks, kui on võimalik sooritada toimingut “SELECT”, pakutakse välja “päringule orienteeritud programmeerimise” tehnika, mis võimaldab ära kasutada SQLite’i probleeme, mis põhjustavad mälu rikkumist. Tehnika meenutab tagasitulekule orienteeritud programmeerimist (
Allikas: opennet.ru