ٽروجن ماخذ حملو ڪوڊ ۾ تبديليون متعارف ڪرائڻ لاءِ جيڪي ڊولپر کي پوشيده آهن

ڪيمبرج يونيورسٽي جي محققن هڪ ٽيڪنڪ شايع ڪئي آهي خاموشي سان بدسلوڪي ڪوڊ داخل ڪرڻ لاءِ پير جي نظرثاني ٿيل سورس ڪوڊ ۾. تيار ڪيل حملي جو طريقو (CVE-2021-42574) ٽروجن ماخذ جي نالي هيٺ پيش ڪيو ويو آهي ۽ متن جي ٺهڻ تي ٻڌل آهي جيڪو مرتب ڪندڙ/مترجم ۽ ڪوڊ کي ڏسڻ واري شخص لاءِ مختلف نظر اچي ٿو. طريقن جا مثال C, C++ (gcc ۽ clang)، C#، JavaScript (Node.js)، Java (OpenJDK 16)، Rust، Go ۽ Python لاءِ مهيا ڪيل مختلف مرتب ڪندڙ ۽ ترجمانن لاءِ ڏيکاريا ويا آهن.

طريقو ڪوڊ تبصرن ۾ خاص يونيڪوڊ اکرن جي استعمال تي مبني آهي جيڪي ٻه طرفي متن جي ڊسپلي آرڊر کي تبديل ڪن ٿا. اهڙن ڪنٽرول ڪردارن جي مدد سان، متن جا ڪجهه حصا کاٻي کان ساڄي طرف ڏيکاري سگهجن ٿا، جڏهن ته ٻيا - ساڄي کان کاٻي پاسي. روزمره جي مشق ۾، اهڙا ڪنٽرول اکر استعمال ڪري سگھجن ٿا، مثال طور، عبراني يا عربي ۾ ڪوڊ لائينون فائل ۾ داخل ڪرڻ لاءِ. پر جيڪڏهن توهان هڪ لڪير ۾ مختلف متن جي هدايتن سان لائينون گڏ ڪريو، مخصوص اکر استعمال ڪندي، ساڄي کان کاٻي طرف ڏيکاريل متن جا پاسا کاٻي کان ساڄي طرف ڏيکاريل موجوده باقاعده متن کي اوورليپ ڪري سگھن ٿا.

هن طريقي کي استعمال ڪندي، توهان ڪوڊ ۾ هڪ خراب تعمير شامل ڪري سگهو ٿا، پر پوء ڪوڊ کي ڏسڻ دوران، هيٺ ڏنل تبصري ۾ يا ساڄي کان کاٻي طرف ڏيکاريل لفظي اکرن کي شامل ڪندي، هن تعمير سان متن کي پوشيده ڪريو، جيڪو مڪمل طور تي ليڊ ٿيندو. مختلف ڪردارن کي بدسلوڪي داخل ڪرڻ تي سپرد ڪيو پيو وڃي. اهڙو ڪوڊ لفظي طور تي صحيح رهندو، پر ان جي تشريح ڪئي ويندي ۽ مختلف نموني ڏيکاري ويندي.

ٽروجن ماخذ حملو ڪوڊ ۾ تبديليون متعارف ڪرائڻ لاءِ جيڪي ڊولپر کي پوشيده آهن

ڪوڊ جو جائزو وٺڻ دوران، هڪ ڊولپر کي ڪردارن جي بصري ترتيب سان منهن ڏيڻو پوندو ۽ جديد ٽيڪسٽ ايڊيٽر، ويب انٽرفيس يا IDE ۾ هڪ غير مشڪوڪ تبصرو ڏسڻ ۾ ايندو، پر مرتب ڪندڙ ۽ مترجم ڪردارن جي منطقي ترتيب کي استعمال ڪندو ۽ ڪندو. تبصرن ۾ ٻه طرفي متن تي ڌيان ڏيڻ کان سواءِ، بدڪاري داخل ڪرڻ تي عمل ڪريو. مسئلو مختلف مشهور ڪوڊ ايڊيٽرز (VS Code، Emacs، Atom) کي متاثر ڪري ٿو، انهي سان گڏ مخزن ۾ ڪوڊ ڏسڻ لاءِ انٽرفيس (GitHub، Gitlab، BitBucket ۽ سڀ Atlassian پراڊڪٽس).

ٽروجن ماخذ حملو ڪوڊ ۾ تبديليون متعارف ڪرائڻ لاءِ جيڪي ڊولپر کي پوشيده آهن

بدسلوڪي عملن کي لاڳو ڪرڻ لاء طريقا استعمال ڪرڻ جا ڪيترائي طريقا آهن: هڪ پوشیدہ "واپسي" اظهار شامل ڪرڻ، جيڪو وقت کان اڳ فنڪشن جي مڪمل ٿيڻ جي ڪري ٿي؛ تبصرو ڪرڻ جو اظهار جيڪي عام طور تي صحيح تعميرات طور نظر اچن ٿا (مثال طور، اهم چيڪن کي غير فعال ڪرڻ)؛ ٻين اسٽرنگ جي قيمتن کي تفويض ڪرڻ جيڪي اسٽرنگ جي تصديق جي ناڪامي کي ڏسندا آهن.

مثال طور، هڪ حملو ڪندڙ شايد تبديلي پيش ڪري ٿو جنهن ۾ لائن شامل آهي: if access_level != "user{U+202E} {U+2066}// چيڪ ڪريو ته ڇا منتظم{U+2069} {U+2066}" {

جيڪو نظرثاني واري انٽرفيس ۾ ڏيکاريو ويندو ڄڻڪ access_level != “صارف” { // چيڪ ڪريو ته منتظم

اضافي طور تي، هڪ ٻيو حملي واري قسم جي تجويز ڏني وئي آهي (CVE-2021-42694)، homoglyphs جي استعمال سان لاڳاپيل، ڪردار جيڪي ظاهر ۾ هڪجهڙا آهن، پر معني ۾ مختلف آهن ۽ مختلف يونيڪوڊ ڪوڊ آهن (مثال طور، ڪردار "ɑ" وانگر "ɑ" a"، "ɡ" - "g"، "ɩ" - "l"). ساڳيا اکر ڪجهه ٻولين ۾ افعال ۽ متغير جي نالن ۾ ڊولپرز کي گمراھ ڪرڻ لاءِ استعمال ڪري سگھجن ٿا. مثال طور، ٻه افعال جيڪي الڳ الڳ نالن سان بيان ڪري سگھن ٿا جيڪي مختلف ڪارناما انجام ڏين ٿا. تفصيلي تجزيي کان سواء، اهو فوري طور تي واضح ناهي ته انهن ٻن ڪمن مان ڪنهن خاص جڳهه ۾ سڏيو ويندو آهي.

ٽروجن ماخذ حملو ڪوڊ ۾ تبديليون متعارف ڪرائڻ لاءِ جيڪي ڊولپر کي پوشيده آهن

حفاظتي ماپ جي طور تي، اها سفارش ڪئي وئي آهي ته يونيڪوڊ اکرن کي سپورٽ ڪندڙ گڏ ڪرڻ وارا، مترجم، ۽ اسيمبليء جا اوزار جيڪي يونيڪوڊ اکرن کي سپورٽ ڪن ٿا، هڪ غلطي يا ڊيڄاريندڙ ڏيکاري ٿو جيڪڏهن تبصرن، اسٽرنگ لٽرلز، يا سڃاڻپ ڪندڙ جيڪي آئوٽ پٽ جي هدايت کي تبديل ڪن ٿا (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 ۽ جيرا پڻ مسئلو حل ڪيو. GitLab لاءِ هڪ اصلاح جاري آهي. مشڪلاتي ڪوڊ کي سڃاڻڻ لاء، اهو حڪم استعمال ڪرڻ جي صلاح ڏني وئي آهي: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069/to/' ذريعو

ضميمه 2: Russ Cox، پلان 9 OS ۽ Go پروگرامنگ ٻولي جي ڊولپرز مان هڪ، بيان ڪيل حملي واري طريقي تي وڌيڪ ڌيان ڏيڻ تي تنقيد ڪئي، جيڪو گهڻو وقت ڄاڻيو ويو آهي (Go، Rust، C++، Ruby) ۽ سنجيده نه ورتو ويو. . Cox جي مطابق، مسئلو بنيادي طور تي ڪوڊ ايڊيٽرن ۽ ويب انٽرفيس ۾ معلومات جي صحيح ڊسپلي جو خدشو آهي، جيڪو جائزو وٺڻ دوران صحيح اوزار ۽ ڪوڊ اينالائيزر استعمال ڪندي حل ڪري سگهجي ٿو. تنهن ڪري، قياس آرائي واري حملن ڏانهن ڌيان ڏيڻ بدران، ڪوڊ ۽ انحصار جي نظرثاني جي عمل کي بهتر ڪرڻ تي ڌيان ڏيڻ وڌيڪ مناسب هوندو.

راس ڪاڪس اهو به مڃي ٿو ته ڪمپلر درست جاءِ نه آهن مسئلو حل ڪرڻ لاءِ، ڇاڪاڻ ته مرتب ڪندڙ سطح تي خطرناڪ علامتن تي پابندي لڳائڻ سان، اوزارن جي هڪ وڏي پرت رهي ٿي، جنهن ۾ انهن علامتن جو استعمال قابل قبول رهي ٿو، جهڙوڪ بلڊ سسٽم، اسمبلرز، پيڪيج مينيجرز ۽ مختلف ترتيبن جا تجزيا ۽ ڊيٽا. مثال طور، Rust پروجيڪٽ ڏنو ويو آهي، جنهن ڪمپلر ۾ LTR/RTL ڪوڊ جي پروسيسنگ کي ممنوع قرار ڏنو، پر ڪارگو پيڪيج مئنيجر ۾ فيڪس شامل نه ڪيو، جيڪو Cargo.toml فائل ذريعي ساڳي حملي جي اجازت ڏئي ٿو. اهڙي طرح، فائلون جهڙوڪ BUILD.bazel، CMakefile، Cargo.toml، Dockerfile، GNUmakefile، Makefile، go.mod، package.json، pom.xml ۽ requirements.txt حملن جا ذريعا بڻجي سگهن ٿيون.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو