Apache HTTP Server(简称Apache)是一个开放源代码的网页服务器软件,可以在多种类型的操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的We b服务器软件之一。但是Apache的不安全配置会带来很严重的安全问题,如解析漏洞、远程命令执行漏洞、目录遍历漏洞、任意文件上传漏洞等。
通过访问目标网站,查看是否存在目录遍历安全问题,攻击者可利用该漏洞,下载及查看目标网站敏感数据、了解网站目录结构等,如图3-46a所示。对于使用Apache中间件的网站,Ubuntu和Debian系统可以通过修改/etc/apache2目录下的apache2.conf配置文件,将Options Indexes FollowSymLinks修改为Options FollowSymLinks;CentOS系统可以通过修改/etc/httpd/conf目录下的httpd.conf配置文件,将Options Indexes FollowSymLinks修改为Options FollowSymLinks,便可以修复目录遍历安全问题。通过修改apache2.conf配置文件实现修复目录遍历安全问题的命令如下,结果如图3-46b所示。
修改后的apache2.conf文件内容如下:
由图3-47a可知,此时使用的是Apache 2.4.41版本,为了避免泄露使用的Apache的版本信息,Ubuntu及Debian系统可以通过修改apache2.conf配置文件,CentOS系统可以通过修改httpd.conf配置文件,在配置文件的最后添加如下两条命令来隐藏Apache的版本信息。图3-47a所示为泄露Apache版本信息的页面,图3-47b所示为隐藏Apache版本信息后的效果。
图3-46 修复目录遍历安全问题
图3-47 修复Apache版本信息泄露问题
防止目标网站报错泄露敏感信息,除了隐藏必要的报错信息这种方法以外,还可以通过报错信息重定向的方式解决。Ubuntu及Debian系统可以修改apache2.conf配置文件,CentOS系统可以修改httpd.conf配置文件,在配置文件的最后添加如下命令,当产生报错信息时重定向到404.html文件,隐藏敏感信息。图3-48a所示为泄露Apache版本信息的页面,图3-48b所示为隐藏Apache版本信息后的效果。
利用OPTIONS请求方式,对目标网站发起请求,根据目标网站的response信息,可以获取当前网站支持的请求方式,命令如下。如图3-49所示,目标网站开启了WebDAV模块,支持OPTIONS、GET、POST、DELETE、MOVE等多种请求方式。攻击者可利用扩展的请求方式,对目标网站进行文件上传、文件删除、文件修改等恶意操作。
图3-48 修复页面报错导致信息泄露问题
图3-49 利用OPTIONS获取目标网站支持的请求方式
攻击者利用PUT请求方式,可对目标网站进行木马文件上传操作,最终获取目标网站的执行权限,命令如下,结果如图3-50所示。
图3-50 PUT请求方式上传文件
为防止目标网站具备不安全的请求方式,可以在配置文件中禁用webdav模块。Ubuntu及Debian系统可以修改apache2.conf配置文件,CentOS系统可以修改httpd.conf配置文件,将Dav On更改为Dav off或者直接删除Dav这条语句,之后重启Apache 2服务。图3-51所示为禁用webdav模块后执行的效果。
图3-51 修复页面报错导致信息泄露问题
Apache在解析文件时支持多个文件后缀解析功能,如info.php.png,此时会从文件最后往前依次进行判别,遇到不能够识别的文件后缀时,便依次向前进行解析识别。如果Apache存在多文件后缀解析安全问题,Apache会将该非法文件解析为PHP脚本语言。Windows系统默认该文件为一张图片,但是在Apache中间件解析时,则认为该文件为PHP脚本语言,执行效果如图3-52所示。当目标网站存在文件上传点时,白名单限制只能上传图片文件,则攻击者可将info.php.png图片文件上传到目标系统,如果此时目标系统存在Apache解析安全问题,则会将该文件解析为PHP脚本语言运行,进而给系统造成一定程度的安全隐患。
图3-52 Apache解析图片后缀文件
为修复Apache解析安全问题,可以通过在配置文件中加入多文件后缀解析限制来解决。Ubuntu及Debian系统可以修改apache2.conf配置文件,CentOS系统可以修改httpd.conf配置文件,在对应的配置文件中加入如下限制条件语句,之后重启Apache 2服务,这样即使攻击者上传了类似info.php.png格式的文件,Apache也不会将它解析为PHP文件了,如图3-53所示。
图3-53 修复Apache解析问题
Apache拥有一个详尽的日志记录功能,用于检测服务器常见问题的详细信息,可以协助安全人员对事故进行排查和应急溯源。标准的Apache日志通常包含4种类型:错误日志、访问日志、传输日志和cookie日志。在Apache 2中默认开启了访问日志和错误日志。错误日志主要用于存储诊断信息和处理请求中出现的报错,包括CGI错误、访问失效链接以及用户认证错误等,如图3-54所示;访问日志用于记录服务器所处理访问活动,包括访问源IP地址、目的资源IP地址、访问路径及访问时间等,如图3-55所示。
通过修改Apache配置文件可设置生成的日志级别,Ubuntu及Debian系统可以修改apache2.conf配置文件,CentOS系统可以修改httpd.conf配置文件,修改对应的LogLevel值,一般默认为warn、notice级别。
图3-54 Apache错误日志
图3-55 Apache访问日志