成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

科普:哈希長度擴展攻擊

安全 黑客攻防
貌似大多數滲透師都很少測試密碼學方面的漏洞。我一直都對密碼學頗有興趣,于是決定研究web應用開發者誤用加密算法的情況,以及如何利用這些漏洞。

貌似大多數滲透師都很少測試密碼學方面的漏洞。我一直都對密碼學頗有興趣,于是決定研究web應用開發者誤用加密算法的情況,以及如何利用這些漏洞。

[[111558]]

一月份的時候,我研究了下對于一些比較弱的Message Authentication codes(MACs)[譯者注:關于MAC與hash的區別參見此鏈接],如何進行哈希長度擴展(hash length extension)攻擊。我發現一些很不錯的論文和博文,談到了這種攻擊方式。然而,針對哈希長度擴展攻擊的具體細節,卻鮮有資料。在這篇文章中,我將會對此進行詳細解釋。

Message Authentication Codes 101

Message authentication codes (MACs)是用于驗證信息真實性的。最簡單的MAC算法是這樣的:服務器把key和message連接到一起,然后用摘要算法如MD5或SHA1取摘要。例如,假設有一個網站,在用戶下載文件之前需驗證下載權限。這個網站會用如下的算法產生一個關于文件名的MAC:

def create_mac(key, fileName)
   return Digest::SHA1.hexdigest(key + fileName)
End

最終產生的URL會是這樣:

http://example.com/download?file=report.pdf&mac=563162c9c71a17367d44c165b84b85ab59d036f9

當用戶發起請求要下載一個文件時,將會執行下面這個函數:

def verify_mac(key, fileName, userMac)
    validMac = create_mac(key, filename)
    if (validMac == userMac) do
        initiateDownload()
    else
        displayError()
    end
End

這樣,只有當用戶沒有擅自更改文件名時服務器才會執行initiateDownload()開始下載。實際上,這種生成MAC的方式,給攻擊者在文件名后添加自定義字串留下可乘之機。

Length Extension Attacks, The Simple

Explanation

哈希摘要算法,如MD5,SHA1, SHA2等,都是基于Merkle–Damgård結構。這類算法有一個很有意思的問題:如果你知道message和MAC,只需再知道key的長度,盡管不知道key的值,也能在message后面添加信息并計算出相應MAC。

Example: message + padding +extension

繼續用上面的例子,對文件下載的功能進行長度擴展攻擊:

http://example.com/download?file=
report.pdf%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%
00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A8/../
../../../../../../etc/passwd&mac=ee40aa8ec0cfafb7e2ec4de20943b673968857a5

Length Extensions In Depth

為了理解這種攻擊方式,你必須先了解hash函數的內部原理。

How Hash Algorithms Work

哈希函數以區塊為單位操作數據。比如說,MD5, SHA1, SHA256的區塊長度是512 bits 。大多數message的長度不會剛好可以被哈希函數的區塊長度整除。這樣一來,message就必須被填充(padding)至區塊長度的整數倍。用前面文件下載的MAC的例子來說,填充后的message是這樣的(‘x'表示key):

xxxxxxxxxxxreport.pdf\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\xA8

在本例所用的SHA1算法中,哈希值由五組整數構成。一般我們看到的形式是把這五個整數轉換為16進制然后連接到一起。運行算法時,初始值(又叫registers)被設置為這組數:67452301, EFCDAB89,

98BADCFE, 10325476, C3D2E1F0. 緊接著,填充message,再將其分割為512bits的區塊。算法輪流操作每個區塊,進行一系列的計算并更新registers的值。一旦完成了這些運算,registers里的值就是最終的哈希值。

Calculating An Extension

計算擴展值得第一步是創建一個新的MAC。我們首先對待擴展的值:上例中的‘/../../../../../../../etc/passwd’進行哈希摘要。但是,在進行摘要之前,我們要把registers里的初始值設置為原始message的MAC。你可以將其想象為讓SHA1函數從服務器上的函數運行結束的地方繼續進行。

攻擊者的 MAC = SHA1(extension + padding) <- 覆蓋registers初始值

這個攻擊有個前提,在傳入服務器的哈希函數時,擴展值必須存在于單獨的區塊中。所以我們的第二步,就是計算出一個填充值使得 key + message + padding == 512 bits 的整數倍。在此例中,key是11個字符的長度。因此填充之后的message是這樣的:

report.pdf\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA8

傳送到服務器的填充及擴展之后的message以及新的MAC:

http://example.com/download?file=report.pdf
%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%
00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%
00%00%A8/../../../../../../../etc/
passwd&mac=ee40aa8ec0cfafb7e2ec4de20943b673968857a5

服務器要進行摘要運算的被攻擊者篡改過的message如下:

secret + message + padding to the next block +
extension + padding to the end of that block.

服務器算出的哈希值將是ee40aa8ec0cfafb7e2ec4de20943b673968857a5,正好與我們添加擴展字串并覆蓋registers初始值所計算出來的一樣。這是因為攻擊者的哈希計算過程,相當于從服務器計算過程的一半緊接著進行下去。

How To Run The Attack

為了簡單,在這個例子中我透露了密鑰長度是11位。在現實攻擊環境中,攻擊者無法獲知密鑰長度,需要對其長度進行猜測。

繼續之前的例子,假設當MAC驗證失敗時,這個存在漏洞的網站會返回一個錯誤信息(HTTP response code 或者response body中的錯誤消息之類)。當驗證成功,但是文件不存在時,也會返回一個錯誤信息。如果這兩個錯誤信息是不一樣的,攻擊者就可以計算不同的擴展值,每個對應著不同的密鑰長度,然后分別發送給服務器。當服務器返回表明文件不存在的錯誤信息時,即說明存在長度擴展攻擊,攻擊者可以隨意計算新的擴展值以下載服務器上未經許可的敏感文件。

How To Defend Against This Attack

解決這個漏洞的辦法是使用HMAC算法。該算法大概來說是這樣 :MAC =

hash(key + hash(key + message)),而不是簡單的對密鑰連接message之后的值進行哈希摘要。

具體HMAC的工作原理有些復雜,但你可以有個大概的了解。重點是,由于這種算法進行了雙重摘要,密鑰不再受本文中的長度擴展攻擊影響。HMAC最先是在1996年被發表,之后幾乎被添加到每一種編程語言的標準函數庫中。

Summary

盡管仍有一些瘋狂的人類在寫自己的加密算法,絕大多數人已經漸漸發現自己寫加密算法不是什么好主意。然而,不單純的套用公開的加密算法也是有其意義的,前提是你能夠正確的使用這些加密算法。除非你徹底吃透你使用的加密算法的原理,并懂得如何正確使用,否則還是直接用那些經過了專業級審查的高級算法庫要安全些。

原文地址:https://blog.whitehatsec.com/hash-length-extension-attacks/

責任編輯:藍雨淚 來源: FreeBuf
相關推薦

2016-09-20 23:44:43

2023-09-19 07:46:03

2014-07-09 15:41:51

2017-06-01 10:44:29

2021-09-03 07:23:59

哈希洪水攻擊黑客DDoS

2020-10-16 11:41:07

攻擊

2011-12-30 15:20:29

2019-05-30 10:15:30

2010-05-21 14:53:33

2015-08-13 13:47:17

2015-05-12 13:25:35

互動百科

2020-04-26 09:17:08

哈希傳遞身份驗證攻擊

2010-09-26 17:13:31

2017-12-11 10:40:14

2024-03-14 08:11:45

模型RoPELlama

2023-07-19 10:09:18

架構倉庫SSD

2024-12-02 12:10:39

2021-08-19 16:06:56

漏洞網絡安全網絡攻擊

2023-07-09 15:21:05

AI模型LongNet

2014-07-22 10:33:50

Android Stu離線升級
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费福利视频 | 综合久久av | 亚洲精品一区在线观看 | 免费观看国产视频在线 | 久久久国产精品 | 午夜在线免费观看视频 | www.亚洲一区二区三区 | 在线国产视频 | 久久精品这里精品 | 国产精品高潮呻吟久久av野狼 | 国产成人精品一区二区 | 天天看天天干 | 亚洲成人国产精品 | 亚洲激精日韩激精欧美精品 | 夜夜骑首页 | 亚洲精品第一 | 97色在线观看免费视频 | 亚洲综合无码一区二区 | 一区二区三区在线免费观看 | 国产三区在线观看视频 | 成人精品啪啪欧美成 | av永久| 九九av| 国产日韩欧美精品一区二区 | 麻豆视频国产在线观看 | 亚洲精品久久久久中文字幕欢迎你 | 伊人激情网 | 夜夜夜夜夜夜曰天天天 | 日韩在线免费视频 | 色综合色综合色综合 | 亚洲精品视频三区 | 亚洲一区中文字幕 | 日韩精品无码一区二区三区 | 一区二区三区免费 | 亚洲成人免费观看 | 日韩一区二区久久 | 国产精品日韩一区 | 日本精品久久久一区二区三区 | 久久网一区二区三区 | 亚洲一区二区三区四区五区午夜 | 日韩淫片免费看 |