A Check Point kutatói
A sikeres támadáshoz szükséges a megtámadott alkalmazások adatbázisfájljainak módosítása, ami a módszert az SQLite adatbázist tranzit- és bemeneti adatok formátumaként használó alkalmazások elleni támadásokra korlátozza. A módszer a meglévő helyi hozzáférés bővítésére is használható, például rejtett hátsó ajtók integrálására a használt alkalmazásokba, valamint a biztonsági mechanizmusok megkerülésére, amikor a biztonsági kutatók rosszindulatú programokat elemeznek. A fájlcsere utáni műveletet abban a pillanatban hajtják végre, amikor az alkalmazás végrehajtja az első SELECT lekérdezést a módosított adatbázisban lévő táblán.
Példaként bemutattuk a kód futtatásának képességét iOS rendszerben egy címjegyzék megnyitásakor, az „AddressBook.sqlitedb” adatbázissal rendelkező fájlt a javasolt módszerrel módosítottuk. A támadás az áprilisi SQLite 3-as frissítésben javított fts2019_tokenizer funkció (CVE-8602-2.28, pointer dereference képesség) biztonsági rését használta, valamint egy másikat.
A támadási módszer két „Lekérdezés-eltérítés” és „Lekérdezés-orientált programozás” technikán alapul, amelyek lehetővé teszik olyan tetszőleges problémák kihasználását, amelyek memóriasérüléshez vezetnek az SQLite motorban. A “Query Hijacking” lényege, hogy az sqlite_master szolgáltatástáblában az adatbázis szerkezetét meghatározó “sql” mező tartalmát lecseréljük. A megadott mező tartalmaz egy DDL (Data Definition Language) blokkot, amely az adatbázisban lévő objektumok szerkezetének leírására szolgál. A leírás szabványos SQL szintaxissal van megadva, pl. a „CREATE TABLE” konstrukció használatos,
amely az adatbázis inicializálási folyamata során (az első indításkor
Az sqlite3LocateTable függvények táblákhoz kapcsolódó belső struktúrák létrehozásához a memóriában.
Az ötlet az, hogy a „TÁBLÁZAT LÉTREHOZÁSA” helyett „NÉZET LÉTREHOZÁSA” lehetővé válik az adatbázishoz való hozzáférés szabályozása saját nézet meghatározásával. A "NÉZET LÉTREHOZÁSA" használatával egy "SELECT" művelet van a táblához kötve, amelyet a "CREATE TABLE" helyett hívnak meg, és lehetővé teszi az SQLite értelmező különböző részei elérését. Ezután a támadás legegyszerűbb módja a „load_extension” függvény meghívása, amely lehetővé teszi egy tetszőleges könyvtár betöltését kiterjesztéssel, de ez a funkció alapértelmezés szerint le van tiltva.
A „SELECT” művelet végrehajtása esetén a támadás végrehajtásához a „Query Oriented Programming” technikát javasoljuk, amely lehetővé teszi az SQLite-ban lévő olyan problémák kihasználását, amelyek memóriasérüléshez vezetnek. A technika a visszatérés-orientált programozásra emlékeztet (
Forrás: opennet.ru