டெவலப்பர் கண்ணுக்கு தெரியாத குறியீட்டில் மாற்றங்களை அறிமுகப்படுத்த ட்ரோஜன் சோர்ஸ் தாக்குதல்

கேம்பிரிட்ஜ் பல்கலைக்கழக ஆராய்ச்சியாளர்கள், சக மதிப்பாய்வு செய்யப்பட்ட மூலக் குறியீட்டில் தீங்கிழைக்கும் குறியீட்டை அமைதியாகச் செருகுவதற்கான நுட்பத்தை வெளியிட்டுள்ளனர். தயாரிக்கப்பட்ட தாக்குதல் முறை (CVE-2021-42574) Trojan Source என்ற பெயரில் வழங்கப்படுகிறது மற்றும் தொகுப்பாளர்/பெயர்ப்பாளர் மற்றும் குறியீட்டைப் பார்க்கும் நபருக்கு வித்தியாசமாகத் தோன்றும் உரையின் உருவாக்கத்தை அடிப்படையாகக் கொண்டது. C, C++ (gcc மற்றும் clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go மற்றும் Python ஆகியவற்றிற்கு வழங்கப்படும் பல்வேறு கம்பைலர்கள் மற்றும் மொழிபெயர்ப்பாளர்களுக்கு இந்த முறையின் எடுத்துக்காட்டுகள் காட்டப்பட்டுள்ளன.

இருதரப்பு உரையின் காட்சி வரிசையை மாற்றும் குறியீடு கருத்துகளில் சிறப்பு யூனிகோட் எழுத்துக்களைப் பயன்படுத்துவதை அடிப்படையாகக் கொண்டது இந்த முறை. அத்தகைய கட்டுப்பாட்டு எழுத்துக்களின் உதவியுடன், உரையின் சில பகுதிகள் இடமிருந்து வலமாக காட்டப்படும், மற்றவை - வலமிருந்து இடமாக. அன்றாட நடைமுறையில், அத்தகைய கட்டுப்பாட்டு எழுத்துக்கள் பயன்படுத்தப்படலாம், உதாரணமாக, ஹீப்ரு அல்லது அரபு மொழியில் குறியீட்டு வரிகளை ஒரு கோப்பில் செருக. ஆனால் நீங்கள் ஒரு வரியில் வெவ்வேறு உரை திசைகளுடன் வரிகளை இணைத்தால், குறிப்பிட்ட எழுத்துக்களைப் பயன்படுத்தி, வலமிருந்து இடமாக காட்டப்படும் உரையின் பத்திகள், தற்போதுள்ள வழக்கமான உரையை இடமிருந்து வலமாக காட்டப்படும்.

இந்த முறையைப் பயன்படுத்தி, நீங்கள் குறியீட்டில் தீங்கிழைக்கும் கட்டமைப்பைச் சேர்க்கலாம், ஆனால் குறியீட்டைப் பார்க்கும்போது இந்தக் கட்டமைப்பைக் கொண்ட உரையை கண்ணுக்குத் தெரியாததாக மாற்றவும், பின்வரும் கருத்துரையில் அல்லது வலமிருந்து இடமாக காட்டப்படும் எழுத்துக்குறிகளை உள்ளே சேர்ப்பதன் மூலம், இது முற்றிலும் வழிவகுக்கும். தீங்கிழைக்கும் செருகலில் வெவ்வேறு எழுத்துக்கள் மிகைப்படுத்தப்படுகின்றன. அத்தகைய குறியீடு சொற்பொருள் சரியாக இருக்கும், ஆனால் வேறுவிதமாக விளக்கப்பட்டு காட்டப்படும்.

டெவலப்பர் கண்ணுக்கு தெரியாத குறியீட்டில் மாற்றங்களை அறிமுகப்படுத்த ட்ரோஜன் சோர்ஸ் தாக்குதல்

குறியீட்டை மதிப்பாய்வு செய்யும் போது, ​​ஒரு டெவலப்பர் எழுத்துகளின் காட்சி வரிசையை எதிர்கொள்வார் மற்றும் நவீன உரை எடிட்டர், இணைய இடைமுகம் அல்லது IDE இல் சந்தேகத்திற்கு இடமில்லாத கருத்தைக் காண்பார், ஆனால் தொகுப்பாளரும் மொழிபெயர்ப்பாளரும் எழுத்துகளின் தருக்க வரிசையைப் பயன்படுத்துவார்கள். கருத்துகளில் உள்ள இருதரப்பு உரைக்கு கவனம் செலுத்தாமல், தீங்கிழைக்கும் செருகலை அப்படியே செயல்படுத்தவும். சிக்கல் பல்வேறு பிரபலமான குறியீடு எடிட்டர்கள் (VS குறியீடு, ஈமாக்ஸ், ஆட்டம்), அத்துடன் களஞ்சியங்களில் (GitHub, Gitlab, BitBucket மற்றும் அனைத்து அட்லாசியன் தயாரிப்புகள்) குறியீட்டைப் பார்ப்பதற்கான இடைமுகங்களையும் பாதிக்கிறது.

டெவலப்பர் கண்ணுக்கு தெரியாத குறியீட்டில் மாற்றங்களை அறிமுகப்படுத்த ட்ரோஜன் சோர்ஸ் தாக்குதல்

தீங்கிழைக்கும் செயல்களைச் செயல்படுத்தும் முறையைப் பயன்படுத்துவதற்குப் பல வழிகள் உள்ளன: ஒரு மறைக்கப்பட்ட "திரும்ப" வெளிப்பாட்டைச் சேர்ப்பது, இது செயல்பாட்டை முன்கூட்டியே முடிக்க வழிவகுக்கிறது; பொதுவாக செல்லுபடியாகும் கட்டுமானங்களாகக் காணக்கூடிய வெளிப்பாடுகளை கருத்துரைத்தல் (எடுத்துக்காட்டாக, முக்கியமான காசோலைகளை முடக்க); சரம் சரிபார்ப்பு தோல்விகளுக்கு வழிவகுக்கும் பிற சரம் மதிப்புகளை ஒதுக்குதல்.

எடுத்துக்காட்டாக, அணுகல்_நிலை != "பயனர்{U+202E} {U+2066}// நிர்வாகி{U+2069} {U+2066} என்றால், இந்த வரியை உள்ளடக்கிய மாற்றத்தை தாக்குபவர் முன்மொழியலாம்" {

இது access_level என மதிப்பாய்வு இடைமுகத்தில் காட்டப்படும் != “பயனர்” { // நிர்வாகி என்பதைச் சரிபார்க்கவும்

கூடுதலாக, மற்றொரு தாக்குதல் மாறுபாடு முன்மொழியப்பட்டது (CVE-2021-42694), ஹோமோகிளிஃப்களின் பயன்பாட்டுடன் தொடர்புடையது, தோற்றத்தில் ஒத்த எழுத்துக்கள், ஆனால் அர்த்தத்தில் வேறுபடுகின்றன மற்றும் வெவ்வேறு யூனிகோட் குறியீடுகளைக் கொண்டுள்ளன (எடுத்துக்காட்டாக, "ɑ" என்ற எழுத்து "ஐ ஒத்திருக்கிறது. 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 மற்றும் Jira ஆகியவையும் சிக்கலைச் சரிசெய்தன. GitLab க்கான திருத்தம் செயலில் உள்ளது. சிக்கலான குறியீட்டை அடையாளம் காண, கட்டளையைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\uXNUMX]/ ஆதாரம்

சேர்க்கை 2: பிளான் 9 ஓஎஸ் மற்றும் கோ நிரலாக்க மொழியின் டெவலப்பர்களில் ஒருவரான ரஸ் காக்ஸ், விவரிக்கப்பட்ட தாக்குதல் முறைக்கு அதிக கவனம் செலுத்துவதை விமர்சித்தார், இது நீண்ட காலமாக அறியப்படுகிறது (கோ, ரஸ்ட், சி++, ரூபி) மற்றும் பெரிதாக எடுத்துக்கொள்ளப்படவில்லை. . காக்ஸின் கூற்றுப்படி, சிக்கல் முக்கியமாக குறியீட்டு எடிட்டர்கள் மற்றும் இணைய இடைமுகங்களில் தகவலை சரியாகக் காண்பிப்பதைப் பற்றியது, மதிப்பாய்வின் போது சரியான கருவிகள் மற்றும் குறியீடு பகுப்பாய்விகளைப் பயன்படுத்தி தீர்க்க முடியும். எனவே, ஊக தாக்குதல்களுக்கு கவனம் செலுத்துவதற்கு பதிலாக, குறியீடு மற்றும் சார்பு மதிப்பாய்வு செயல்முறைகளை மேம்படுத்துவதில் கவனம் செலுத்துவது மிகவும் பொருத்தமானதாக இருக்கும்.

கம்பைலர் மட்டத்தில் ஆபத்தான சின்னங்களைத் தடை செய்வதன் மூலம், கம்பைலர்கள் சரியான இடம் அல்ல என்று ராஸ் காக்ஸ் நம்புகிறார், ஏனெனில், கம்பைலர் மட்டத்தில் ஆபத்தான சின்னங்களைத் தடை செய்வதன் மூலம், இந்த சின்னங்களின் பயன்பாடு ஏற்றுக்கொள்ளத்தக்கதாக இருக்கும் கருவிகளின் ஒரு பெரிய அடுக்கு உள்ளது, அதாவது உருவாக்க அமைப்புகள், அசெம்பிளர்கள், தொகுப்பு மேலாளர்கள் மற்றும் பல்வேறு கட்டமைப்பு பாகுபடுத்திகள் மற்றும் தரவு. உதாரணமாக, ரஸ்ட் திட்டம் கொடுக்கப்பட்டுள்ளது, இது கம்பைலரில் எல்டிஆர்/ஆர்டிஎல் குறியீட்டை செயலாக்குவதைத் தடைசெய்தது, ஆனால் கார்கோ பேக்கேஜ் மேலாளரிடம் ஒரு தீர்வைச் சேர்க்கவில்லை, இது Cargo.toml கோப்பு மூலம் இதேபோன்ற தாக்குதலை அனுமதிக்கிறது. இதேபோல், BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml மற்றும் requirements.txt போன்ற கோப்புகள் தாக்குதல்களின் ஆதாரங்களாக மாறலாம்.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்