當(dāng)前位置:
首頁 >
关于“心脏出血”漏洞(heartbleed)的理解
發(fā)布時間:2025/4/16
67
豆豆
生活随笔
收集整理的這篇文章主要介紹了
关于“心脏出血”漏洞(heartbleed)的理解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前陣子“心臟出血”剛發(fā)生的時候讀了下源代碼,給出了自己覺得比較清楚的理解。 -------------------------穿越時空的分割線--------------------------- 參考:http://drops.wooyun.org/papers/1381 這個問題出現(xiàn)在openSSL處理TLS心跳的過程中,TLS心跳的流程是:A向B發(fā)送請求包,B收到包后讀取這個包的內(nèi)容(data),并返回一個包含有請求包內(nèi)容的響應(yīng)包。請求包的內(nèi)容(data)中包含有包的類型(type)和數(shù)據(jù)長度等信息。 當(dāng)B收到A的請求包后,并沒有的驗證A包的實際長度,而是簡單的把請求包data中說明的長度當(dāng)作data的實際長度,于是當(dāng)請求包中說明的長度與請求包數(shù)據(jù)實際長度不同時,問題就產(chǎn)生了。假設(shè)A構(gòu)造一個請求包,它的實際內(nèi)容長度只有1,而卻告訴B的它的長度是65535,那么B接受到這個包后就會把A的內(nèi)容完全當(dāng)作65535來處理,其實到這里,問題還并不嚴(yán)重,最嚴(yán)重的問題出在,心跳的響應(yīng)包還需要附帶請求包的全部內(nèi)容,這就需要程序做一次將請求包的數(shù)據(jù)從它所在的內(nèi)存拷貝到響應(yīng)包的內(nèi)存里的操作,這下就出大問題了,當(dāng)拷貝的時候,程序認為A包的內(nèi)容長度是65535個字節(jié),結(jié)果A包在內(nèi)存里面實際只有1個字節(jié),于是程序不僅拷貝出了A包的內(nèi)容,還“傻傻”地將A包數(shù)據(jù)在內(nèi)存中位置后額外的65534個字節(jié)拷貝進了響應(yīng)包里,并將這個響應(yīng)包發(fā)還給了A,于是A便輕易地獲得了B內(nèi)存中這65534個字節(jié)的數(shù)據(jù)。想象一下,如果這65534個字節(jié)數(shù)據(jù)中包括一些敏感信息,那么后果將非常嚴(yán)重。而且A還可以簡單地通過連續(xù)的發(fā)送心跳包,獲取B機器內(nèi)存中n個65534字節(jié)的數(shù)據(jù),這個漏洞不愧是2014年“最佳漏洞”。 現(xiàn)實是殘酷的,據(jù)說的確已經(jīng)有很多用戶的敏感信息通過這種方式泄漏了。作為一個應(yīng)用如此廣泛和重要的開源庫,出現(xiàn)這種低級的問題實在是讓人不能理解,不禁又讓人聯(lián)想起了------陰謀!
轉(zhuǎn)載于:https://www.cnblogs.com/flyFreeZn/p/3860752.html
總結(jié)
以上是生活随笔為你收集整理的关于“心脏出血”漏洞(heartbleed)的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据同步存储过程
- 下一篇: Learning OpenCV Lect