木馬源,允許添加開發人員不可見的代碼更改的攻擊

幾天前 劍橋大學研究人員發布 出版 一種巧妙地替換代碼的技術 應用程序源代碼中存在惡意。

攻擊方法準備好了 它已在 CVE-2021-42574 下列出 它以 Trojan Source 的名稱命名,基於與編譯器/解釋器和查看代碼的人不同的文本格式。

關於木馬源

方法 依賴於在代碼註釋中應用特殊的 Unicode 字符,改變雙向文本的顯示順序。 在這些控製字符的幫助下, 文本的某些部分可以從左到右顯示,而其他部分從右到左顯示.

在日常實踐中,可以使用這些控製字符,例如,將希伯來語或阿拉伯語字符串插入到代碼文件中。 但是,如果您使用這些字符將具有不同文本方向的行組合在同一行上,則從右到左顯示的文本段落可能會與從左到右顯示的現有普通文本重疊。

用這種方法 可以將惡意構造添加到代碼中, 但是然後在查看代碼時使具有這種結構的文本不可見,在下一個註釋或文字內部添加從右到左顯示的字符,這將導致惡意插入的完全不同的字符疊加的結果。 這樣的代碼在語義上仍然是正確的,但會以不同的方式解釋和顯示。

我們發現了操縱源代碼文件編碼的方法,以便人類查看者和編譯器看到不同的邏輯。 一種特別有害的方法使用 Unicode 方向覆蓋字符將代碼顯示為其真實邏輯的字謎。 我們已經證實這種攻擊適用於 C、C++、C#、JavaScript、Java、Rust、Go 和 Python,並且我們懷疑它適用於大多數其他現代語言。

在審查代碼時, 開發者將面臨角色的視覺順序,並會在編輯器中看到可疑的評論 文本、Web 界面或 IDE, 但是編譯器和解釋器會使用字符的邏輯順序來處理惡意代碼 照原樣,不管註釋中的雙向文本如何。 幾個流行的代碼編輯器(VS Code、Emacs、Atom)以及用於查看存儲庫中代碼的界面(GitHub、Gitlab、BitBucket 和所有 Atlassian 產品)都受到影響。

使用該方法實現惡意行為的方式有以下幾種:添加隱藏的“return”表達式,導致函數提前終止; 通常被認為是有效構造的表達式的註釋中的結論(例如,禁用重要檢查); 分配其他字符串值導致字符串驗證失敗。

另外, 提出了另一種攻擊選項(CVE-2021-42694),它涉及使用同形文字, 外觀相似但含義不同且具有不同 Unicode 代碼的符號。 這些字符可以在某些語言中用於函數和變量名稱中以誤導開發人員。 例如,您可以定義兩個具有不可區分名稱的函數來執行不同的操作。 如果沒有詳細的分析,您無法立即了解在特定位置調用了這兩個函數中的哪一個。

作為保護措施, 建議在支持Unicode字符的編譯器、解釋器和彙編工具中實現,顯示錯誤或警告 註釋、字符串文字或標識符中是否有不成對的控製字符會改變輸出方向。 這些字符也必須在編程語言規範中明確禁止,並且必須在代碼編輯器和用於存儲庫的界面中考慮在內。

除此之外 漏洞已經開始修復 為 GCC、LLVM/Clang、Rust、Go、Python 和 binutils 準備。 GitHub、Bitbucket 和 Jira 也已經與 GitLab 一起準備解決方案。

終於 如果您有興趣了解更多信息, 你可以諮詢 以下鏈接中的詳細信息。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。