چيڪ پوائنٽ کان محقق DEF CON ڪانفرنس ۾، SQLite جي ڪمزور ورزن کي استعمال ڪندي ايپليڪيشنن تي حملو ڪرڻ لاءِ نئين ٽيڪنڪ جا تفصيل. چيڪ پوائنٽ جو طريقو ڊيٽابيس فائلن کي مختلف اندروني 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 انجڻ ۾ ميموري ڪرپشن جو سبب بڻجن ٿيون. "Query Hijacking" جو خلاصو sqlite_master سروس ٽيبل ۾ "sql" فيلڊ جي مواد کي تبديل ڪرڻ آهي، جيڪو ڊيٽابيس جي جوڙجڪ کي طئي ڪري ٿو. بيان ڪيل فيلڊ ۾ ڊي ڊي ايل (ڊيٽا جي تعريف جي ٻولي) بلاڪ شامل آهي جيڪو ڊيٽابيس ۾ شيون جي جوڙجڪ کي بيان ڪرڻ لاء استعمال ڪيو ويندو آهي. وضاحت معياري SQL نحو استعمال ڪندي بيان ڪئي وئي آهي، يعني. "CREATE TABLE" تعمير استعمال ڪيو ويندو آهي،
جيڪو ڊيٽابيس جي شروعاتي عمل دوران عمل ڪيو ويندو آهي (پهرين لانچ دوران
sqlite3LocateTable ڪم ڪري ٿو ٽيبل سان لاڳاپيل اندروني ڍانچي ٺاهڻ لاءِ ميموري ۾.
خيال اهو آهي ته، "CREATE TABLE" کي "CREATE VIEW" سان تبديل ڪرڻ جي نتيجي ۾، توهان جي پنهنجي نظر کي بيان ڪندي ڊيٽابيس تائين ڪنهن به رسائي کي ڪنٽرول ڪرڻ ممڪن آهي. "CREATE VIEW" استعمال ڪندي هڪ "SELECT" آپريشن ٽيبل تي پابند آهي، جنهن کي "CREATE TABLE" جي بدران سڏيو ويندو ۽ توهان کي SQLite مترجم جي مختلف حصن تائين رسائي جي اجازت ڏئي ٿي. اڳيون، حملي جو آسان طريقو "load_extension" فنڪشن کي سڏڻ لاء هوندو، جيڪو توهان کي ايڪسٽينشن سان هڪ خودمختيار لائبريري لوڊ ڪرڻ جي اجازت ڏئي ٿو، پر هي فنڪشن ڊفالٽ طور بند ٿيل آهي.
حملي کي انجام ڏيڻ لاءِ جڏهن ”SELECT“ آپريشن کي انجام ڏيڻ ممڪن آهي، ”Query Oriented Programming“ ٽيڪنڪ تجويز ڪئي وئي آهي، جيڪا SQLite ۾ مسئلن جو استحصال ڪرڻ ممڪن بڻائي ٿي جيڪا ميموري ڪرپشن جي ڪري ٿي. ٽيڪنڪ واپسي تي مبني پروگرامنگ جي ياد ڏياري ٿي (, Return-Oriented Programming)، پر ڪالن جي زنجير (“گئجيٽس”) کي ٺاهڻ لاءِ مشين ڪوڊ جا موجود ٽڪڙا استعمال نه ڪندو آهي، پر SELECT اندر ذيلي سوالن جي هڪ سيٽ ۾ داخل ڪندو آهي.
جو ذريعو: opennet.ru
