GSS資安電子報0198期【簡單的複製貼上就可能產生資安危機!!!來看看木馬程式是如何潛入你的程式碼中?】

2022-07-12 09:00
翻譯及整理:叡揚資訊 資訊安全事業處
 

   2021年11月初,劍橋大學發佈了名為「Trojan-source」的研究。這項研究的重點是如何利用定向格式化字元(directional formatting characters)將後門隱藏在程式碼與註解中,使程式碼被惡意編碼,而編輯器對這些程式碼的邏輯判斷解釋與人工審查程式碼的解讀方式不同。

  這是一個新的漏洞,儘管Unicode在過去曾被惡意使用,例如「reversing the direction of the last part of a filename」,意即反轉文件檔名的最後一部份,來隱藏該文件的真實名稱。最近的研究顯示,許多編輯器會在沒有警告的情況下,忽略程式碼中的Unicode字元,而文本編輯器(包括程式編輯器)亦可能在這個基礎上重新排列包含註解及程式碼的順序。因此,編輯器可能會以不同的方式顯示程式碼與註解,並以不同的順序呈現編輯器如何解析它——甚至將程式碼與注釋進行互換。

[ 即日起至 8/1 報名安全達人養成計畫 暨資安戰士挑戰賽,可獲得叡揚獨家授權安全程式學習平台帳號 ]

Bidirectional text 雙向文本

  其中一種木馬程式源的攻擊,是利用了Unicode Bidi算法,將顯示順序不同的文本放在一起,如英語(從左到右)和阿拉伯語(從右到左)。定向格式化字元可以用來重新組織分組和顯示字元的順序。

198.1

  由上表可看到一些運用Bidi 覆蓋字元進行攻擊的例子,舉例如下:

  RLI e d o c PDI

  縮寫 RLI 是指從右到左進行區隔,它將本文與其上下文以 Pop-Direction-Isolate (PDI) 隔開,並從右到左進行閱讀,使得結果如下:

  c o d e

  然而,編輯器與直譯器在解析程式碼之前,通常不會處理格式化控制字元,包括 Bidi overrides,因此,如果他們忽略定向格式化字元,他們將會解析成下方所示:

  e d o c

新瓶裝舊酒?

  當然,這並非什麼新鮮事,過往在檔名中插入定向格式化字元,以掩蓋其惡意的性質。如果不是因為出現了RLO(從右到左的區隔)字元,顯示了真正的名稱是「myspecialcod.exe」,否則顯示為「myspecialexe.doc」的電子郵件附件看起來似乎沒有問題。

  木馬程式碼攻擊那些在程式中已存在的註解與字元串,並在其中插入定向格式化字元,因為這些不會產生任何語法或編譯的錯誤。這些控制字元改變了程式的邏輯顯示順序,導致編輯器讀取的內容與人工解讀時完全不同。例如,依順序呈現字元的文件:

198.2

  若加入了定向格式化字元,重新排序如下:

198.3

  如果沒有明確的使用定向格式化字元,將導致程式碼被更改為下列的樣子:

198.4

  而且在最後一行,RLO將註解的結尾符號「 */ 」更改為「 { 」,反之亦然。如此更改的結果將變成「你是一位管理員」,而管理員檢查被註解掉了,但控制字元卻讓人覺得它還存在。

  資料來源:https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx

這將對你產生什麼影響?

  許多語言都容易受到這種攻擊,例如:C、C++、C#、JavaScript、Java、Rust、Go以及Python,甚至更多。現在,一般的開發人員看到程式碼中的定向格式化字元或許會皺眉頭,然而新手可能只會聳聳肩,覺得沒什麼。此外,這些字元的視覺化多半取决於整合開發環境 (Integrated Development Environment,IDE),所以不能保證它們會被發現。

  不過,這個漏洞是如何在一開始便潛入程式碼呢?這可能發生在起初就使用來源不可靠的程式碼,其已經隱含了惡意程式碼卻沒有被注意到。其次,它可能藉由從網路上搜尋到的程式碼,進行簡單的複製、貼上所導致,多數開發人員以前都做過這種事情。許多組織依賴來自多個軟體供應商的套件,這就出現了一個問題,我們能夠完全信任及依賴這些程式碼到何種程度呢?我們又該如何才能篩選出含有隱藏後門的程式碼?

這是誰的問題?

  一方面,編輯器和build pipelines應該禁止程式碼行具有多個方向,除非我們能在字元串及註解中限制一個方向。請注意,如果未跳出字元串或註解中未被凸顯定向格式化字元,則可以將方向更改擴展到程式行尾。

  一般來說,程式編輯器應該明確地呈現及凸顯可疑的Unicode字元,例如同形字及定向格式化字元。自2021年11月起,GitHub為每一行包含雙向Unicode文本的程式碼,加註警告標示與訊息,但它沒有凸顯這些字元在程式行中的位置,這還是可能導致惡意程式改變其方向並偽裝成好的字元潛入程式碼中。

  開發人員和程式碼審查人員的資訊安全意識是不可或缺的,這也是為何我們需要一套有效的學習平台,以進行該漏洞的演練。目前針對該漏洞的攻防演練適用於Java、C#、Python、GO和PHP。


您也需要一套有效且系統化的安全程式學習平台嗎?即日起至 8/1 報名【安全達人養成計畫 暨資安戰士挑戰賽】,可獲得叡揚獨家授權 Secure Code Warrior 學習平台帳號

相關解決方案:Secure Code Warrior 安全開發培訓平台

相關文章

叡揚資訊與 Checkmarx 十餘年並肩 見證並持續推動臺灣 AppSec 發...

二十年前,當臺灣多數企業尚未意識到應用程式安全(Application Security, AppSec)的重要性時,叡揚資訊已憑藉深厚的應用系統開發經驗,應大型企業需求率先引進 AppSec 工具帶入台灣。2012 年,更率先引進資安強國以色列所孕育的 Checkmarx。自此,叡揚以顧問實務與技術整合,協助臺灣企業從工具導入,逐步邁向安全文化的落地。十多年來,從地端部署到雲端服務、從人工檢測到 AI 智慧輔助,叡揚與 Checkmarx 並肩見證並推動了臺灣 AppSec 的演進歷程。迄今雙方更進一步推動雲端與 AI 安全應用上緊密合作,共建資安韌性。
2025/08/15

保險業資安挑戰升溫!叡揚資訊攜Bitsight 推動企業供應鏈資安治理新標準

台灣知名保險平台服務商近日爆發重大資安事件,駭客聲稱竊得逾 20GB 機密資料,並揚言公開,恐波及超過 152 萬筆保戶個資。這起事件不僅震撼保險產業,更揭示出企業面臨的資安風險早已超越企業本身,過去所信任的軟體系統已不再安全,第三方平台與供應商成為駭客攻擊的新破口。
2025/06/19

叡揚資訊攜手 Bitsight 深化資安評級機制 助攻台灣企業強化風險治理

在數位轉型加速、地緣政治緊張與資安威脅劇增的背景下,企業面臨的外部攻擊面風險與日俱增。 Bitsight 攜手叡揚資訊深耕臺灣市場,協助企業運用 EASM 掌握風險等級,全面提升資安可視性與應變力。
2025/06/13

叡揚資訊攜手復興高中舉辦「程式安全黑客松」 落實產學合作、強化資安人才即戰力

為落實與學界合作並響應政府推動資安人才培育政策,叡揚資訊有限公司於5月3日至4日參與由教育部資訊安全人才培育計畫主辦、臺北市立復興高級中學協辦的「北區高中職程式安全黑客松工作坊」,並擔任活動贊助單位,提供資安講師資源、實作工具支援與相關活動物資
2025/06/04