密碼學誕生于古人類社會,例如古希臘斯巴達的密碼棒、歐洲中世紀時期的密碼欄、阿伯提發明的密碼盤等。古代的密碼學是一門加密隱蔽的學科,而現代密碼學定義為加密與解密,研究在分組密碼與流密碼及其應用。一直以來加密與解密都在進行著激烈的對抗。加密者想盡辦法讓加密得到的信息不容易被破解,而解密者則絞盡腦汁不斷去嘗試還原加密數據。
WEB應用中也經常應用到加密,最常見的就是cookie加密,cookie加密主要是為了防止cookie被篡改。一般來說,常見的加密技術有MD5。CBC等,NSTRT在項目中曾遇到過使用ECB加密技術,并利用該算法的缺陷成功地解密出cookie信息,本期NSTRT將針對分組密碼中的ECB加密模式的缺陷結合一個簡單的實例進行分析。
0×1 ECB入門簡介
首先,在介紹ECB模式之前,我們先大概了解下什么叫做分組密碼。分組密碼將需要進行加密的明文序列劃分為若干固定長度的分組,然后使用固定長度的密鑰加密固定長度的分組得到等長的加密分組。
ECB(Electronic CodeBook,電碼本)模式是分組密碼的一種最基本的工作模式。在該模式下,待處理信息被分為大小合適的分組,然后分別對每一分組獨立進行加密或解密處理。其加、解密過程如下圖:
ECB模式作為分組加密的一種基本工作模式,具有操作簡單,易于實現的特點。同時由于其分組的獨立性,利于實現并行處理,并且能很好地防止誤差傳播。
但ECB還有一致命缺陷,相同的明文塊會加密成相同的密文。因此,它不能很好的隱藏數據模式。因為ECB的每一塊都是使用完全相同的方式進行界面解密,這樣就使得信息不能受到完全的保護,容易遭受統計分析攻擊和重放攻擊。
下圖三幅圖中,第一幅是原圖,第二幅是經過ECB加密的圖,第三幅是是使用了偽隨機的非ECB加密圖。我們可以看到使用ECB模式加密并不能對數據起到完全的加密作用,圖中企鵝的輪廓形狀還是可以看出來的。
0×2 實際樣例
下面我們以一個具體的例子對ECB模式的缺陷進行分析。應用程序使用ECB來對用戶提供的信息進行加密,用戶在登錄后只使用ECB加密后的cookie來確保認證。
測試的應用程序中cookie使用用戶名做ECB加密,然后base64編碼。ECB加密以8個字節為一塊進行分組加密。我們來看看ECB模式會對認證造成什么樣的影響,以及怎樣利用這個缺陷去進行攻擊[hw3] ,在這個例子中我們會嘗試在不知道admin密碼的情況下利用ECB加密模式的缺陷去登錄admin帳號。
首先分別注冊用戶test1、test2,密碼均為password,分別查看cookie。
test1的cookie:auth=vHMQ%2FNq9C3MHT8ZkGeMr4w%3D%3D
test2的cookie:auth=Mh%2BJMH1OMhcHT8ZkGeMr4w%3D%3D
很明顯cookie已經做過了base64編碼了,我們先將它們解碼一下。下面進行的解碼是通過ruby命令實現的。
test1:xBCsx10xFCxDAxBDvsaOxC6dx19xE3+xE3
test2: 2x1Fx890}N2x17aOxC6dx19xE3+xE3
我們可以看到解碼出來的數據都包含一串相同的部分:aOxC6dx19xE3+xE3 ,接下來,我們嘗試通過利用ECB密碼的缺陷,直接通過修改cookie登錄admin賬號 。
現在,我們創建一個用戶名為aaaa aaaa aaaa aaaa aaaa的帳號。這個帳號的cookie為auth=GkzSM2vKHdcaTNIza8od1wS28inRHiC2GkzSM2vKHdcaTNIza8od1ys96EXmirn5
進行解碼出來得到:
x1ALxD23kxCAx1DxD7x1ALxD23kxCAx1DxD7x04xB6xF2)xD1x1ExB6x1ALxD23kxCAx1DxD7x1ALxD23kxCAx1DxD7+=xE8ExE6x8AxB9xF9
可以看到,上面解碼后的cookie包含有重復的x1ALxD23kxCAx1DxD7。我們猜測這是對aaaaaaaa進行ECB加密得到的結果。
我們再注冊一個帳號,用戶名為aaaaaaaa admin(即8個a后面再跟著admin),密碼任意。注冊完后,查看這個帳號的cookie,為:auth=GkzSM2vKHdeNfdXZwrPF0A%3D%3D。
對這個cookie進行解碼。
從解碼結果我們可以看到x1ALxD23kxCAx1DxD7這一部分是和上一步aaaaaaaaaaaaaaaaaaaa這個帳號的cookie解碼得到的重復出現的一部分是相同的。這部分實際上是對aaaaaaaa這8個字節進行ECB加密的結果。我們把x1ALxD23kxCAx1DxD7這部分去掉,只剩下admin加密的結果,取x8D}xD5xD9xC2xB3xC5xD0編碼一下 。
我們把編碼后的base64碼作為cookie提交。這時我們已經成功以admin的身份登錄了。
0×3 總結
從各種各樣的數據泄漏安全事件中,我們可以看到數據已經成為了黑客攻擊的一個主要目標。同時,數據也成為了企業重點保護對象。為了防止黑客攻擊,對數據進行加密是非常必要的。但僅僅考慮對數據進行加密是遠遠不夠的,我們還應該進一步考慮所采用的數據加密算法是否安全。ECB加密的缺點在于同樣的明文組會得到同樣的密文組,相對于ECB模式來說,CBC模式則較安全,攻擊者不易發起主動攻擊,同時,CBC(密碼分組鏈接)適合于傳輸長度較長的報文,依據的是SSL、IPSEC的標準。
本文版權屬于NSTRT團隊,由TRT團隊成員夏殤攢寫。如有興趣可關注我們的微信公眾號trt917,我們會定期分享一些信息安全相關知識,希望能夠對大家有所幫助。