這篇文章要分享一個近期被發現的供應鏈攻擊案例。攻擊者利用 npm 上的惡意套件,將 C2 伺服器(Command and Control Server,即駭客用來遠端控制受害電腦的指令伺服器)的 IP 地址隱藏在以太坊區塊鏈的交易記錄中。這種技巧被稱為 NullReceiver,是針對先前 EtherHiding 技術的進化版。
首先我們得理解什麼是 C2 伺服器。在典型的惡意軟體攻擊中,受感染的電腦需要知道要連向哪個伺服器來接收指令或回傳資料。如果駭客直接把 IP 地址寫死在程式碼裡(Hardcoded),資安分析人員只要對程式碼進行反編譯或監控網路流量,很快就能發現並封鎖該 IP。為了避免被發現,駭客會使用 Dead Drop Resolver(死信箱解析器)技術,將真正的 C2 地址藏在第三方公開平台上,讓惡意軟體在執行時才去該平台「領取」最新的 IP。
早期的 EtherHiding 技術是將指令或 IP 藏在區塊鏈智能合約(Smart Contract)或交易的 Calldata(交易附加數據)中。雖然這比寫死 IP 高明,但它有一個致命弱點:分析人員只要監控那個特定的智能合約地址或特定的交易模式,就能預判 C2 的變動。
而這次發現的 NullReceiver 技術則採取了更極端的做法。它不再使用智能合約,也不在 Calldata 中放入任何資料,而是將 C2 的 IP 地址直接編碼在以太坊交易的接收者地址(Recipient Address)中。
具體的操作流程如下:
第一步,惡意套件在執行時會去查詢一個預先設定好的攻擊者錢包地址。
第二步,它會讀取該錢包最新的一筆轉帳交易。
第三步,它不看轉帳金額(金額為零),也不看附加資料(無資料),而是直接讀取該筆交易的接收者地址。
第四步,它將接收者地址的前四個位元組(Bytes)從十六進位轉換為數字,這組數字正好就是 C2 伺服器的 IP 地址。
舉個例子,如果接收地址是以 a658863e 開頭,轉換後就會變成 166.88.134.62。至於地址後面的部分,則是用來填充的無意義字串(例如 helloipbot!!),讓這個地址看起來像個正常的錢包地址。
這種做法對工程師和資安分析人員來說非常棘手,原因有三:
首先是去中心化與不可篡改。區塊鏈是公開且無法刪除的,防禦者無法要求區塊鏈刪除這些交易記錄。
其次是極低的特徵值。由於交易金額為零且沒有附加數據,這在以太坊網路中是最廉價且最不起眼的交易類型,幾乎沒有任何特徵可以被防火牆或監控系統捕捉。
最後是動態變換。攻擊者可以隨時發起一筆新的零元轉帳給一個隨機生成的地址,從而瞬間更換 C2 伺服器的 IP,而不需要修改任何已部署的惡意程式碼。
這次受影響的是兩個名為 bianira-ui 和 fluid-type-ui 的 npm 套件。雖然這些套件目前已被移除,但在被發現前已有數百次下載。這提醒我們,即使是看似簡單的 UI 庫,只要進入了依賴鏈,就可能成為攻擊入口。
對於開發者來說,這類攻擊再次強調了供應鏈安全的必要性。不要盲目信任任何第三方套件,應盡量使用 lock 檔固定版本,並定期使用安全掃描工具檢查依賴項的漏洞與異常行為。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。