Worcester Polytechnic Institute (USA) မှ သုတေသီများသည် စစ်မှန်ကြောင်းနှင့် လုံခြုံရေးစစ်ဆေးမှုများ ရှိ၊ မရှိ ဆုံးဖြတ်ရန် ပရိုဂရမ်ရှိ အလံများအဖြစ် အသုံးပြုထားသည့် stack variable များ၏ တန်ဖိုးများကို ပြောင်းလဲရန် Rowhammer dynamic ကျပန်းဝင်ရောက်မှု memory bit distortion နည်းပညာကို အသုံးပြုသည့် Mayhem တိုက်ခိုက်မှု အမျိုးအစားသစ်ကို မိတ်ဆက်ခဲ့သည်။ လွန် တိုက်ခိုက်မှု၏လက်တွေ့နမူနာများကို SUDO၊ OpenSSH နှင့် MySQL တွင် စစ်မှန်ကြောင်းအထောက်အထားပြခြင်းကို ကျော်ဖြတ်ရန်နှင့် OpenSSL စာကြည့်တိုက်ရှိ လုံခြုံရေးဆိုင်ရာ စစ်ဆေးမှုများ၏ရလဒ်ကို ပြောင်းလဲရန်အတွက် သရုပ်ပြထားသည်။
သုညနှင့်မတူသည့်တန်ဖိုးများကို နှိုင်းယှဉ်ရန် စစ်ဆေးမှုများကိုအသုံးပြုသည့် အက်ပလီကေးရှင်းများတွင် တိုက်ခိုက်ခြင်းကို အသုံးချနိုင်သည်။ အားနည်းချက်ရှိသောကုဒ်၏နမူနာ- int auth = 0; ... // အောင်မြင်သော စစ်မှန်ကြောင်းအထောက်အထားပြခြင်းအတွက် AUTH_SUCCESS ပြန်လာပါက ... // အတည်ပြုကုဒ်၊ အခြား AUTH_FAILURE ကို ပြန်ပေးသည်။
ဤဥပမာ၏အခြေအနေတွင်၊ အောင်မြင်သောတိုက်ခိုက်မှုတစ်ခုအတွက် stack ပေါ်ရှိ 32-bit auth variable နှင့်ဆက်စပ်နေသော memory အတွင်းရှိဘစ်ကိုမဆိုပျက်စီးစေရန်လုံလောက်ပါသည်။ variable အတွင်းရှိ မည်သည့်ဘစ်မဆို ပျက်စီးနေပါက၊ တန်ဖိုးသည် သုညမဟုတ်တော့ဘဲ အခြေအနေအလိုက် အော်ပရေတာသည် အထောက်အထားစိစစ်ခြင်း အောင်မြင်စွာပြီးဆုံးကြောင်း ဆုံးဖြတ်မည်ဖြစ်သည်။ ထိုသို့သော validation ပုံစံများကို အပလီကေးရှင်းများတွင် အတော်လေးတွေ့ရပြီး ဥပမာအားဖြင့်၊ SUDO၊ OpenSSH၊ MySQL နှင့် OpenSSL တို့တွင် တွေ့ရပါသည်။
တိုက်ခိုက်မှုကို “if(auth == 1)” ပုံစံ၏ နှိုင်းယှဥ်မှုတွင်လည်း အသုံးပြုနိုင်သည်၊ သို့သော် ဤအခြေအနေတွင် ၎င်း၏ အကောင်အထည်ဖော်မှုသည် 32 bit မဟုတ်ဘဲ နောက်ဆုံး bit ကို ပုံပျက်သွားစေသောကြောင့် ၎င်းသည် ပိုမိုရှုပ်ထွေးလာပါသည်။ ဆက်စပ်ခလုတ်တစ်ခု၊ လုပ်ဆောင်ချက်ခေါ်ဆိုမှု သို့မဟုတ် အချက်ပြကိရိယာတစ်ခု မီးလောင်သည့်အခါ မှတ်ပုံတင်ခြင်း၏အကြောင်းအရာများကို stack ပေါ်သို့ ခေတ္တယာယီဖယ်ရှားနိုင်သောကြောင့် ပရိုဆက်ဆာမှတ်ပုံတင်မှုများရှိ variable များ၏တန်ဖိုးများကို လွှမ်းမိုးရန် နည်းလမ်းကိုလည်း အသုံးပြုနိုင်သည်။ မှတ်ပုံတင်ထားသောတန်ဖိုးများသည် မှတ်ဉာဏ်တွင်ရှိနေစဉ်ကာလအတွင်း၊ ကွဲလွဲမှုများကို ဤမှတ်ဉာဏ်ထဲသို့ မိတ်ဆက်နိုင်ပြီး ပြောင်းလဲထားသောတန်ဖိုးကို မှတ်ပုံတင်ခြင်းသို့ ပြန်လည်ရောက်ရှိမည်ဖြစ်သည်။
bits များကို ပုံပျက်စေရန်၊ RowHammer class attack ၏ ပြုပြင်မွမ်းမံမှုများထဲမှ တစ်ခုကို အသုံးပြုပါသည်။ DRAM မမ်မိုရီသည် ဆဲလ်နှစ်ဘက်မြင် array တစ်ခုဖြစ်သောကြောင့် တစ်ခုစီတွင် capacitor နှင့် transistor ပါ၀င်သောကြောင့် တူညီသော memory area ၏ စဉ်ဆက်မပြတ်ဖတ်ခြင်းကို လုပ်ဆောင်ခြင်းသည် အနီးနားဆဲလ်များတွင် အားအနည်းငယ်သာ ဆုံးရှုံးမှုဖြစ်စေသည့် ဗို့အားအတက်အကျနှင့် ကွဲလွဲချက်များကို ဖြစ်စေသည်။ ဖတ်ရှုမှုပြင်းထန်မှု မြင့်မားပါက၊ အိမ်နီးချင်းဆဲလ်သည် လုံလောက်သော အားသွင်းပမာဏကို ဆုံးရှုံးနိုင်ပြီး နောက်အသစ်ပြန်လည်ထုတ်လုပ်သည့်စက်ဝန်းတွင် ၎င်း၏မူလအခြေအနေသို့ ပြန်လည်ရောက်ရှိရန် အချိန်မရှိတော့ဘဲ၊ ၎င်းသည် ဆဲလ်အတွင်းသိမ်းဆည်းထားသည့် ဒေတာတန်ဖိုးကို ပြောင်းလဲသွားစေမည်ဖြစ်သည်။ . RowHammer ကို ကာကွယ်ရန်၊ ချစ်ပ်ထုတ်လုပ်သူများသည် အထူးကိစ္စများတွင် ဆဲလ်ဖောက်ပြန်ခြင်းကို တားဆီးပေးသည့် TRR (Target Row Refresh) ယန္တရားကို ထည့်သွင်းထားသော်လည်း ဖြစ်နိုင်ချေရှိသော တိုက်ခိုက်မှုမျိုးကွဲအားလုံးကို မကာကွယ်နိုင်ပါ။
Mayhem တိုက်ခိုက်မှုကို ကာကွယ်ရန်၊ သုည သို့မဟုတ် တစ်ခုနှင့် တိုက်ဆိုင်မှု၏ ကွာခြားချက်များကို အကဲဖြတ်ခြင်းမဟုတ်ဘဲ နှိုင်းယှဉ်မှုတွင် အသုံးပြုရန် အကြံပြုထားသော်လည်း သုည octets မဟုတ်သော ကျပန်းမျိုးစေ့တန်ဖိုးကို အသုံးပြု၍ ကိုက်ညီမှုစစ်ဆေးမှုကို အသုံးပြုရန် အကြံပြုထားသည်။ ဤကိစ္စတွင်၊ variable ၏အလိုရှိသောတန်ဖိုးကိုသတ်မှတ်ရန်၊ တစ်ဘစ်၏ပုံပျက်ခြင်းနှင့်ဆန့်ကျင်ဘက်ဖြစ်သော သိသာထင်ရှားသောဘစ်အရေအတွက်ကို တိကျစွာပုံဖျက်ရန် လိုအပ်ပါသည်။ တိုက်ခိုက်လို့မရသောကုဒ်ဥပမာ- int auth = 0xbe406d1a; ... // မှန်ကန်သောတန်ဖိုးကို 0x23ab8701 သို့ သတ်မှတ်ပေးသော စိစစ်ရေးကုဒ်သည် (auth == 0x23ab8701) AUTH_SUCCESS ပြန်လာပါက၊ အခြား AUTH_FAILURE ကို ပြန်ပေးသည်။
သတ်မှတ်ထားသော ကာကွယ်မှုနည်းလမ်းကို sudo developer များက အသုံးပြုထားပြီးဖြစ်ကာ CVE-1.9.15-2023 အားနည်းချက်အတွက် ပြင်ဆင်ချက်အဖြစ် ထွက်ရှိသည့် 42465 တွင် ထည့်သွင်းထားသည်။ ပင်မထိခိုက်လွယ်သော ပရောဂျက်များအတွက် ပြုပြင်မှုများ ပြုလုပ်ပြီးနောက် တိုက်ခိုက်မှုကို လုပ်ဆောင်ရန်အတွက် ၎င်းတို့သည် ကုဒ်၏ ရှေ့ပြေးပုံစံကို ထုတ်ဝေရန် စီစဉ်ထားသည်။
source: opennet.ru