1. 簡介
OpenSSL心臟出血漏洞原理是OpenSSL引入心跳(heartbeat)機制來維持TLS連結的長期存在,心跳機製作為TLS的擴充實現,但在代碼中包括TLS(TCP)和DTLS(UDP)都沒有做邊界檢測,所以導致攻擊者可以利用這個漏洞來獲得TLS連結對端(可以是伺服器也可以是用戶端)記憶體中的一些資料。
所以針對本次漏洞的檢測,我需要在虛擬機器中搭建一個通過https安全性通訊協定的資料互動網站,同時虛擬機器中的OpenSSL版本為含有心臟出血漏洞的版本。通過用戶端即物理機命令列中運行心臟出血漏洞檢測POC代碼和Wireshark進行抓取資料包來分析心血漏洞。 2. 伺服器環境搭建 2.1 安裝VMware
去官網中下載或在內網共用中下載VMware虛擬機器軟體並安裝VMware,安裝VMware沒有什麼困難選擇路徑點擊安裝即可。 2.2 安裝Ubuntu系統
在官網中下載Ubuntu14.04系統,在VMware中點擊建立虛擬機器然後匯入下載的Ubuntu的iso路徑進行安裝,安裝完成後Ctrl+Alt+T開啟命令列,輸入命令openssl version查看OpenSSL版本,理論上Ubuntu14.04版本為OpenSSL 1.0.1f是具有心臟出血漏洞的,但是由於心臟出血漏洞爆出的時間為2014-04-07,所以時間上處於一個邊界,怕漏洞被修複,所以我自己把OpenSSL 1.0.1f版本的OpenSSL版本卸載,重新安裝上OpenSSL 1.0.1e的版本,以確保一定含有OpenSSL心臟出血漏洞。 2.3 安裝OpenSSL
進入Ubuntu虛擬機器中Ctrl+Alt+T開啟命令列。 卸載原來版本的OpenSSL,輸入命令:sudo apt-get purge openssl,通過命令openssl version查看openssl有沒有被卸載,卸載完成後,下載openssl 1.0.1e版本的壓縮包通過ssh傳輸到虛擬機器中。 安裝openssl:解壓安裝包,tar xf openssl-1.0.1e.tar.gz 進入openssl目錄執行命令:
./config –prefix=usr/local –openssldir=/usr/local/ssl
make
sudo make install
./config shared –prefix=/usr/local –openssldir=/usr/local/ssl
make
make install
2.4 安裝Apache+配置https 安裝Apache伺服器:輸入命令:sudo apt-get install apache2 對Apache2進行安裝。安裝結束後:
產生的啟動和停止檔案是:/etc/init.d/apache2
啟動:sudo apache2 start
停止:sudo apache2 stop
重新啟動:sudo apache2 restart
設定檔儲存在/etc/apache2目錄下,ubuntu發行版本的主設定檔是apache2.conf。
瀏覽器中輸入網址localhost查看是否為Apache it works的展示頁面。
開啟SSL模組:
sudo a2enmod ssl 建立認證:由於我們搭建環境主要為我們檢測漏洞使用,所以我們只需要建立自我簽署憑證即可。使用Apache內建的工具建立預設的自我簽署憑證,通過-days參數制定有效期間
sudo apache2-ssl-certificate -days ×××
要求輸入Common Name(eg,YOUR name)時,輸入你的主機名稱。建立完成後目前的目錄下會產生一個apache.pem檔案,包含秘鑰和認證。可以把這個認證copy到/etc/apache2/下建立一個ssl目錄然後copy到:
/etc/apache2/ssl/apache.pem 2.5 編輯https配置 添加監聽連接埠:
編輯Apache連接埠配置(/etc/apache2/ports.conf)如果SSL預設時加入443連接埠Listen 443。 設定site-enabled:
安裝完後,會在/etc/apache2/sites-available目錄下產生一個預設的default-ssl.conf檔案。建立一個連結到sites-enabled目錄:
ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl 修改設定檔:
確認HTTP監聽連接埠是否為80:gedit /etc/apache2/sites-enabled/000-default.conf
HTTPS監聽連接埠預設443:把連接埠改為443,在下加入SSL認證配置,其他的根據自己需要自己定製
gedit /etc/apache2/sites-enabled/001-ssl
2.6 重啟Apache服務
service apache2 stop
service apache2 start 3. 網站環境搭建 3.1 安裝MySQL資料庫+PHP5 安裝MySQL資料庫:輸入sudo apt-get update 進行更新,防止直接安裝MySQL有的軟體包無法下載。
輸入:sudo apt-get install mysql-server mysql-client進行安裝,軟體安裝中會讓你輸入root使用者的密碼,輸入密碼確認密碼之後完成安裝。
判斷MySQL資料庫是否安裝成功:sudo service mysql restart查看是否處於運行狀態。 讓Apache支援MySQL:sudo apt-get install libapache2-mod-auth-mysql 安裝模組 讓php支援MySQL:sudo apt-get install php5-mysql 安裝模組 登入MySQL資料庫:mysql -u root -p 輸入mysql的root使用者密碼 安裝php5:sudo apt-get install php5 讓Apache支援php5:sudo apt-get install libapache2-mod-php5 安裝php5-gd模組:sudo apt-get install php5-gd 使用gedit在“/var/www”下建立info.php檔案:sudo gedit /var/www/info.php
在文字編輯器中輸入 3.2 簡單網頁代碼編寫
搭建簡單的具有資料互動的網站:利用Apache伺服器,mysql資料庫和php5進行網站搭建。通過php編寫一個簡單的使用者登入程式,後台串連mysql資料庫進行資料校正,如果資料匹配返回成功頁面。 4. 環境搭建注意事項 安裝OpenSSL時,解壓縮openssl後進行./config make make install 這三步時在配置./config時一定要注意openssl的安裝路徑,因為有時候你直接按照預設的編譯安裝路徑可能安裝完成後輸入openssl version找不到安裝的版本。 配置https時產生的認證檔案的目錄和你在sites-enabled檔案夾下的default-ssl.conf的SSLCertificateFile的路徑一致。 由於心臟出血漏洞主要由於心跳機制的邊界檢測問題,所以我們要查看自己安裝的openssl有沒有開啟心跳擴充機制:
/usr/bin/openssl s_client -connect 192.168.197.128/login.php:443 -tlsextdebug 2>&1| grep ‘TLS’ 5. 檢測方法 通過網上的POC的python指令碼代碼進行檢測:
通過物理機開啟在虛擬機器中編寫的網站,同時在物理機中安裝python並配置環境變數,通過命令列運行心血漏洞檢測的POC,輸入伺服器的ip地址,查看有沒有資料返回。命令列指令:python ssltest.py 192.168.197.128 通過nmap進行心臟出血漏洞檢測,nmap -sV -p 443 –script=ssl-heartbleed 192.168.197.128
通過網上偵查工具hearbleed scanner直接進行檢測