Các nhà nghiên cứu từ Check Point
Để một cuộc tấn công thành công, cần có khả năng sửa đổi các tệp cơ sở dữ liệu của các ứng dụng bị tấn công, điều này hạn chế phương thức tấn công vào các ứng dụng sử dụng cơ sở dữ liệu SQLite làm định dạng cho dữ liệu đầu vào và chuyển tiếp. Phương pháp này cũng có thể được sử dụng để mở rộng quyền truy cập cục bộ hiện có, chẳng hạn như để tích hợp các cửa hậu ẩn vào các ứng dụng đã sử dụng, cũng như vượt qua các cơ chế bảo mật khi các nhà nghiên cứu bảo mật phân tích phần mềm độc hại. Hoạt động sau khi thay thế tệp được thực hiện tại thời điểm ứng dụng thực hiện truy vấn CHỌN đầu tiên đối với một bảng trong cơ sở dữ liệu đã sửa đổi.
Ví dụ: chúng tôi đã chứng minh khả năng chạy mã trong iOS khi mở sổ địa chỉ, tệp có cơ sở dữ liệu “AddressBook.sqlitedb” đã được sửa đổi bằng phương pháp được đề xuất. Cuộc tấn công đã sử dụng một lỗ hổng trong hàm fts3_tokenizer (CVE-2019-8602, khả năng tham chiếu con trỏ), đã được sửa trong bản cập nhật SQLite 2.28 tháng XNUMX, cùng với một lỗ hổng khác
Phương thức tấn công dựa trên việc sử dụng hai kỹ thuật “Query Hijacking” và “Query Oriented Programming”, cho phép khai thác các vấn đề tùy ý dẫn đến hỏng bộ nhớ trong công cụ SQLite. Bản chất của “Query Hijacking” là thay thế nội dung của trường “sql” trong bảng dịch vụ sqlite_master, xác định cấu trúc của cơ sở dữ liệu. Trường được chỉ định chứa khối DDL (Ngôn ngữ định nghĩa dữ liệu) được sử dụng để mô tả cấu trúc của các đối tượng trong cơ sở dữ liệu. Mô tả được chỉ định bằng cú pháp SQL tiêu chuẩn, tức là cấu trúc “CREATE TABLE” được sử dụng,
được thực thi trong quá trình khởi tạo cơ sở dữ liệu (trong lần khởi chạy đầu tiên
sqlite3LocateTable có chức năng tạo cấu trúc bên trong liên quan đến bảng trong bộ nhớ.
Ý tưởng là, nhờ việc thay thế “TẠO BẢNG” bằng “TẠO CHẾ ĐỘ XEM”, bạn có thể kiểm soát mọi quyền truy cập vào cơ sở dữ liệu bằng cách xác định chế độ xem của riêng mình. Khi sử dụng "TẠO XEM", thao tác "CHỌN" được liên kết với bảng, bảng này sẽ được gọi thay vì "TẠO BẢNG" và cho phép bạn truy cập các phần khác nhau của trình thông dịch SQLite. Tiếp theo, phương thức tấn công đơn giản nhất là gọi hàm “load_extension”, cho phép bạn tải một thư viện tùy ý có tiện ích mở rộng, nhưng chức năng này bị tắt theo mặc định.
Để thực hiện một cuộc tấn công khi có thể thực hiện thao tác “CHỌN”, kỹ thuật “Lập trình hướng truy vấn” được đề xuất, giúp khai thác các sự cố trong SQLite dẫn đến hỏng bộ nhớ. Kỹ thuật này gợi nhớ đến lập trình hướng trở lại (
Nguồn: opennet.ru