ለገንቢው የማይታዩ ለውጦችን ለማስተዋወቅ የትሮጃን ምንጭ ጥቃት

የካምብሪጅ ዩኒቨርሲቲ ተመራማሪዎች ተንኮል-አዘል ኮድን በአቻ በተገመገመ ምንጭ ኮድ ውስጥ የማስገባት ዘዴን አሳትመዋል። የተዘጋጀው የጥቃት ዘዴ (CVE-2021-42574) ትሮጃን ምንጭ በሚለው ስም የቀረበ ሲሆን በአቀናባሪ/ተርጓሚው እና በኮዱ ላይ ለሚመለከተው ሰው የተለየ የሚመስል የፅሁፍ አሰራር መሰረት ያደረገ ነው። የስልቱ ምሳሌዎች ለተለያዩ አቀናባሪዎች እና ተርጓሚዎች ለ C፣ C++ (gcc and clang)፣ C#፣ JavaScript (Node.js)፣ Java (OpenJDK 16)፣ Rust፣ Go እና Python ተሰጥተዋል።

ዘዴው በኮድ አስተያየቶች ውስጥ ልዩ የዩኒኮድ ቁምፊዎችን በመጠቀም የሁለት አቅጣጫ ጽሑፍን የማሳያ ቅደም ተከተል ይለውጣል. በእንደዚህ አይነት የቁጥጥር ቁምፊዎች እገዛ, አንዳንድ የጽሑፉ ክፍሎች ከግራ ወደ ቀኝ ሊታዩ ይችላሉ, ሌሎች ደግሞ - ከቀኝ ወደ ግራ. በዕለት ተዕለት ልምምድ, እንደዚህ ያሉ የቁጥጥር ቁምፊዎችን መጠቀም ይቻላል, ለምሳሌ, በዕብራይስጥ ወይም በአረብኛ የኮድ መስመሮችን በፋይል ውስጥ ለማስገባት. ነገር ግን መስመሮችን ከተለያዩ የጽሑፍ አቅጣጫዎች ጋር በአንድ መስመር ካዋህዱ፣ የተገለጹትን ቁምፊዎች በመጠቀም፣ ከቀኝ ወደ ግራ የሚታየው የጽሑፍ ምንባቦች ከግራ ወደ ቀኝ የሚታየውን መደበኛ ጽሑፍ መደራረብ ይችላሉ።

ይህንን ዘዴ በመጠቀም በኮዱ ላይ ተንኮል-አዘል ግንባታ ማከል ይችላሉ ፣ ግን ከዚህ ግንባታ ጋር ያለው ጽሑፍ ኮዱን በሚመለከቱበት ጊዜ የማይታይ ያድርጉት ፣ በሚከተለው አስተያየት ላይ በመጨመር ወይም ከቀኝ ወደ ግራ በሚታዩ ቀጥተኛ ቁምፊዎች ውስጥ ወደ ሙሉ በሙሉ ይመራሉ ። በተንኮል አዘል ማስገባት ላይ የተለያዩ ቁምፊዎች ተጭነዋል። እንዲህ ዓይነቱ ኮድ በትርጉም ደረጃ ትክክል ሆኖ ይቆያል፣ ግን ይተረጎማል እና በተለየ መንገድ ይታያል።

ለገንቢው የማይታዩ ለውጦችን ለማስተዋወቅ የትሮጃን ምንጭ ጥቃት

ኮድን በሚገመግሙበት ጊዜ አንድ ገንቢ ከገጸ ባህሪያቱ ምስላዊ ቅደም ተከተል ጋር ይጋፈጣል እና በዘመናዊ የጽሁፍ አርታኢ፣ ድር በይነገጽ ወይም አይዲኢ ላይ አጠራጣሪ ያልሆነ አስተያየት ያያሉ፣ ነገር ግን አቀናባሪ እና ተርጓሚው የገጸ ባህሪያቱን አመክንዮአዊ ቅደም ተከተል ይጠቀማሉ እና ያደርጋል። በአስተያየቶቹ ውስጥ ላለው ባለሁለት አቅጣጫ ጽሑፍ ትኩረት ሳያደርጉ ተንኮል-አዘል ማስገባትን እንደዚያው ያካሂዱ። ችግሩ በተለያዩ ታዋቂ የኮድ አርታዒዎች (VS Code፣ Emacs፣ Atom)፣ እንዲሁም በማጠራቀሚያዎች (GitHub፣ Gitlab፣ BitBucket እና ሁሉም የአትላሲያን ምርቶች) ውስጥ ኮድን ለማየት በይነገጾች ላይ ተጽእኖ ይኖረዋል።

ለገንቢው የማይታዩ ለውጦችን ለማስተዋወቅ የትሮጃን ምንጭ ጥቃት

ተንኮል አዘል ድርጊቶችን ለመተግበር ዘዴውን ለመጠቀም ብዙ መንገዶች አሉ-የተደበቀ "መመለሻ" አገላለጽ መጨመር, ይህም ቀደም ብሎ ተግባሩን ወደ ማጠናቀቅ ያመራል; እንደ ትክክለኛ ግንባታዎች በመደበኛነት የሚታዩ አገላለጾችን አስተያየት መስጠት (ለምሳሌ አስፈላጊ ቼኮችን ለማሰናከል)። ወደ ሕብረቁምፊ ማረጋገጫ ውድቀቶች የሚመሩ ሌሎች የሕብረቁምፊ እሴቶችን መመደብ።

ለምሳሌ፣ አንድ አጥቂ መስመሩን የሚያካትት ለውጥ ሊያቀርብ ይችላል፡ access_level != "ተጠቃሚ{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፡ የተጋላጭነት መጠገኛዎች ለጂሲሲ፣ LLVM/Clang፣ Rust፣ Go፣ Python እና binutils ተዘጋጅተዋል። GitHub፣ Bitbucket እና Jira እንዲሁም ችግሩን አስተካክለዋል። ለ GitLab ማስተካከያ በሂደት ላይ ነው። ችግር ያለበትን ኮድ ለመለየት፡ grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E ምንጭ

ተጨማሪ ቁጥር 2፡ የፕላን 9 ስርዓተ ክወና እና የ Go ፕሮግራሚንግ ቋንቋ አዘጋጆች አንዱ የሆነው ሩስ ኮክስ ለተገለጸው የጥቃት ዘዴ ከመጠን ያለፈ ትኩረትን ተችቷል ይህም ለረጅም ጊዜ ይታወቅ የነበረው (Go, Rust, C ++, Ruby) እና በቁም ነገር አልተወሰደም. . እንደ ኮክስ ገለፃ ችግሩ በዋናነት በኮድ አርታኢዎች እና በድር በይነገጽ ላይ ትክክለኛ የመረጃ ማሳያን ይመለከታል ፣ይህም በግምገማ ወቅት ትክክለኛ መሳሪያዎችን እና የኮድ ተንታኞችን በመጠቀም ሊፈታ ይችላል። ስለዚህ, ወደ ግምታዊ ጥቃቶች ትኩረትን ከመሳብ ይልቅ, ኮድ እና የጥገኝነት ግምገማ ሂደቶችን ማሻሻል ላይ ማተኮር የበለጠ ተገቢ ይሆናል.

ራስ ኮክስ በተጨማሪም ኮምፕሌተሮች ችግሩን ለማስተካከል ትክክለኛው ቦታ እንዳልሆኑ ያምናል, ምክንያቱም አደገኛ ምልክቶችን በአቀነባባሪው ደረጃ በመከልከል, የእነዚህ ምልክቶች አጠቃቀም ተቀባይነት ያለው ሆኖ የሚቆይበት ትልቅ የመሳሪያ ሽፋን ይኖራል, ለምሳሌ የግንባታ ስርዓቶች, ተሰብሳቢዎች, ወዘተ. የጥቅል አስተዳዳሪዎች እና የተለያዩ የውቅረት ተንታኞች እና ውሂብ። እንደ ምሳሌ ፣ የ Rust ፕሮጀክት ተሰጥቷል ፣ ይህም የ LTR/RTL ኮድ በአቀናባሪው ውስጥ እንዳይሰራ ይከለክላል ፣ ግን በካርጎ ፓኬጅ አስተዳዳሪ ላይ ማስተካከያ አልጨመረም ፣ ይህም በCargo.toml ፋይል በኩል ተመሳሳይ ጥቃትን ይፈቅዳል። በተመሳሳይ፣ እንደ BUILD.bazel፣ CMakefile፣ Cargo.toml፣ Dockerfile፣ GNUmakefile፣ Makefile፣ go.mod፣ package.json፣ pom.xml እና መስፈርቶች.txt ያሉ ፋይሎች የጥቃት ምንጮች ሊሆኑ ይችላሉ።

ምንጭ: opennet.ru

አስተያየት ያክሉ