木馬病毒入侵方式(木馬攻擊的實質是什麼)

儘管木馬源攻擊的通用漏洞評分高達 9.8,但企業完全沒必要驚慌失措。

劍橋大學研究人員發現的木馬源(Trojan Source)攻擊會誘使編譯器讀取隱藏的 Unicode 字元,並生成帶有開發人員或安全分析師不知道的額外指令和後門的二進位制檔案。由於預設情況下特殊字元不可見,因此在程式碼審查期間難以發現惡意程式碼。

利用 Unicode 顯示文字方式的攻擊並不新鮮,但 “木馬源” 更具威脅的原因是從公共站點(例如 StackOverflow、GitHub 和其他社羣論壇)複製和貼上的大量程式碼會直接進入原始碼檔案。如果有問題的 Unicode 字元隱藏在檔案中,這些字元也會被複制進來。

nVisium 高階應用程式顧問 Jon Gaines 表示:“這對原始碼審查的能力是一次考驗,當下建議暫時不要複製和貼上程式碼,最好是自己重寫一遍。”

方法一:“顯影” Unicode 字元

開發人員可以通過啟用他們正在使用的 IDE 或文字編輯器來顯示 Unicode 字元,從而檢測潛在的惡意 Unicode 字元。或者可以使用命令列十六進位制編輯器,例如 HexEd.It,在檔案中搜尋特定的 Unicode 字元。

一些主要的原始碼控制平臺已經做出迴應:GitHub、GitLab 和 Atlassian(用於 BitBucket)已經發布了針對 Unicode BiDi 字元的警報 (CVE-2021-42574)。

對於容易遭受木馬源攻擊的文字編輯器 Visual Studio Code ,一種可行的方法是將編碼轉換為非 unicode。JFrog 安全研究高階主管 Shachar Menashe 表示,這會將惡意的 Unicode 字元(對於 BiDi 字元)標記為損壞字元,在手動程式碼審查期間可以發現這些損壞的字元。

這是在 Visual Studio Code 中進行轉換後 Unicode BiDi 的樣子:

有些同形文字很難與合法字元區分開來。這是在 Visual Studio Code 中進行轉換後這些字元的顯示方式:

Visual Studio、Notepad 和 Sublime Text 實際上不受 BiDi 字元的影響,因為該行要麼被破壞,要麼整行顯示為註釋:

方法二:過濾字元

Menashe 認為木馬源攻擊方法的威脅 “在現實世界中影響有限”,因為常規原始碼通常不包含研究人員列舉的特殊 Unicode 字元(BiDi 和同形文字)。它們 “很容易被檢測到、發出警報,甚至可能會自動過濾掉”。

下面的 Linux 命令可以警告或刪除單個原始碼檔案中的所有 Unicode 字元:

  • Alert:iconv-f utf-8 -t ascii input.cpp
  • Strip:iconv-c -f utf-8-t ascii input.cpp-o filtered_output.cpp

或者,此 Linux 命令將檢查檔案列表並標記找到特殊字元的例項:

for file in filelist;do hexdump-C “$file”|grep RTLcharacters;done

以下命令不僅可以發出警報,還可以僅從單個程式碼檔案中刪除木馬源攻擊針對的特定字元。

例如以下這兩個 Linux 命令去除了 Unicode BiDi 字元 CVE-2021-42574):

  1. CHARS=$(python-c'print u"/u202A/u202B/u202D/u202E/u2066/u2067/u2068/u202C/u2069".encode("utf8")')
  2. sed's/['"$CHARS"']//g'filtered_output.cpp

對於 Unicode Homoglyph 字元 (CVE-2021-42694),這兩個命令生成了僅用於剝離西裡爾字母同形文字的部分列表:

  • CHARS=$(python-c'print u"/u0405/u0406/u0408/u0410/u0412/u0415/u0417/u041D/u0420/u0421/u0422/u0425/u0430/u0440/u0441/u0443/u0445/u0455/u04AE/u04BB/u04C0".encode("utf8")')
  • lsed 's/['"$CHARS"']//g'< /tmp/utf8_input.txt>/tmp/ascii_output.txt

方法三:更新工具

為編譯器安裝更新,這樣可阻止木馬源攻擊。在應用得到更新前,自動檢測和清理檔案的命令也可以緩解這些問題。雖然可以在更改文字編輯器設定後執行手動原始碼稽覈以查詢這些特殊字元,但這將是 “處理此問題的最糟糕方法”,Menashe 指出,因為某些字元在某些情況下來自合法的拉丁字元。

“最好的解決方案是執行自動化工具來標記和 / 或刪除這些字元,”Menashe 說道。

在擁有大型程式碼庫的組織中,對檔案的單獨審計很難大面積開展。Red Hat 釋出了一個簡單的 Python 指令碼(
   https://access.redhat.com/sec...)來識別整個程式碼庫中的潛在問題。該指令碼可以整合到持續整合 / 持續交付工作流中,或者作為預提交檢查新增,以確保惡意程式碼不會進入生產環境。

Rapid7 的首席安全資料科學家 Bob Rudis 還推薦了一個簡單的緩解措施:“如果你只用英語或只用阿拉伯語編寫程式碼,則可禁止在程式碼庫中使用 BiDi 指令”。

儘管木馬源攻擊的通用漏洞評分高達 9.8,但企業沒必要驚慌失措。Rudis 認為 9.8 分顯然是 “誇大了”,因為實施木馬源攻擊需要攻擊者直接訪問開發人員的工作站、原始碼管理系統或持續整合管道。

“如果攻擊者可以直接訪問你的原始碼管理系統,坦率地說,你可能會遇到比這次攻擊更大的問題。”Rudis 說:“我們建議在擔心需要本地或物理訪問的原始碼級攻擊之前,優先考慮真正關鍵的補丁並防止服務和系統暴露。”