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

科普:哈希長度擴(kuò)展攻擊

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

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

[[111558]]

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

Message Authentication Codes 101

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

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

最終產(chǎn)生的URL會是這樣:

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

當(dāng)用戶發(fā)起請求要下載一個文件時,將會執(zhí)行下面這個函數(shù):

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

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

Length Extension Attacks, The Simple

Explanation

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

Example: message + padding +extension

繼續(xù)用上面的例子,對文件下載的功能進(jìn)行長度擴(kuò)展攻擊:

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函數(shù)的內(nèi)部原理。

How Hash Algorithms Work

哈希函數(shù)以區(qū)塊為單位操作數(shù)據(jù)。比如說,MD5, SHA1, SHA256的區(qū)塊長度是512 bits 。大多數(shù)message的長度不會剛好可以被哈希函數(shù)的區(qū)塊長度整除。這樣一來,message就必須被填充(padding)至區(qū)塊長度的整數(shù)倍。用前面文件下載的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算法中,哈希值由五組整數(shù)構(gòu)成。一般我們看到的形式是把這五個整數(shù)轉(zhuǎn)換為16進(jìn)制然后連接到一起。運行算法時,初始值(又叫registers)被設(shè)置為這組數(shù):67452301, EFCDAB89,

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

Calculating An Extension

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

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

這個攻擊有個前提,在傳入服務(wù)器的哈希函數(shù)時,擴(kuò)展值必須存在于單獨的區(qū)塊中。所以我們的第二步,就是計算出一個填充值使得 key + message + padding == 512 bits 的整數(shù)倍。在此例中,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

傳送到服務(wù)器的填充及擴(kuò)展之后的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

服務(wù)器要進(jìn)行摘要運算的被攻擊者篡改過的message如下:

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

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

How To Run The Attack

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

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

How To Defend Against This Attack

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

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

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

Summary

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

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

責(zé)任編輯:藍(lán)雨淚 來源: FreeBuf
相關(guān)推薦

2016-09-20 23:44:43

2023-09-19 07:46:03

2014-07-09 15:41:51

2020-10-16 11:41:07

攻擊

2021-09-03 07:23:59

哈希洪水攻擊黑客DDoS

2017-06-01 10:44:29

2019-05-30 10:15:30

2010-05-21 14:53:33

2011-12-30 15:20:29

2015-08-13 13:47:17

2015-05-12 13:25:35

互動百科

2017-12-11 10:40:14

2020-04-26 09:17:08

哈希傳遞身份驗證攻擊

2010-09-26 17:13:31

2024-03-14 08:11:45

模型RoPELlama

2023-07-19 10:09:18

架構(gòu)倉庫SSD

2024-12-02 12:10:39

2021-08-19 16:06:56

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2023-07-09 15:21:05

AI模型LongNet

2016-12-12 16:06:41

BI商業(yè)智能
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美一级精品片在线看 | 日日碰狠狠躁久久躁96avv | 欧美一区二区三区四区视频 | 天天躁日日躁狠狠很躁 | 国产ts人妖系列高潮 | 亚洲精品久久久久久久久久久 | 在线观看免费高清av | 波多野结衣一区二区三区 | 成人不卡在线 | 精品久久影院 | 2019天天干天天操 | 日韩成人免费中文字幕 | 国产专区在线 | 亚洲伊人久久综合 | 草草视频在线播放 | 欧美a在线| 日韩视频免费在线 | 日韩精品在线一区 | 国产欧美综合在线 | 亚洲一区二区三区视频在线 | 依人成人 | 国产亚洲精品精品国产亚洲综合 | 在线免费观看黄色网址 | 久久网亚洲| 久久亚洲精品久久国产一区二区 | 99精品国产在热久久 | 日本不卡一区 | 色婷婷综合久久久中文字幕 | 亚洲欧美日韩一区 | 草久久| 欧美精品一 | 亚洲国产精品人人爽夜夜爽 | 伊人精品一区二区三区 | 午夜寂寞网站 | 免费黄色av| 久久综合婷婷 | 日韩色图视频 | 91精品国产综合久久久久久 | 久久99精品久久久 | 日本一区二区三区免费观看 | 中文字幕在线观看第一页 |