Naukowcy z Check Point
Aby atak był skuteczny, konieczna jest możliwość modyfikacji plików baz danych zaatakowanych aplikacji, co ogranicza metodę do ataków na aplikacje korzystające z bazy danych SQLite jako formatu przesyłania i wprowadzania danych. Metodę można również wykorzystać do rozszerzenia istniejącego dostępu lokalnego, na przykład do zintegrowania ukrytych backdoorów z używanymi aplikacjami, a także do ominięcia mechanizmów bezpieczeństwa podczas analizy szkodliwego oprogramowania przez badaczy bezpieczeństwa. Operacja po podstawieniu pliku wykonywana jest w momencie wykonania przez aplikację pierwszego zapytania SELECT względem tabeli w zmodyfikowanej bazie danych.
Jako przykład zademonstrowaliśmy możliwość uruchomienia kodu w systemie iOS podczas otwierania książki adresowej, zaproponowanym sposobem zmodyfikowano plik z bazą danych „AddressBook.sqlitedb”. W ataku wykorzystano lukę w funkcji fts3_tokenizer (CVE-2019-8602, możliwość dereferencji wskaźników), naprawioną w kwietniowej aktualizacji SQLite 2.28, a także inną
Metoda ataku opiera się na wykorzystaniu dwóch technik „Query Hijacking” i „Query Oriented Programming”, które pozwalają na wykorzystanie dowolnych problemów prowadzących do uszkodzenia pamięci w silniku SQLite. Istotą „Query Hijacking” jest zastąpienie zawartości pola „sql” w tabeli usługi sqlite_master, która określa strukturę bazy danych. Podane pole zawiera blok DDL (Data Definition Language) służący do opisu struktury obiektów w bazie danych. Opis jest podawany przy użyciu standardowej składni SQL, tj. stosowana jest konstrukcja „CREATE TABLE”,
który jest wykonywany podczas procesu inicjalizacji bazy danych (podczas pierwszego uruchomienia
Funkcje sqlite3LocateTable do tworzenia wewnętrznych struktur związanych z tabelami w pamięci.
Pomysł jest taki, że w wyniku zastąpienia opcji „UTWÓRZ TABELĘ” opcją „UTWÓRZ WIDOK” możliwa staje się kontrola dowolnego dostępu do bazy danych poprzez zdefiniowanie własnego widoku. Używając „UTWÓRZ WIDOK”, operacja „WYBIERZ” jest powiązana z tabelą, która zostanie wywołana zamiast „UTWÓRZ TABELĘ” i umożliwi dostęp do różnych części interpretera SQLite. Następnie najprostszą metodą ataku byłoby wywołanie funkcji „load_extension”, która pozwala załadować dowolną bibliotekę z rozszerzeniem, ale funkcja ta jest domyślnie wyłączona.
Aby przeprowadzić atak, gdy możliwe jest wykonanie operacji „SELECT”, proponowana jest technika „programowania zorientowanego na zapytania”, która umożliwia wykorzystanie problemów w SQLite prowadzących do uszkodzenia pamięci. Technika ta przypomina programowanie zorientowane na zwrot (
Źródło: opennet.ru