باحثون من تشيك بوينت
لهجوم ناجح، من الضروري أن تكون قادرًا على تعديل ملفات قاعدة البيانات الخاصة بالتطبيقات التي تمت مهاجمتها، مما يحد من الطريقة للهجمات على التطبيقات التي تستخدم قاعدة بيانات SQLite كتنسيق لنقل البيانات وإدخالها. يمكن أيضًا استخدام هذه الطريقة لتوسيع الوصول المحلي الحالي، على سبيل المثال، لدمج الأبواب الخلفية المخفية في التطبيقات المستخدمة، بالإضافة إلى تجاوز آليات الأمان عند تحليل البرامج الضارة بواسطة الباحثين الأمنيين. يتم تنفيذ العملية بعد استبدال الملف في اللحظة التي ينفذ فيها التطبيق استعلام SELECT الأول مقابل جدول في قاعدة البيانات المعدلة.
على سبيل المثال، أظهرنا القدرة على تشغيل التعليمات البرمجية في iOS عند فتح دفتر العناوين، وتم تعديل الملف الذي يحتوي على قاعدة بيانات "AddressBook.sqlitedb" باستخدام الطريقة المقترحة. استخدم الهجوم ثغرة أمنية في وظيفة fts3_tokenizer (CVE-2019-8602، إمكانية الرجوع إلى المؤشر)، والتي تم إصلاحها في تحديث SQLite 2.28 لشهر أبريل، إلى جانب ثغرة أخرى
يعتمد أسلوب الهجوم على استخدام تقنيتين هما “Query Hijacking” و”Query Oriented Programming”، مما يسمح باستغلال المشاكل العشوائية التي تؤدي إلى تلف الذاكرة في محرك SQLite. يتمثل جوهر "اختطاف الاستعلام" في استبدال محتويات حقل "sql" في جدول خدمة sqlite_master، والذي يحدد بنية قاعدة البيانات. يحتوي الحقل المحدد على كتلة DDL (لغة تعريف البيانات) المستخدمة لوصف بنية الكائنات في قاعدة البيانات. يتم تحديد الوصف باستخدام بناء جملة SQL القياسي، أي. يتم استخدام بناء "CREATE TABLE"،
والذي يتم تنفيذه أثناء عملية تهيئة قاعدة البيانات (أثناء الإطلاق الأول
يعمل sqlite3LocateTable على إنشاء بنيات داخلية متعلقة بالجدول في الذاكرة.
الفكرة هي أنه نتيجة لاستبدال "CREATE TABLE" بـ "CREATE VIEW"، يصبح من الممكن التحكم في أي وصول إلى قاعدة البيانات عن طريق تحديد طريقة العرض الخاصة بك. باستخدام "CREATE VIEW"، يتم ربط عملية "SELECT" بالجدول، والتي سيتم استدعاؤها بدلاً من "CREATE TABLE" وتسمح لك بالوصول إلى أجزاء مختلفة من مترجم SQLite. بعد ذلك، ستكون أبسط طريقة للهجوم هي استدعاء وظيفة "load_extension"، والتي تسمح لك بتحميل مكتبة عشوائية ذات ملحق، ولكن هذه الوظيفة معطلة افتراضيًا.
لتنفيذ هجوم عندما يكون من الممكن إجراء عملية "SELECT"، يتم اقتراح تقنية "Query Oriented Programming"، مما يجعل من الممكن استغلال المشكلات في SQLite التي تؤدي إلى تلف الذاكرة. تذكرنا هذه التقنية بالبرمجة الموجهة نحو العودة (
المصدر: opennet.ru