WordPress 5.2,利用數字簽證解決供應鏈攻擊

為了應對日趨突出的供應鏈安全攻擊,WordPress最新版本 5.2日前發佈,利用離線數字簽名來基本更新架構增加一層安全防護。本文蟲蟲帶領大家一起了解WordPress新版本帶來新的安全機制。

WordPress 5.2,利用數字簽證解決供應鏈攻擊

概述

6年前的2013年WordPress 發佈了其版本3.7,為了該版本中入了自動更新機制,確保可以自動給有WordPress站點自動更新重要的安全補丁,以防止安全漏洞被利用和大規模擴散。這對安全來說是個很好的功能,也是業界通認的可取方法。然而6年後的今天一切都變了,攻防策略發生了巨大變化,針對軟件供應鏈的攻擊逐漸成了主流,而且有進一步擴大的趨勢,主要語言的熱門庫,熱門軟件及其插件都成了這種攻擊的潛在目標。試想如果WordPress的更新服務器自動更新服務器被人黑掉,然後利用自動更新軟件打包發出一個木馬或者勒索腳本,那麼全球都會哀嚎。實際上這也不僅僅是個設想,WordFence的安全研究人員在2016年就發現了現實中針對WordPress基礎設施攻擊媒介,並及時阻止攻擊。

WordPress 5.2,利用數字簽證解決供應鏈攻擊

此次攻擊的原理如下圖:

WordPress 5.2,利用數字簽證解決供應鏈攻擊

針對這種安全態勢,解決由於WordPress自動升級架構可能給全網30%的網站帶來的潛在威脅,WordPress新版本引入了離線數字簽名機制來緩解基礎更新架構中潛在的安全攻擊。

新版本數字簽名校驗

當WordPress站點安裝自動更新時,新版本軟件會首先檢查是否存在x-content-signature標頭。更新服務器未提供,則會查詢filenamehere.sig文件。

更新補丁不論以何種方式交付,都會使用簽名都會Ed25519算法的SHA384計算文件哈希。數字簽名通過base64編碼的,用於安全傳輸。數字簽名私鑰由WordPress官方核心開發團隊管理。 WordPress 5.2初始版本的驗證密鑰是fRPyrxb/MvVLbdsYi+OOEv4xc+Eqpsj+kkAS6gNOkI0= 有效期為3年到2021年4月一日過期。

WordPress客戶端更新程序會對提供的更新包進行數字簽名校驗。校驗示例代碼如下:

WordPress 5.2,利用數字簽證解決供應鏈攻擊

WordPress 5.2程序中內一個校驗函數verify_file_signature(),可直接使用。

對於第一個版本,如果簽名無效,WordPress將(默認情況下)就設置軟失敗。這種不安全默認值的原因是為了確保在更新代碼中存在錯誤時不會阻止更新(比如目前已知的PHP 7.2.0-7.2.2的算法bug,不支持ext/sodium)。

對於早於PHP 7.2的環境,則Ed25519簽名驗證算法有sodium_compat提供,這是我們開發的純PHP libsodium polyfill。

在WordPress 5.2之前,如果有人想攻擊感染互聯網上的每個WordPress網站(大約有33.8%的網站),只需要想法APT官方的更新服務器或者用DNS劫持欺騙等方法欺騙自動更新功能下載和安裝任意代碼(打包攻擊木馬、勒索腳本的等等),為所如為,幹各種勾當(例如構建世界上最大的DDoS殭屍網絡)。

有了數字簽名校驗後,你必須要用同樣的方式完成欺騙劫持,就算真正黑掉了官方的更新服務器,也沒用,你的有數字簽名私鑰來簽發你自己的惡意安裝包。

新密碼套件Libsodium API和WP插件數據的升級

除了用於WordPress核心的安全性增強之外,新版本中包含的sodium_compat密碼插件,可以讓開發人員使用其加密庫,比如mcrypt(在PHP 7.1中棄用,在PHP 7.2中刪除)和libsodium(在PHP 7.2,由sodium_compat補充)。Libsodium支持很多功能,最主要是可以讓插件開發人員可以無縫安全地將數據遷移到新的API:

運行時解密的所有數據

如果可以加密/解密任意記錄,最直接的方法是使用mcrypt_decrypt()來獲取明文,然後使用sodium_crypto_secretbox()一次性重新加密你的代碼。然後刪除用於處理mcrypt加密消息的運行時代碼。

在運行時解密部分數據

如果不能一次解密所有記錄,最好的方法是使用sodium_crypto_secretbox()重新加密所有內容,然後再應用mcrypt風格的解密例程。

未來目標:所有開發人員的代碼簽名

目前版本的數字簽名只支持WP核心程序的更新。針對WP的主題和插件還不支持數字簽名。未來官方的想法是提供插件供應商簽署自己的版本並建立一個集中系統Gossamer保存這些數字簽名(和相關元數據),這樣保證整個程序和插件等整個供應鏈都能保證安全可靠。

Gossamer系統建設是WP重要目標,可能會在WP5.3或5.4時候推出。


分享到:


相關文章: