本文收錄於《阿里安全新一代安全架構之安全基建專欄》
“講安全科普 就是這麼有意思”
作者:阿里安全安全工程師 正哥(真的很正,正直的正)。
今天,阿里安全的小哥哥要講述的是從他的“一個朋友”入住酒店開始,如何獲得安全思考的“生活案例”(研究探討)。
好了,我們要開始正經講故事了。
現實生活中,一個人出差住酒店,到前臺進行登記,從錢包中拿出身份證,登記名字和身份證號,還需要做人臉識別。錢包解決身份證存放問題,人臉識別來保證身份證號使用安全。
在數字空間中,我們如何解決數字身份證的存放和使用問題?數字空間,會面臨各種攻擊,造成關鍵資訊洩漏,比如我們所說的“身份證號”(SK)。
保護 AK/SK 需要密碼模組,密碼模組分為硬體和軟體兩種方式,但是硬體密碼模組的普及率很低,或者成本高昂,所以需要軟體的密碼模組。白盒密碼就是這樣一種軟體密碼模組,我們採用白盒密碼來保護AK/SK。
安全問題的“哲學思考”
在古希臘的一座海島上,某日,夕陽西下,聖者蘇格拉底在天涯,遙望蒼茫大海,春暖花開,提出了三個問題:
我是誰?我從哪裡來?我要到哪裡去?
問題一出,便成為哲學的終極命題,始終考驗著人類的智慧。當然,最近經常問我們這些問題的是小區保安。
對於一個自然人,“我是誰”是有標準答案的,偉大導師馬老師(名克思)指出“人的本質是一切社會關係的總和”;說人話,就是MFA(多因素認證):我知道什麼(知識因素),我擁有什麼(身份證、U盾),我的天賦神通(生物特徵)。
那麼,對於數字空間的實體,我們如何回答這類似終極3問:我是誰,我要幹什麼,我能幹什麼?
什麼是“數字空間的實體”
在數字空間,前端一個簡單按鈕,或者網址,涉及後臺多種服務,以購物為例,某人看到心動的商品,點選購買,涉及後臺使用者、商品、訂單、庫存和支付等環節。
每個環節都存在多個服務的互動,例如使用者購買之後,會透過訂單狀態,查詢商品到哪裡了,這就涉及訂單管理和物流系統互動。再比如收到商品之後,使用者點選已收貨,錢會打到商家賬戶上,訂單狀態更新為完成,這個過程涉及訂單、支付系統。
一個大系統,必然由多個服務元件協同完成一個任務。服務元件互動的過程,也必然涉及我是誰?我要幹什麼?我能幹什麼?一個服務元件只有告訴其他服務元件,我是誰,我要幹什麼,其他服務元件識別,決定能幹什麼。才能完成整個為使用者服務的流程。我們給每個服務元件分配一個名字(AK)和一個身份證號(SK),來標識該服務元件。
數字實體的名字和身份證
每個服務元件由一個名字(AK)和身份證號(SK)來標識。
在訂單管理服務與物流系統互動的時候,訂單管理服務傳送:我是訂單管理,我要查詢XX訂單的物流資訊和SK參與的校驗資訊。物流系統收到後,對資訊進行校驗,校驗透過才能相信資料是訂單管理系統傳送過來的,然後才能返回XX訂單的物流資訊。從示例來看,身份證號(SK)是認證的核心,我們如何保護它呢?
數字實體的身份證號保護---白盒密碼
現實生活中,一個人出差住酒店,到前臺進行登記,從錢包中拿出身份證,登記名字和身份證號,還需要做人臉識別。錢包解決身份證存放問題,人臉識別來保證身份證號使用安全。在數字空間中,我們如何解決數字身份證的存放和使用問題呢?數字空間,會面臨各種攻擊,造成關鍵資訊洩漏,比如我們所說的“身份證號”(SK)。
保護 AK/SK 需要使用密碼模組,密碼模組分為硬體和軟體兩種方式,硬體密碼模組基於可信硬體實現,其安全級別較高,但是很多場景不具備硬體條件,或者可信硬體成本過高,所以需要軟體的密碼模組。然而一般的軟體加解密演算法的設計思路是僅保證演算法在“黑盒”狀態(即攻擊者只能獲取演算法的輸入輸出)下的安全性,並不能保證演算法在“白盒”狀態(即攻擊者可以獲取演算法內部執行狀態)下的安全性。許多環境(如root過的Android/iOS、PC等)經常就是完全暴露給攻擊者的,是一個白盒攻擊環境。以某標準演算法舉例,攻擊者若僅拿到的明文-密文對,是無法破解金鑰的,但是如果允許攻擊者獲取實現的內部記憶體狀態,那麼它就能夠直接透過觀察演算法迭代過程破解出金鑰。能否設計一種軟體密碼模組,在白盒攻擊環境下,依然能夠把內部的秘密隱藏起來?
白盒密碼技術是一項能夠抵抗白盒攻擊的密碼技術。白盒攻擊是指攻擊者對裝置擁有完全的控制能力,能夠讀寫硬碟資料,能偶觀測和更改程式執行時的內部資料,這種環境稱為白盒攻擊環境。大多環境(Android、iOS、PC、伺服器等)在很多情況下就是一個白盒攻擊環境。白盒密碼有ASASA、多項式置亂和置亂編碼等多種方式實現。但是核心思想是透過多種方式,引入干擾項,將標準演算法變為一個混亂的過程,例如一個演算法有N輪,每輪又有W個步驟,如下圖所示。
白盒化之後,整個過程如下:
白盒密碼是將數字身份證號,透過複雜的方式,轉變為一系列資料----白盒,後續儲存和使用都是白盒,而不是SK。仍然拿身份證的例子來打比方,相當於身份證晶片被嵌入了錢包(白盒)中,身份證(SK)這個實體不再獨立存在了。
白盒安全性如何呢?目前所有的白盒都是可以被破解的,例如ches 2019 challenge 白盒大賽,最好的s白盒方案也只活了29天;但是這種破解是有相當門檻的:這個29天是在提交原始碼情況下,由國際頂級的密碼學專家完成的。我們團隊也參加了ches 2019 challenge 白盒大戰,取得了團體第6名。此外我們也基於最新的可證安全的白盒技術,研發了更難被破解的自主智慧財產權的新一代白盒密碼演算法。由於標準白盒還有相容現有的標準演算法,自由度更高等優勢,我們在實際應用中按需使用不同的白盒方案。
當然白盒密碼本身也有其無法解決的問題,例如程式碼複製攻擊:攻擊者可以不需要破解白盒密碼模組的私鑰,只需要把白盒模組本身從軟體中定位並提取出來,需要加解密時就把它當做一個庫來重複呼叫就行了。仍然拿身份證的例子來打比方,相當於攻擊者不是偷走身份證,而是偷走整個錢包;但是偷走錢包的動靜比偷身份證大多了,可以採取的防禦的措施也更多。這裡我們可以提供多種防禦技術,各兵種各展所長、協同作戰,實現更高的安全水準
。
加固方式 | 說明 |
程式碼混淆 | 虛擬化,花指令、加密等,防逆向,防除錯。 |
指紋繫結 | 提取執行終端機器、系統、應用等等資訊,對白盒檔案進行混淆,達到白盒檔案與使用終端的繫結,達到身份證只能所有者才能使用。 |
輪轉 | 定期對白盒進行輪轉,縮短白盒使用週期,提高安全水位 |
藉助可信軟體基 | 系統:IDS,應用:RASP 進行加固,提高側通道攻擊和破譯的門檻 |
尤其是RASP( Runtime Application Self-Protection,是一種在執行時檢測應用程式攻擊並進行自我保護的安全產品。),它像疫苗一樣注入到應用程式中,與應用程式融為一體,能實時檢測和阻斷安全攻擊,使應用程式具備自我保護能力,當應用程式遭受到實際攻擊傷害,就可以自動對其進行防禦,而不需要進行人工干預,下一篇我們介紹阿里安全的RASP。
以朋友的名義保證,絕對不鴿,草稿已經在路上。