日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
哈希函數(shù)的隱藏危險:長度擴(kuò)展攻擊與服務(wù)端驗證的安全隱患

簡介

Length Extension Attack 是一種與某些特定類型的哈希函數(shù)(如 MD5,SHA-1 和 SHA-2)的特性有關(guān)的攻擊。簡單來說,這種攻擊利用了一個事實,即知道 H(message) 和 message 的長度,我們可以輕松計算出 H(message || padding || extension) 而不需要知道 message 本身。其中 “||” 表示連接,“padding” 是根據(jù)哈希函數(shù)的規(guī)定添加的。

成都創(chuàng)新互聯(lián)公司專注于西林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供西林營銷型網(wǎng)站建設(shè),西林網(wǎng)站制作、西林網(wǎng)頁設(shè)計、西林網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造西林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供西林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

這是因為這些哈希函數(shù)使用了 Merkle-Damg?rd 結(jié)構(gòu),它將輸入切片為多個塊,并且每個塊的哈希值依賴于前一個塊的哈希值。這意味著一旦我們計算出了某個消息的哈希值,就有了一個狀態(tài),可以從那里開始并添加更多的塊。

一種服務(wù)端驗證模式

為方便描述漏洞場景,我們首先假設(shè)有這樣一種服務(wù)端驗證模式,即用戶嘗試登錄時,服務(wù)端會根據(jù)用戶的 ID、名字以及一個僅服務(wù)端知道的 30 位密鑰,通過特定的哈希算法生成一個哈希值,并將其下發(fā)給客戶端。隨后,當(dāng)客戶端嘗試訪問某些特定接口,例如修改用戶權(quán)限的接口時,服務(wù)端會根據(jù)前端 POST 的角色 ID、角色名字、角色權(quán)限以及同樣的 30 位密鑰,重新生成哈希進(jìn)行驗證。如果上傳的哈希與服務(wù)端生成的哈希一致,則視為驗證通過,并將新的角色權(quán)限寫入數(shù)據(jù)庫。

為便于理解,下面是根據(jù)描述寫的一些簡單的代碼做為示例:

越權(quán)思路

由于驗證模式存在漏洞,攻擊者可以在不知道 SecretKey 的情況下,通過重新構(gòu)造交易請求,達(dá)到繞過權(quán)限驗證的目的。越權(quán)攻擊的核心思路在于利用長度擴(kuò)展攻擊的特性。攻擊者首先需要獲取到原始的哈希值,并通過簡單的迭代算法計算出原始數(shù)據(jù)的長度。一旦得到這些信息,就可以將額外的越權(quán)參數(shù)添加到原始數(shù)據(jù)中,并利用相同的哈希算法生成惡意的哈希值。

長度擴(kuò)展攻擊原理

Length Extension Attack 發(fā)生的原因在于部分哈希函數(shù)的內(nèi)部機(jī)制。這些函數(shù)在處理輸入數(shù)據(jù)前,首先將數(shù)據(jù)分割成固定長度的塊,然后在每個塊的末尾進(jìn)行填充以滿足特定的要求。這種設(shè)計導(dǎo)致攻擊者可以在知道原始消息哈希值和長度的情況下,通過填充和附加新數(shù)據(jù),構(gòu)造出新的有效哈希值。

以 SHA-256 為例,其工作在 512 比特的塊上。對于長度不是 512 比特的倍數(shù)的數(shù)據(jù),需要進(jìn)行填充操作。其填充規(guī)則如下:

1. 在數(shù)據(jù)的末尾添加一個 “1” 比特;

2. 添加一定數(shù)量的 “0” 比特,使得數(shù)據(jù)的長度模 512 等于 448(詳細(xì)內(nèi)容見 [1]);

3. 在最后面添加一個 64 位長的塊,表示原始數(shù)據(jù)的長度。

簡而言之,將一個 “1” 后面跟著 m 個 “0”,再加上一個 64 位或 128 位的整數(shù),附加到消息的末尾,以生成長度為 512*n 的填充消息。附加的整數(shù)是原始消息的長度。然后,填充消息將被哈希函數(shù)處理為 n 個 512 位的塊。

構(gòu)造方法

在這個示例中,我們將以上面圖片提到的代碼做為一個特定的場景,其中數(shù)據(jù)字符串為 data="user_id=1&user_name=aa",密鑰為 SecretKey="Length_extension_attack_secret"。服務(wù)端會解析上傳的數(shù)據(jù)中的 data 字段,并通過分隔符 & 解析出所需的參數(shù) user_id 和 user_name。如果存在 role 字段,服務(wù)端也會獲取該字段的值。然后,服務(wù)端會將所有字段與 SecretKey 進(jìn)行哈希運(yùn)算,并與上傳的驗證哈希進(jìn)行比較。如果哈希值一致,則認(rèn)為參數(shù)符合規(guī)則,并直接使用。

首先,我們通過登錄 loginHandler 接口獲取根據(jù) data 和 SecretKey 使用 SHA-256 生成的哈希值 hash="37d310d3465506486431fb2c2eb163f0f470479703f66dc9e5fdead8a3390c68"。

接下來,我們將探討破解的難度。以我們的測試情況為例,根據(jù)長度擴(kuò)展攻擊的原理,只要知道 H(message) 和 message 的長度,我們就可以通過長度擴(kuò)展攻擊添加新的數(shù)據(jù)。原來的 message = SecretKey + data,現(xiàn)在我們手上已經(jīng)有 H(message),只需知道 message 的長度,就可以構(gòu)造一個新的哈希值。由于 SecretKey 是一個 30 位的密鑰,只需經(jīng)過 30 次迭代,就可以得知真正的 message 的長度。因此,我們可以很容易地構(gòu)造出一個新的哈希值。由于我們需要使用 admin 的權(quán)限,所以我們要將惡意的字段 "&role=admin" 拼接到原來的數(shù)據(jù)中。

我們可以利用長度擴(kuò)展攻擊的特性,在不知道 SecretKey 的情況下,添加新的數(shù)據(jù)并生成一個新的哈希值。這里使用一個已經(jīng)實現(xiàn)此功能的庫 [2] 來完成測試。再使用工具生成新的哈希值 。

由于 adminActionHandler 的接口驗證是根據(jù)上傳的 user_id,user_name 和 role 來驗證 hash 的,我們這時候上傳的數(shù)據(jù)是 user_id=1,user_name=aa\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x70 以及 role=admin,如下圖所示:

1694066958_64f9690e9ddbe559f0117.png!small

哈希值為 84ae4ae437eeabf3bd8a26294392770b86f64a81998194156ac003d58a21acd0。之后就可以調(diào)用 adminActionHandler 接口,服務(wù)端收到數(shù)據(jù)后,會把上傳的哈希與 sha256(SecretKey + fakeData) 進(jìn)行對比,通過驗證之后將會執(zhí)行一些敏感操作。這樣,我們就成功地利用長度擴(kuò)展攻擊繞過了服務(wù)端驗證,并實現(xiàn)了越權(quán)操作。

其他可能的攻擊場景

1. 文件完整性驗證:如果文件的完整性是通過連接密鑰和文件內(nèi)容,然后對其進(jìn)行哈希來驗證的,那么攻擊者可能會擴(kuò)展文件并生成一個有效的哈希,從而繞過完整性檢查;

2. Web 應(yīng)用安全:在 Web 應(yīng)用中,如果使用了易受長度擴(kuò)展攻擊的哈希函數(shù)來驗證用戶提交的數(shù)據(jù),攻擊者可能會利用這一點來提交惡意數(shù)據(jù);

3. 數(shù)字簽名:在某些數(shù)字簽名方案中,如果簽名是通過連接私鑰和消息,然后對其進(jìn)行哈希來生成的,那么攻擊者可能會擴(kuò)展消息并生成一個有效的簽名;

4. 密碼存儲:雖然不常見,但如果密碼是通過連接密鑰(例如鹽)和密碼,然后對其進(jìn)行哈希來存儲的,那么攻擊者可能會嘗試使用長度擴(kuò)展攻擊來破解密碼。

如何防范

1. 選擇不易受長度擴(kuò)展攻擊的哈希函數(shù),例如 SHA-3;

2. 使用 HMAC:HMAC 需要一個密鑰和一個消息作為輸入,輸出的結(jié)果既依賴于密鑰,也依賴于消息,因此攻擊者在不知道密鑰的情況下無法進(jìn)行長度擴(kuò)展攻擊;

3. 加強(qiáng)權(quán)限驗證:在服務(wù)端增加額外的權(quán)限驗證步驟,例如使用多因素認(rèn)證。

以下是一些常用的 Hash 算法的特性:

結(jié)語

對于長度擴(kuò)展攻擊,一種有效的防護(hù)措施是使用不受此類攻擊影響的哈希函數(shù),例如 SHA-3 和 BLAKE2。另外,還可以通過 HMAC(密鑰散列消息認(rèn)證碼)結(jié)構(gòu)來進(jìn)行防護(hù)。這些措施可有效提高系統(tǒng)的安全性,確保數(shù)據(jù)完整性和應(yīng)用程序的穩(wěn)定性。

參考鏈接:

[1] https://www.rfc-editor.org/rfc/rfc6234#page-8

[2] https://github.com/skerkour/kerkour.com/tree/main/blog/2023/sha256_length_extension_attacks

本文作者:慢霧科技, 轉(zhuǎn)載請注明來自FreeBuf.COM


分享名稱:哈希函數(shù)的隱藏危險:長度擴(kuò)展攻擊與服務(wù)端驗證的安全隱患
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/djphchc.html