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直接進行檢測