Հետազոտողները Check Point-ից
Հաջող հարձակման համար անհրաժեշտ է կարողանալ փոփոխել հարձակման ենթարկված հավելվածների տվյալների բազայի ֆայլերը, ինչը սահմանափակում է մեթոդը հարձակման այն հավելվածների վրա, որոնք օգտագործում են SQLite տվյալների բազան որպես տարանցման և մուտքագրման տվյալների ձևաչափ: Մեթոդը կարող է օգտագործվել նաև առկա լոկալ հասանելիությունն ընդլայնելու համար, օրինակ՝ թաքնված հետնախորշերը օգտագործված հավելվածների մեջ ինտեգրելու համար, ինչպես նաև անվտանգության մեխանիզմները շրջանցելու համար՝ անվտանգության հետազոտողների կողմից չարամիտ ծրագրերը վերլուծելիս: Գործողությունը ֆայլի փոխարինումից հետո իրականացվում է այն պահին, երբ հավելվածը կատարում է առաջին SELECT հարցումը փոփոխված տվյալների բազայի աղյուսակի նկատմամբ:
Որպես օրինակ՝ մենք ցուցադրեցինք iOS-ում կոդը գործարկելու հնարավորությունը հասցեների գիրք բացելիս, «AddressBook.sqlitedb» տվյալների բազայի ֆայլը փոփոխվել է առաջարկվող մեթոդով: Հարձակման ժամանակ օգտագործվել է fts3_tokenizer ֆունկցիայի խոցելիությունը (CVE-2019-8602, ցուցիչի անջատման հնարավորություն), որը ամրագրվել է ապրիլյան SQLite 2.28 թարմացումում ևս մեկ այլ տարբերակի հետ միասին։
Հարձակման մեթոդը հիմնված է «Query Hijacking» և «Query Oriented Programming» երկու տեխնիկայի օգտագործման վրա, որոնք թույլ են տալիս օգտագործել կամայական խնդիրներ, որոնք հանգեցնում են SQLite շարժիչի հիշողության խաթարմանը: «Query Hijacking»-ի էությունը sqlite_master սպասարկման աղյուսակում «sql» դաշտի բովանդակության փոխարինումն է, որը որոշում է տվյալների բազայի կառուցվածքը: Նշված դաշտը պարունակում է DDL (Data Definition Language) բլոկ, որն օգտագործվում է տվյալների բազայի օբյեկտների կառուցվածքը նկարագրելու համար: Նկարագրությունը նշված է ստանդարտ SQL շարահյուսության միջոցով, այսինքն. օգտագործվում է «ՍՏԵՂԾԵԼ ՍԵՂԱՆԱԿ» կոնստրուկցիան,
որն իրականացվում է տվյալների բազայի սկզբնավորման գործընթացում (առաջին գործարկման ժամանակ
sqlite3LocateTable-ը գործում է հիշողության մեջ աղյուսակի հետ կապված ներքին կառուցվածքներ ստեղծելու համար:
Գաղափարն այն է, որ «CREATE TABLE»-ը «CREATE VIEW»-ով փոխարինելու արդյունքում հնարավոր է դառնում վերահսկել ցանկացած մուտք դեպի տվյալների բազա՝ սահմանելով սեփական տեսակետը: «CREATE VIEW» օգտագործելով «SELECT» գործողությունը կապված է աղյուսակի հետ, որը կկանչվի «CREATE TABLE»-ի փոխարեն և թույլ է տալիս մուտք գործել SQLite թարգմանչի տարբեր մասեր: Հաջորդը, հարձակման ամենապարզ մեթոդը կլինի «load_extension» ֆունկցիան կանչելը, որը թույլ է տալիս բեռնել կամայական գրադարան ընդլայնմամբ, սակայն այս գործառույթը լռելյայն անջատված է:
Հարձակում իրականացնելու համար, երբ հնարավոր է կատարել «SELECT» օպերացիան, առաջարկվում է «Query Oriented Programming» տեխնիկան, որը հնարավորություն է տալիս օգտագործել SQLite-ի խնդիրները, որոնք հանգեցնում են հիշողության խաթարման: Տեխնիկան հիշեցնում է վերադարձի վրա հիմնված ծրագրավորում (
Source: opennet.ru