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直接进行检测