تقديم تقنية جديدة لاستغلال الثغرات الأمنية في SQLite

باحثون من تشيك بوينت مكشوفة في مؤتمر DEF CON، تفاصيل تقنية جديدة لمهاجمة التطبيقات التي تستخدم الإصدارات الضعيفة من SQLite. تعتبر طريقة Check Point ملفات قاعدة البيانات بمثابة فرصة لدمج السيناريوهات لاستغلال الثغرات الأمنية في أنظمة SQLite الفرعية المختلفة التي لا يمكن استغلالها بشكل مباشر. كما قام الباحثون بإعداد تقنية لاستغلال الثغرات الأمنية من خلال تشفير الاستغلال على شكل سلسلة من استعلامات SELECT في قاعدة بيانات SQLite، مما يسمح لك بتجاوز ASLR.

لهجوم ناجح، من الضروري أن تكون قادرًا على تعديل ملفات قاعدة البيانات الخاصة بالتطبيقات التي تمت مهاجمتها، مما يحد من الطريقة للهجمات على التطبيقات التي تستخدم قاعدة بيانات SQLite كتنسيق لنقل البيانات وإدخالها. يمكن أيضًا استخدام هذه الطريقة لتوسيع الوصول المحلي الحالي، على سبيل المثال، لدمج الأبواب الخلفية المخفية في التطبيقات المستخدمة، بالإضافة إلى تجاوز آليات الأمان عند تحليل البرامج الضارة بواسطة الباحثين الأمنيين. يتم تنفيذ العملية بعد استبدال الملف في اللحظة التي ينفذ فيها التطبيق استعلام SELECT الأول مقابل جدول في قاعدة البيانات المعدلة.

على سبيل المثال، أظهرنا القدرة على تشغيل التعليمات البرمجية في iOS عند فتح دفتر العناوين، وتم تعديل الملف الذي يحتوي على قاعدة بيانات "AddressBook.sqlitedb" باستخدام الطريقة المقترحة. استخدم الهجوم ثغرة أمنية في وظيفة fts3_tokenizer (CVE-2019-8602، إمكانية الرجوع إلى المؤشر)، والتي تم إصلاحها في تحديث SQLite 2.28 لشهر أبريل، إلى جانب ثغرة أخرى وهن في تنفيذ وظائف النافذة. بالإضافة إلى ذلك، تم توضيح استخدام طريقة للسيطرة عن بعد على خادم الواجهة الخلفية للمهاجم المكتوب بلغة PHP، والذي يجمع كلمات المرور التي تم اعتراضها أثناء تشغيل التعليمات البرمجية الضارة (تم نقل كلمات المرور المعترضة في شكل قاعدة بيانات SQLite).

يعتمد أسلوب الهجوم على استخدام تقنيتين هما “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 التي تؤدي إلى تلف الذاكرة. تذكرنا هذه التقنية بالبرمجة الموجهة نحو العودة (شرطة عمان السلطانية، البرمجة الموجهة نحو العودة)، ولكنها لا تستخدم المقتطفات الموجودة من كود الجهاز لإنشاء سلسلة من الاستدعاءات ("الأدوات")، ولكنها تُدرج في مجموعة من الاستعلامات الفرعية داخل SELECT.

تقديم تقنية جديدة لاستغلال الثغرات الأمنية في SQLite

تقديم تقنية جديدة لاستغلال الثغرات الأمنية في SQLite

المصدر: opennet.ru

إضافة تعليق