Check Point မှ သုတေသီများ၊ DEF CON ကွန်ဖရင့်တွင်၊ အားနည်းချက်ရှိသော SQLite ဗားရှင်းများကို အသုံးပြု၍ အပလီကေးရှင်းများကို တိုက်ခိုက်ရန်အတွက် နည်းပညာအသစ်၏ အသေးစိတ်အချက်အလက်များ။ Check Point နည်းလမ်းသည် ဒေတာဘေ့စ်ဖိုင်များကို တိုက်ရိုက်အသုံးချ၍မရသော အမျိုးမျိုးသော အတွင်းပိုင်း SQLite ခွဲစနစ်များတွင် အားနည်းချက်များကို အသုံးချခြင်းအတွက် ဒေတာဘေ့စ်ဖိုင်များကို ပေါင်းစပ်ရန် အခွင့်အလမ်းအဖြစ် သတ်မှတ်သည်။ သုတေသီများသည် ASLR ကိုကျော်လွှားနိုင်စေမည့် SQLite database ရှိ SELECT queries ၏ကွင်းဆက်ပုံစံဖြင့် exploit ကို encoding လုပ်ခြင်းဖြင့် အားနည်းချက်များကို အသုံးချခြင်းအတွက် နည်းလမ်းတစ်ခုကိုလည်း ပြင်ဆင်ထားပါသည်။
အောင်မြင်သောတိုက်ခိုက်မှုတစ်ခုအတွက်၊ SQLite ဒေတာဘေ့စ်ကို အကူးအပြောင်းနှင့် ဒေတာထည့်သွင်းမှုပုံစံအဖြစ် SQLite ဒေတာဘေ့စ်ကို အသုံးပြုသည့် အပလီကေးရှင်းများအပေါ် တိုက်ခိုက်ခြင်းနည်းလမ်းကို ကန့်သတ်ထားသည့် တိုက်ခိုက်ခံရသော အပလီကေးရှင်းများ၏ ဒေတာဘေ့စ်ဖိုင်များကို မွမ်းမံပြင်ဆင်နိုင်ရန်လိုအပ်သည်။ ဥပမာအားဖြင့်၊ ရှိပြီးသား local access ကိုချဲ့ထွင်ရန် နည်းလမ်းကို အသုံးပြုထားသော အပလီကေးရှင်းများတွင် ဝှက်ထားသော backdoors များကို ပေါင်းစပ်ရန်နှင့် လုံခြုံရေးသုတေသီများက malware ကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါ လုံခြုံရေးယန္တရားများကို ကျော်လွှားရန် နည်းလမ်းကိုလည်း အသုံးပြုနိုင်သည်။ ဖိုင်အစားထိုးခြင်းကို လုပ်ဆောင်ပြီးနောက် လုပ်ဆောင်ချက်ကို အပလီကေးရှင်းသည် ပြုပြင်ထားသောဒေတာဘေ့စ်ရှိ ဇယားတစ်ခုနှင့် ဆန့်ကျင်သည့် ပထမဆုံး SELECT မေးမြန်းမှုကို လုပ်ဆောင်သည်။
ဥပမာအနေဖြင့်၊ ကျွန်ုပ်တို့သည် လိပ်စာစာအုပ်ကိုဖွင့်သောအခါတွင် iOS တွင် ကုဒ်ကိုလုပ်ဆောင်နိုင်မှုကို ပြသခဲ့ပြီး၊ “AddressBook.sqlitedb” ဒေတာဘေ့စ်ပါသောဖိုင်ကို အဆိုပြုထားသောနည်းလမ်းကို အသုံးပြု၍ ပြုပြင်မွမ်းမံထားသည်။ တိုက်ခိုက်မှုသည် fts3_tokenizer function (CVE-2019-8602၊ pointer dereference capability)၊ ဧပြီလ SQLite 2.28 အပ်ဒိတ်တွင် ပြင်ဆင်ထားသော အခြားအားနည်းချက်တစ်ခုအား အသုံးပြုခဲ့သည်။ window functions များအကောင်အထည်ဖော်မှုတွင်။ ထို့အပြင်၊ တိုက်ခိုက်သူ၏ နောက်ခံဆာဗာအား PHP တွင် ရေးသားထားသော တိုက်ခိုက်သူ၏ နောက်ခံဆာဗာကို အဝေးမှ သိမ်းယူရန် နည်းလမ်းကို အသုံးပြုခြင်းအား အန္တရာယ်ရှိသော ကုဒ်များ၏ လုပ်ဆောင်မှုအတွင်း ကြားဖြတ်ခံရသော စကားဝှက်များ စုဆောင်းခြင်း (ကြားဖြတ်ခံရသော စကားဝှက်များကို SQLite ဒေတာဘေ့စ်ပုံစံဖြင့် ထုတ်လွှင့်ခဲ့သည်) ကို သရုပ်ပြခဲ့သည်။
တိုက်ခိုက်မှုနည်းလမ်းသည် SQLite အင်ဂျင်တွင် မှတ်ဉာဏ်ယိုယွင်းမှုဖြစ်စေသော မတရားသောပြဿနာများကို အသုံးချခြင်းခွင့်ပြုသည့် “Query Hijacking” နှင့် “Query Oriented Programming” နည်းစနစ်နှစ်ခုကို အသုံးပြုမှုအပေါ် အခြေခံထားသည်။ “Query Hijacking” ၏ အနှစ်သာရမှာ ဒေတာဘေ့စ်၏ ဖွဲ့စည်းပုံကို ဆုံးဖြတ်ပေးသည့် sqlite_master ဝန်ဆောင်မှုဇယားရှိ “sql” အကွက်၏ အကြောင်းအရာများကို အစားထိုးရန် ဖြစ်သည်။ သတ်မှတ်ထားသော အကွက်တွင် ဒေတာဘေ့စ်ရှိ အရာဝတ္ထုများ၏ တည်ဆောက်ပုံကို ဖော်ပြရန်အတွက် အသုံးပြုသည့် DDL (Data Definition Language) ဘလောက်တစ်ခု ပါရှိသည်။ ဖော်ပြချက်အား standard SQL syntax, i.e. "CREATE TABLE" တည်ဆောက်မှုကို အသုံးပြုပြီး၊
ဒေတာဘေ့စ်အစပြုခြင်းလုပ်ငန်းစဉ်အတွင်း လုပ်ဆောင်သည် (ပထမဦးစွာစတင်ချိန်အတွင်း
sqlite3LocateTable လုပ်ဆောင်ချက်များကို မှတ်ဉာဏ်တွင် ဇယားနှင့်ဆက်စပ်သော အတွင်းပိုင်းတည်ဆောက်ပုံများ ဖန်တီးရန်။
အယူအဆမှာ "CREATE TABLE" ကို "CREATE VIEW" ဖြင့် အစားထိုးခြင်းကြောင့်၊ သင်၏ကိုယ်ပိုင်အမြင်ကို သတ်မှတ်ခြင်းဖြင့် ဒေတာဘေ့စ်သို့ဝင်ရောက်ခွင့်မှန်သမျှကို ထိန်းချုပ်နိုင်မည်ဖြစ်သည်။ "CREATE VIEW" ကိုအသုံးပြုခြင်းဖြင့် "SELECT" လုပ်ဆောင်ချက်သည် "CREATE TABLE" အစား "CREATE TABLE" ဟုခေါ်ဆိုမည့် ဇယားနှင့် SQLite စကားပြန်၏ မတူညီသော အစိတ်အပိုင်းများကို ဝင်ရောက်ကြည့်ရှုနိုင်မည်ဖြစ်သည်။ ထို့နောက်၊ တိုက်ခိုက်ရန် အရိုးရှင်းဆုံးနည်းလမ်းမှာ သင့်အား တိုးချဲ့မှုတစ်ခုဖြင့် မတရားသောစာကြည့်တိုက်တစ်ခုကို တင်နိုင်စေသည့် “load_extension” လုပ်ဆောင်ချက်ကို ခေါ်ရန်ဖြစ်ပြီး ဤလုပ်ဆောင်ချက်ကို မူရင်းအတိုင်း ပိတ်ထားသည်။
“SELECT” လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန် ဖြစ်နိုင်သည့်အခါ တိုက်ခိုက်ခြင်းအား လုပ်ဆောင်ရန်၊ “Query Oriented Programming” နည်းပညာကို အဆိုပြုထားပြီး၊ မှတ်ဉာဏ်ယိုယွင်းမှုဖြစ်စေသော SQLite တွင် ပြဿနာများကို အသုံးချနိုင်စေသည့် အဆိုပြုထားသည်။ အဆိုပါနည်းပညာသည် return-oriented programming ကိုအမှတ်ရနေသည် (၊ Return-Oriented Programming) ၊ သို့သော် ဖုန်းခေါ်ဆိုမှု ကွင်းဆက်များ (“ဂက်ဂျက်များ”) ကို တည်ဆောက်ရန် ရှိပြီးသား စက်ကုဒ်အတိုအထွာများကို အသုံးမပြုဘဲ SELECT အတွင်းတွင် အသေးစိပ်မေးမြန်းချက် အစုတစ်ခုတွင် ထည့်သွင်းပါသည်။
source: opennet.ru
