ဆော့ဖ်ဝဲရေးသားသူမှမမြင်နိုင်သောကုဒ်ပြောင်းလဲမှုများကိုမိတ်ဆက်ရန် Trojan အရင်းအမြစ်တိုက်ခိုက်မှု

University of Cambridge မှ သုတေသီများသည် ရွယ်တူချင်းသုံးသပ်ထားသော ရင်းမြစ်ကုဒ်တွင် အန္တရာယ်ရှိသောကုဒ်ကို တိတ်တဆိတ်ထည့်သွင်းရန် နည်းလမ်းတစ်ခုကို ထုတ်ဝေခဲ့သည်။ ပြင်ဆင်ထားသည့် တိုက်ခိုက်မှုနည်းလမ်း (CVE-2021-42574) ကို Trojan Source အမည်ဖြင့် ပြသထားပြီး compiler/interpreter နှင့် code ကိုကြည့်ရှုသူအတွက် မတူညီသော စာသားဖွဲ့စည်းမှုအပေါ် အခြေခံထားသည်။ C၊ C++ (gcc နှင့် clang)၊ C#၊ JavaScript (Node.js)၊ Java (OpenJDK 16)၊ Rust၊ Go နှင့် Python အတွက် ပံ့ပိုးပေးသော အမျိုးမျိုးသော compilers များနှင့် စကားပြန်များအတွက် နည်းလမ်း၏ ဥပမာများကို သရုပ်ပြထားပါသည်။

နည်းလမ်းသည် ကုဒ်မှတ်ချက်များတွင် အထူးယူနီကုဒ်အက္ခရာများကို အသုံးပြုခြင်းအပေါ် အခြေခံ၍ နှစ်ထပ်စာသား၏ ဖော်ပြမှုအစီအစဥ်ကို ပြောင်းလဲပေးပါသည်။ ယင်းကဲ့သို့ ထိန်းချုပ်သည့် အက္ခရာများ၏ အကူအညီဖြင့် စာသား၏ အစိတ်အပိုင်းအချို့ကို ဘယ်မှညာသို့ ပြသနိုင်ပြီး အချို့မှာ ညာဘက်မှ ဘယ်သို့ ပြသနိုင်သည်။ နေ့စဉ်လက်တွေ့တွင်၊ ဖိုင်တစ်ခုထဲသို့ ဟီးဘရူး သို့မဟုတ် အာရဗီဘာသာဖြင့် ကုဒ်လိုင်းများထည့်ရန်၊ ထိုကဲ့သို့သော ထိန်းချုပ်မှုအက္ခရာများကို အသုံးပြုနိုင်သည်။ သို့သော် သတ်မှတ်ထားသော စာလုံးများကို အသုံးပြု၍ စာကြောင်းတစ်ကြောင်းတွင် မတူညီသော စာသားလမ်းညွှန်များနှင့် မျဉ်းများကို ပေါင်းစပ်ပါက၊ ညာဘက်မှ ဘယ်ဘက်သို့ ပြသထားသော စာသားများ၏ စာပိုဒ်များသည် ဘယ်မှညာမှ ဖော်ပြထားသော ရှိပြီးသား ပုံမှန်စာသားများကို ထပ်နေနိုင်ပါသည်။

ဤနည်းလမ်းကို အသုံးပြုခြင်းဖြင့်၊ သင်သည် ကုဒ်တွင် အန္တရာယ်ရှိသော တည်ဆောက်မှုတစ်ခုကို ထည့်နိုင်သော်လည်း၊ ထို့နောက် အောက်ပါမှတ်ချက်တွင် ထည့်သွင်းခြင်းဖြင့် သို့မဟုတ် ညာဘက်မှဘယ်ဘက်တွင် ပြသထားသည့် စာလုံးများအတွင်းတွင် ကုဒ်ကိုကြည့်ရှုသည့်အခါတွင် ဤတည်ဆောက်ပုံဖြင့် မမြင်နိုင်သော စာသားကို ပြုလုပ်ပါ။ အန္တရာယ်ရှိသော ထည့်သွင်းမှုတွင် မတူညီသော ဇာတ်ကောင်များ ပေါင်းစပ်ထားသည်။ ထိုသို့သောကုဒ်သည် ဝေါဟာရအရ မှန်ကန်နေမည်ဖြစ်သော်လည်း အဓိပ္ပာယ်ဖွင့်ဆိုပုံနှင့် ကွဲပြားစွာဖော်ပြပါမည်။

ဆော့ဖ်ဝဲရေးသားသူမှမမြင်နိုင်သောကုဒ်ပြောင်းလဲမှုများကိုမိတ်ဆက်ရန် Trojan အရင်းအမြစ်တိုက်ခိုက်မှု

ကုဒ်ကို ပြန်လည်သုံးသပ်နေစဉ်၊ ဆော့ဖ်ဝဲရေးသားသူတစ်ဦးသည် ဇာတ်ကောင်များ၏ အမြင်ဆိုင်ရာ အစီအစဥ်ကို ရင်ဆိုင်ရမည်ဖြစ်ပြီး ခေတ်မီစာသားတည်းဖြတ်သူ၊ ဝဘ်အင်တာဖေ့စ် သို့မဟုတ် IDE တွင် သံသယဖြစ်ဖွယ်မရှိသောမှတ်ချက်ကို မြင်တွေ့ရမည်ဖြစ်ပြီး၊ သို့သော် compiler နှင့် interpreter သည် ဇာတ်ကောင်များ၏ ယုတ္တိကျသောအစီအစဥ်ကို အသုံးပြုမည်ဖြစ်သည်။ မှတ်ချက်များရှိ နှစ်လမ်းညွန်စာသားကို ဂရုမစိုက်ဘဲ အန္တရာယ်ရှိသော ထည့်သွင်းမှုကို လုပ်ဆောင်ပါ။ ပြဿနာသည် အမျိုးမျိုးသော နာမည်ကြီး ကုဒ်တည်းဖြတ်သူများ (VS Code၊ Emacs၊ Atom) အပြင် သိုလှောင်ရာနေရာများတွင် ကုဒ်ကိုကြည့်ရှုရန် အင်တာဖေ့စ်များ (GitHub၊ Gitlab၊ BitBucket နှင့် Atlassian ထုတ်ကုန်အားလုံး) တို့ကို သက်ရောက်မှုရှိသည်။

ဆော့ဖ်ဝဲရေးသားသူမှမမြင်နိုင်သောကုဒ်ပြောင်းလဲမှုများကိုမိတ်ဆက်ရန် Trojan အရင်းအမြစ်တိုက်ခိုက်မှု

အန္တရာယ်ရှိသော လုပ်ဆောင်ချက်များကို အကောင်အထည်ဖော်ရန် နည်းလမ်းများစွာကို အသုံးပြုရန် နည်းလမ်းများစွာ ရှိသည်- ဝှက်ထားသော “ပြန်ခြင်း” စကားရပ်ကို ထည့်သွင်းခြင်းဖြင့် အချိန်မတိုင်မီ လုပ်ဆောင်မှုကို ပြီးမြောက်စေပါသည်။ ပုံမှန်အားဖြင့် မှန်ကန်သော တည်ဆောက်မှုများအဖြစ် မြင်နိုင်စေမည့် စကားရပ်များကို မှတ်ချက်ပေးခြင်း (ဥပမာ၊ အရေးကြီးသော စစ်ဆေးမှုများကို ပိတ်ရန်) string validation ကျရှုံးမှုကိုဖြစ်စေသောအခြား string values ​​များကိုသတ်မှတ်ပေးခြင်း။

ဥပမာအားဖြင့်၊ အကယ်၍ တိုက်ခိုက်သူသည် လိုင်းပါဝင်သော အပြောင်းအလဲတစ်ခုကို အဆိုပြုနိုင်သည်- အကယ်၍ access_level != "အသုံးပြုသူ{U+202E} {U+2066}// စီမံခန့်ခွဲသူရှိမရှိ စစ်ဆေးပါ{U+2069} {U+2066}" {

access_level != “user” { // admin ရှိမရှိ စစ်ဆေးပါ။

ထို့အပြင်၊ အခြားသော တိုက်ခိုက်မှုမျိုးကွဲ (CVE-2021-42694) ကို အဆိုပြုထားပါသည် (CVE-XNUMX-XNUMX)၊ ပုံပန်းသဏ္ဌာန်တူသော အက္ခရာများ၊ အဓိပ္ပါယ်ချင်း ကွဲပြားသော်လည်း မတူညီသော ယူနီကုဒ် ကုဒ်များ ပါရှိသည် (ဥပမာ၊ စာလုံး “ɑ” နှင့် ဆင်တူသည်။ a", "ɡ" - "g", "ɩ" - "l")။ ဆော့ဖ်ဝဲရေးသားသူများကို လှည့်စားရန် လုပ်ဆောင်ချက်များနှင့် ကိန်းရှင်များကို အချို့ဘာသာစကားများတွင် အလားတူအက္ခရာများကို အသုံးပြုနိုင်သည်။ ဥပမာအားဖြင့်၊ ခွဲခြား၍မရသော အမည်များပါသည့် လုပ်ဆောင်ချက်နှစ်ခုကို မတူညီသော လုပ်ဆောင်ချက်များကို လုပ်ဆောင်ရန် သတ်မှတ်နိုင်သည်။ အသေးစိတ် ခွဲခြမ်းစိတ်ဖြာခြင်းမရှိဘဲ၊ ဤလုပ်ဆောင်ချက်နှစ်ခုမှ မည်သည့်အရာကို သီးခြားနေရာတစ်ခုတွင် ခေါ်ဝေါ်သည်ကို ချက်ချင်းမသိနိုင်ပါ။

ဆော့ဖ်ဝဲရေးသားသူမှမမြင်နိုင်သောကုဒ်ပြောင်းလဲမှုများကိုမိတ်ဆက်ရန် Trojan အရင်းအမြစ်တိုက်ခိုက်မှု

လုံခြုံရေးအစီအမံအနေဖြင့်၊ ယူနီကုဒ်အက္ခရာများကို ပံ့ပိုးပေးသည့် စုစည်းသူများ၊ စကားပြန်များနှင့် စုစည်းမှုကိရိယာများသည် မှတ်ချက်များ၊ စာတန်းအက္ခရာများ သို့မဟုတ် အထွက်၏ ဦးတည်ချက်ကို ပြောင်းလဲစေသော အတွဲလိုက်ထိန်းချုပ်မှုအက္ခရာများပါရှိပါက အမှား သို့မဟုတ် သတိပေးချက်ပြသရန် အကြံပြုထားသည် (U+202A၊ U+202B၊ U +202C၊ U+202D၊ U+202E၊ U+2066၊ U+2067၊ U+2068၊ U+2069၊ U+061C၊ U+200E နှင့် U+200F)။ ထိုကဲ့သို့သော အက္ခရာများကို ပရိုဂရမ်းမင်းဘာသာစကား သတ်မှတ်ချက်များတွင် အတိအလင်း တားမြစ်ထားသင့်ပြီး ကုဒ်တည်းဖြတ်သူများနှင့် သိမ်းဆည်းခံ အင်တာဖေ့စ်များတွင် လေးစားသင့်သည်။

နောက်ဆက်တွဲ 1- GCC၊ LLVM/Clang၊ Rust၊ Go၊ Python နှင့် binutils အတွက် အားနည်းချက် ပြင်ဆင်မှုများ ပြုလုပ်ထားပါသည်။ GitHub၊ Bitbucket နှင့် Jira တို့က အဆိုပါပြဿနာကို ဖြေရှင်းပေးခဲ့သည်။ GitLab အတွက် ပြင်ဆင်မှု လုပ်ဆောင်နေပါသည်။ ပြဿနာရှိသောကုဒ်ကို ခွဲခြားသတ်မှတ်ရန်၊ grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068E\u2069F\uXNUMXA\uXNUMXB\uXNUMXD\uXNUMXE\uXNUMX\uXNUMX\uXNUMX\uXNUMX/'] အရင်းအမြစ်

နောက်ဆက်တွဲ 2- Plan 9 OS နှင့် Go ပရိုဂရမ်းမင်းဘာသာစကား၏ developer များထဲမှတစ်ဦးဖြစ်သော Russ Cox သည် ကြာမြင့်စွာလူသိများခဲ့သော (Go, Rust, C++, Ruby) တွင်ဖော်ပြထားသော တိုက်ခိုက်ရေးနည်းလမ်းကို အလွန်အကျွံအာရုံစိုက်ခြင်းကို ဝေဖန်ခဲ့ပြီး အလေးအနက်မထားခဲ့ပါ။ . Cox ၏ အဆိုအရ ပြဿနာမှာ မှန်ကန်သော ကိရိယာများနှင့် ကုဒ်ခွဲခြမ်းစိတ်ဖြာသူများ အသုံးပြုခြင်းဖြင့် ဖြေရှင်းနိုင်သော ကုဒ်တည်းဖြတ်သူများနှင့် ဝဘ်အင်တာဖေ့စ်များတွင် မှန်ကန်သော သတင်းအချက်အလက်ပြသမှုကို အဓိကအားဖြင့် သက်ဆိုင်ပါသည်။ ထို့ကြောင့်၊ မှန်းဆတိုက်ခိုက်မှုများကို အာရုံစိုက်မည့်အစား၊ ကုဒ်နှင့် မှီခိုမှုပြန်လည်သုံးသပ်ခြင်းလုပ်ငန်းစဉ်များကို ပိုမိုကောင်းမွန်လာစေရန် အာရုံစိုက်ခြင်းသည် ပို၍သင့်လျော်မည်ဖြစ်သည်။

Ras Cox သည် compiler များသည် ပြဿနာကို ဖြေရှင်းရန် မှန်ကန်သောနေရာမဟုတ်ကြောင်း ယုံကြည်သည်၊ အဘယ်ကြောင့်ဆိုသော် compiler အဆင့်တွင် အန္တရာယ်ရှိသော သင်္ကေတများကို တားမြစ်ခြင်းဖြင့်၊ ဤသင်္ကေတများကို အသုံးပြုခြင်းမှာ လက်ခံနိုင်ဖွယ်ရှိဆဲဖြစ်သည့် build systems များ၊ assemblers များကဲ့သို့သော ကိရိယာများစွာ ကျန်ရှိနေဆဲဖြစ်သည်။ ပက်ကေ့ဂျ်မန်နေဂျာများနှင့် အမျိုးမျိုးသော ဖွဲ့စည်းမှုဆိုင်ရာ ခွဲခြမ်းစိတ်ဖြာမှုများနှင့် ဒေတာ။ ဥပမာအနေဖြင့်၊ Compiler တွင် LTR/RTL ကုဒ်လုပ်ဆောင်ခြင်းကို တားမြစ်ထားသည့် Rust ပရောဂျက်ကို ပေးထားသော်လည်း Cargo.toml ဖိုင်မှတစ်ဆင့် အလားတူတိုက်ခိုက်မှုကို ခွင့်ပြုသည့် Cargo package manager သို့ ပြုပြင်မွမ်းမံထားခြင်းမရှိပေ။ အလားတူ၊ BUILD.bazel၊ CMakefile၊ Cargo.toml၊ Dockerfile၊ GNUmakefile၊ Makefile၊ go.mod၊ package.json၊ pom.xml နှင့် requirement.txt ကဲ့သို့သော ဖိုင်များသည် တိုက်ခိုက်မှုများ၏ အရင်းအမြစ်များ ဖြစ်လာနိုင်သည်။

source: opennet.ru

မှတ်ချက် Add