Forscher von Check Point
Für einen erfolgreichen Angriff ist es notwendig, die Datenbankdateien der angegriffenen Anwendungen ändern zu können, was die Methode auf Angriffe auf Anwendungen beschränkt, die die SQLite-Datenbank als Format für Transit- und Eingabedaten verwenden. Das Verfahren kann auch zur Erweiterung bestehender lokaler Zugriffe genutzt werden, um beispielsweise versteckte Hintertüren in genutzte Anwendungen zu integrieren, sowie zur Umgehung von Sicherheitsmechanismen bei der Analyse von Malware durch Sicherheitsforscher. Der Vorgang nach der Dateiersetzung wird in dem Moment ausgeführt, in dem die Anwendung die erste SELECT-Abfrage für eine Tabelle in der geänderten Datenbank ausführt.
Als Beispiel haben wir die Möglichkeit demonstriert, beim Öffnen eines Adressbuchs Code in iOS auszuführen. Die Datei mit der Datenbank „AddressBook.sqlitedb“ wurde mit der vorgeschlagenen Methode geändert. Der Angriff nutzte eine Schwachstelle in der Funktion fts3_tokenizer (CVE-2019-8602, Zeiger-Dereferenzierungsfunktion), die im SQLite-Update 2.28 vom April behoben wurde, sowie eine weitere
Die Angriffsmethode basiert auf der Verwendung zweier Techniken „Query Hijacking“ und „Query Oriented Programming“, die es ermöglichen, beliebige Probleme auszunutzen, die zu einer Speicherbeschädigung in der SQLite-Engine führen. Der Kern von „Query Hijacking“ besteht darin, den Inhalt des Felds „sql“ in der Servicetabelle sqlite_master zu ersetzen, das die Struktur der Datenbank bestimmt. Das angegebene Feld enthält einen DDL-Block (Data Definition Language), der zur Beschreibung der Struktur von Objekten in der Datenbank verwendet wird. Die Beschreibung wird mithilfe der Standard-SQL-Syntax angegeben, d. h. die „CREATE TABLE“-Konstruktion wird verwendet,
die während des Datenbankinitialisierungsprozesses (beim ersten Start) ausgeführt wird
sqlite3LocateTable-Funktionen zum Erstellen tabellenbezogener interner Strukturen im Speicher.
Die Idee besteht darin, dass es durch das Ersetzen von „CREATE TABLE“ durch „CREATE VIEW“ möglich wird, jeden Zugriff auf die Datenbank durch die Definition einer eigenen Ansicht zu steuern. Mit „CREATE VIEW“ wird eine „SELECT“-Operation an die Tabelle gebunden, die anstelle von „CREATE TABLE“ aufgerufen wird und Ihnen den Zugriff auf verschiedene Teile des SQLite-Interpreters ermöglicht. Als nächstes wäre die einfachste Angriffsmethode der Aufruf der Funktion „load_extension“, mit der Sie eine beliebige Bibliothek mit einer Erweiterung laden können. Diese Funktion ist jedoch standardmäßig deaktiviert.
Um einen Angriff durchzuführen, wenn die Operation „SELECT“ möglich ist, wird die Technik „Query Oriented Programming“ vorgeschlagen, die es ermöglicht, Probleme in SQLite auszunutzen, die zu Speicherbeschädigungen führen. Die Technik erinnert an die renditeorientierte Programmierung (
Source: opennet.ru