一、 1.Heartbleed漏洞是什么
Openssl在处理心跳包的时候检测漏洞,没有检测payload与实际的数据字段是否匹配,造成最大64KB的内存泄漏
2.基本背景和影响
OpenSSL是SSL协议以及一系列加密算法的开源实现,使用C语言编写。OpenSSL采用Apache开源协议,可以免费用于商业用途,在很多linux发行版和服务器中得到广泛应用。OpenSSL出现漏洞造成的影响是巨大的,Heartbleed漏洞被称作“历史上最为严重的网络安全漏洞”
二、 分析漏洞原理
1. 源码中的哪些地方出了问题
/* Read type andpayload length first */
hbtype = *p++;
n2s(p, payload);
pl = p;
第一个字节标明了心跳包的类型。宏n2s从指针p指向的数组中取出前两个字节,并把它们存入变量payload中——这实际上是心跳包载荷的长度域(length)。但是程序并没有检查这条记录的实际长度。变量pl则指向由访问者提供的心跳包数据。
*bp++ =TLS1_HB_RESPONSE;
s2n(payload, bp);
memcpy(bp, pl,payload);
在生成响应包的时候,bp指向了缓冲区,s2n是将bp所指向内存的16个字节存为双字节的值,并存入变量payload,然后然后程序从pl处开始复制payload个字节到新分配的bp数组中(这里会发送内存中的敏感数据)——pl指向了用户提供的心跳包数据。最后,程序将所有数据发回给用户
2. 从poc中哪里可以体现出漏洞,poc又怎样利用了漏洞?
hb = h2bin('''
18 03 02 00 03
01 40 00
''')
这是个ssl的心跳包的request请求,01代表request,40000是payload变量的值,2的14次方,但是后面的payload和padding都没有存任何数据,等着从内存中dump出一些信息
三、 漏洞的复现和利用
1. 安装配置openssl,1.0.1c版本
在/usr/local/下建立一个文件夹ssl,将.gz文件解压后编译在该文件夹下
./configure–prefix=/usr/local/ssl
make&& make install
由于现在安抚dnf 安装的openssl版本都修补了这个漏洞,所以编译安装以前存在漏洞的openssl版本,然后在/etc/profile下修改openssl的环境变量
2. 安装apache,,实现apache和openssl连接,apache版本2.2.34
在/usr/local下创建文件夹httpd,在httpd文件夹下创建aprapr-util apache三个文件夹
安装apache的时候在./configure的时候就把ssl组件添加进去,
安装apr和apr-util两个支持组件
安装apr
将apr编译到/usr/local/httpd/apr下
./configure --prefix=/usr/local/httpd/apr
make
make install
安装apr-util
./configure --prefix=/usr/local/httpd/apr-util/--with-apr=/usr/local/httpd/apr
Make && make install
安装apache
./configure --prefix=/usr/local/httpd/apache--enable-so --enable-rewrite --enable-ssl --with-ssl=/usr/local/ssl--with-apr=/usr/local/httpd/apr --with-apr-util=/usr/local/httpd/apr-util
Make && make install
修改配置文件
3. 成证书,
生成server.crt 和server.key,将证书放在/usr/local/httpd/apache/conf
重启apache
登陆https://127.0.0.1:443
4. 利用poc进行攻击,实现预期目标
5. Heartbleed的漏洞风险是攻击者可以利用payload和真实有效载荷不匹配的漏洞,从内存窃取机密信息,丢失数据
四、 使用openvas对漏洞扫描
五、 总结
1. 明白了环境变量的配置过程,熟悉了profile文件 environment文件 bashrc文件 ~/profile 文件 ~/bashrc文件在配置环境变量时的作用
2. Apache添加ssl的过程
先添加ssl组件,再修改apache的配置文件,再生成ssl需要的server证书和密钥
仅实验 谨实验