當前位置:
首頁 > 新聞 > 加密101系列:如何攻破加密演算法

加密101系列:如何攻破加密演算法

當應用加密演算法時,有許多地方可能會出錯。難點在於識別和分析程序員用來加密的方法,然後尋找其中的漏洞。漏洞的種類也很多,比如弱加密演算法、弱密鑰生成器、服務端漏洞和密鑰泄露等。

定位加密演算法

在嘗試尋找漏洞之前,首先要知道使用了什麼加密演算法。最常用的方法就是查看API調用,如果API調用可以查到,那很容易就可以識別使用的演算法。

很多時候,加密演算法是靜態編譯到惡意軟體中的,或者使用了傳統的寫加密演算法。這種情況下,就要理解解密演算法的內部工作流程來識別代碼。

文件的內容可以被加密然後寫迴文件中,所以最快的減小加密的範圍的方法是交叉引用ReadFile和WriteFile API調用。加密就是在這兩個點間執行的。

識別加密代碼

當尋找靜態加密編譯的加密代碼時,不需要找任何的API調用。理解加密演算法的底層工作原理是非常必要的。

首先,我們看一下AES演算法的高級流。大多數的同步加密演算法的流都與之類似,區別在於所使用的數學操作的類型,但是核心概念是相同的。所以,理解AES對於在現實中識別其他類型的加密演算法是非常有幫助的。

AES是對稱加密演算法,會執行一系列的數學和邏輯運算:

·要加密的明文數據

·靜態位元組是演算法的一部分

·加密使用的密鑰

根據AES的選擇和密鑰大小,流會有所不同。從上面的圖會有一些block組成的環:

·Add key添加密鑰

·Shift rows行變換

·Sub bytes位元組替換

·Mix columns行列交換

上面的步驟中,文件數據被讀入固定位元組的矩陣中。本例中是16位元組,但實際上根據演算法的不同,幾位元組都有可能。下面是這幾輪的結果:

·Add key將密鑰數據和輸入數據矩陣進行XOR運算;

·Shift rows對數據進行移位操作。比如,數據本來是 4 5 2 1,左移1位就變成了5 2 1 4。

·Sub bytes是利用演算法內置的靜態位元組數組。數據的每個位元組都是lookup矩陣的索引。這樣,一個靜態的替換就發生了。

·Mix columns對矩陣中的位元組進行一些數據操作和線性變換,這樣矩陣中的每個位元組就都變了。

上面4個步驟可以看做是一輪。AES有10到14輪,也就是說在二進位文件中尋找加密代碼,應該是一段很長的重複代碼。這是從二進位文件中尋找加密代碼的一種方法。

下面是加密的另一輪,AES演算法的另一種或相似的同步加密:

操作的順序有點不同,但這不重要。我們並不是尋找AES演算法的漏洞,我們尋找的是AES在實踐時的漏洞。給出AES內部工作原理細節的原因是讓大家更好的理解其工作原理,便於在代碼中識別。

以Scarab勒索軟體為例,它使用了靜態編譯的AES來加密文件,我們對不同加密演算法的內部工作原來進行了研究,這可以幫我們識別使用加密演算法。

這也就說明了在同一個勒索軟體中可能會使用多種加密方法。我們有文件加密的流圖還有加密密鑰的演算法。雖然這不是修改文件本身的加密,但是可以用來確保文件加密密鑰的安全。這些弱點都可以用來攻破加密。技術上可以使用任意次數的加密組合,因為這是由作者決定的。必須要理解和識別每個加密演算法以及所起的作用。因為攻破一個錯誤使用的加密演算法就可以連環攻破整個加密方案。

隨機數生成器

攻破加密的另一個出發點就是加密密鑰生成器,大多數情況下加密密鑰生成器來源於一個隨機數生成器。

如果你之前了解過任何加密的話,就應該知道隨機數生成器的重要性。因為一旦你可以讓隨機數生成器生成之前加密時所產生的值,那麼就可以重新生成之前的加密密鑰。

下圖中,系統時間作為弱隨機數生成器的種子。

大多數情況下,任何的計算機演算法都只能執行一定次數的循環。如果輸入函數的輸入是一樣的,那麼輸出的結果也應該是一樣的。對隨機數生成器來說,只要有足夠大的輸入來生成隨機數值就可以進行推斷了。比如,一些弱隨機數生成器利用日期作為輸入。因此,這些條件都可以重新創建的。唯一需要做的就是利用足夠多的隨機輸入來獲取足夠多的熵值。

一些強的隨機數生成器會使用樣本音頻數據、加上日期。並使用滑鼠輸入和其他的元素來讓輸入儘可能的隨機化。這樣的話,暴力破解進行重新創造就變得很難。

破解弱RNG的理論過程

假設勒索算計用用當前時間的微秒作為RNG的種子,使用的加密是標準加密。下面是攻擊的基本步驟。

·網路管理員分析勒索軟體發現了用於加密的公鑰是受害者的ID。

·網路管理員可以通過日誌等了解感染髮生的大概時間,比如,10:00:00am 到10:00:10am一個10秒的時間窗口。

·因為RNG使用微秒作為seed,那麼就有1000萬個可能的seed。

·如果勒索軟體用時間作為seed值x,那麼加密密鑰對就是KEYx。

·然後從10:00:00開始以微秒的單位遞增,用標準軟體進行密鑰對創建。

·然後檢查是否與受害者ID(公鑰)匹配。

·最終,會有一個與之匹配的密鑰。然後可以嘗試私鑰並進行解密,就可以將原始文件恢復。

在這個場景中,用到了暴力破解。如果RNG用微秒和當時的進程數相結合作為seed,就增加了複雜性。比如說當時運行的進程有5-25個,那麼暴力破解需要嘗試的次數就是1000萬-2億次,雖然也是可以破解的,但是增加了破解的複雜度。

如果加入了足夠多的參數,或者參數的可能性比較多的話,那麼最終需要暴力破解的次數會非常多,多到可能用盡你餘生的時間都不夠的。

解密實踐

下面是一些成功破解的勒索軟體的例子和所使用的方法。

7ev3n, XORist, Bart: Weak encryption algorithm

Petya: Mistakes in cryptography implementation

DMA Locker, CryptXXX: Weak key generator

Cerber: Server-side vulnerability

Chimera: Leaked keys

弱加密演算法

DES演算法是上世紀開發的,並廣泛用於加密實踐。因為密鑰位數限制,目前DES被認為是一種弱加密演算法。因為加密演算法的密鑰的位數是考慮加密演算法強壯性的一個因素。密鑰位數越大,破解的難度就越大。

通過查看文件也可以得到加密演算法的一些信息。

從上圖可以看出,熵值比較低,加密文件中的數據與原文比較相似。這應該是明文XOR的結果。

從上圖看出,熵值明顯是比較大的。很難從密文中看出與明文的相似處。

文件可視化是對給定勒索軟體進行解密的第一步,從中我們可以找到所使用的加密演算法和加密演算法的強弱。也能給出一個攻擊的方向和如何攻破加密。比如,上面列表中的Cerber就是利用服務端的漏洞進行攻擊的,雖然加密本身是很強的,但是也可以攻擊側信道來創建解密器。

結論

為了尋找加密演算法的弱點,需要對加密演算法進行識別和分類。然後對代碼進行初步識別,再進一步找出可能存在的弱點和漏洞,再利用這些漏洞和弱點就可以攻破加密演算法。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

4G LTE協議安全性及潛在攻擊風險分析
滲透技巧——利用tscon實現未授權登錄遠程桌面

TAG:嘶吼RoarTalk |