0x00 Apache应用介绍
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
0x01 为什么要做安全配置
上两期我们讨论了数据库的安全配置,web中间件同样也存在因为安全配置不合适导致的安全问题。Apache的默认配置中存在一些安全问题,例如版本号信息泄露、未配置使用SSL协议等。因此安全配置Apache服务器能有效的减少安全威胁,下面将对Apache的安全配置进行讨论。
0x02 如何进行安全配置
1.Apache用户账号Shell无效
apache账号不能用作常规登录帐户,应该分配一个无效或nologin shell确保帐号不能用于登录。apache账号shell应为:/sbin/nologin或/dev/null。
加固方法:修改apache账号使用 nologin shell或例如 /dev/null 的无效shell,
- # chsh -s /sbin/nologin apache
2.锁定Apache用户账号
Apache运行的用户帐号不应该有有效的密码,应该被锁定。
加固方法:使用passwd命令锁定apache账号
- # passwd -l apache
3.配置错误日志
LogLevel指令用于设置错误日志的严重级别。ErrorLog指令设置错误日志文件名称。日志级别值为emerg,alert,crit,error,warn,notice,info和debug的标准syslog级别。推荐级别为notice,以便记录从emerg到notice级别的所有错误。core模块建议设置为info,以便任何"not found"请求包含在错误日志中。
加固方法:
a.在Apache配置中添加或修改LogLevel的值,core模块设置为info或更低,所有其他模块设置为notice或更低。如果需要更详细的日志,并且存储和监视进程能够处理额外的负载,那么也可以设置为info或debug。建议值是 notice core:info。
- LogLevel notice core:info
b.如果尚未配置,则添加ErrorLog指令。 文件路径可能是相对的或绝对的,或者日志可能被配置为发送到系统日志服务器。
- ErrorLog "logs/error_log"
c.如果虚拟主机有不同的人负责网站,为每个配置的虚拟主机添加一个类似ErrorLog的指令。每个负责的个人或组织都需要访问他们自己的网络日志,并需要技能/训练/工具来监控日志。
4.禁用弱SSL协议
Apache SSLProtocol指令指定允许的SSL和TLS协议。由于SSLv2和SSLv3协议已经过时并且易受信息泄露的攻击,所以都应该禁用。应只启用TLS协议。
加固方法:在Apache配置文件中查找SSLProtocol指令;如果不存在,则添加该指令,或修改该值以匹配以下值之一。如果还可以禁用TLSv1.0协议,则首选设置"TLSv1.1 TLS1.2"。
- SSLProtocol TLSv1.1 TLSv1.2
- SSLProtocol TLSv1
5.不安全的SSL Renegotiation应被限制
为了Web服务器与OpenSSL 0.9.8m或更高版本连接,在Apache 2.2.15中添加了SSLInsecureRenegotiation指令,允许不安全的重新协商为使用较早的未修补SSL实现客户端提供向后兼容性。在提供向后兼容性的同时,启用SSLInsecureRenegotiation指令会使服务器容易遭受中间人重新协商攻击(CVE-2009-3555)。因此,不应启用SSLInsecureRenegotiation指令。
加固方法:在Apache配置文件中查找SSLInsecureRenegotiation指令。如果存在,将该值修改为off。
- SSLInsecureRenegotiation off
6.TimeOut应设置为小于等于10
TimeOut指令控制Apache HTTP服务器等待输入/输出调用完成的最长时间(以秒为单位)。建议将TimeOut指令设置为10或更小。
加固方法:修改Apache配置文件,将TimeOut设置为10秒或更小。
Timeout 10
7.KeepAlive应设置为On
KeepAlive指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接。
加固方法:修改Apache配置文件,将KeepAlive设置为On,以启用KeepAlive连接。
- KeepAlive On
8.MaxKeepAliveRequests应设置为大于等于100
当KeepAlive启用时,MaxKeepAliveRequests指令限制每个连接允许的请求数量。如果设置为0,则允许无限制的请求。建议将MaxKeepAliveRequests设置为100或更大。
加固方法:修改Apache配置文件,将MaxKeepAliveRequests设置为100或更大。
- MaxKeepAliveRequests 100
9.KeepAliveTimeout应设置为小于等于15
KeepAliveTimeout指令指定在关闭持久连接前等待下一个请求的秒数。
加固方法:修改Apache配置文件,将KeepAliveTimeout设置为15或更小。
- KeepAliveTimeout 15
10.禁用WebDAV模块
Apache mod_dav和mod_dav_fs模块支持Apache的WebDAV(网络分布式创作与版本管理)功能。 WebDAV是HTTP协议的扩展,允许客户端创建,移动和删除Web服务器上的文件和资源。
加固方法:
a.对于静态模块的源码版本,运行Apache ./configure脚本时在--enable-modules=configure选项中不包括mod_dav和mod_dav_fs。
- $ cd $DOWNLOAD/httpd
- $ ./configure
b.对于动态加载的模块,在apache配置文件中注释掉或删除mod_dav和mod_dav_fs模块的LoadModule指令。
- # LoadModule dav_module modules/mod_dav.so
- # LoadModule dav_fs_module modules/mod_dav_fs.so
11.隐藏Apache版本号及其他敏感信息
配置Apache ServerTokens指令提供最少的信息。通过将该值设置为Prod或ProductOnly,服务器HTTP响应头中给出的唯一版本信息将是"Apache",而不是提供已安装的模块和版本的详细信息。禁用在服务器生成文档(如错误页面)底部生成签名行作为页脚的服务器签名。
加固方法:Apache配置文件中ServerToken应设置为:Prod,ServerSignature应设置为:Off
12.防止默认Apache内容的泄漏信息
在之前的建议中,删除了默认内容,如Apache手册和默认CGI程序。但是,如果要进一步限制有关Web服务器的信息泄露,例如图标等默认内容不留在Web服务器上也很重要。
加固方法:
a.默认的源码版本将自动索引和图标配置放在extra/httpd-autoindex.conf文件中,因此可以通过在主httpd.conf文件中将include行注释掉来禁用:
- # Fancy directory listings
- # Include xxx/httpd-autoindex.conf
b.或者,可以将图标alias指令和目录访问控制注释掉,如下:
- # We include the /icons/ alias for FancyIndexed directory listings. If
- # you do not use FancyIndexing, you may comment this out.
- #
- #Alias /icons/ "/var/www/icons/"
- #<Directory "/var/www/icons">
- # Options Indexes MultiViews FollowSymLinks
- # AllowOverride None
- # Order allow,deny
- # Allow from all
- #</Directory>
13.禁用HTTP TRACE方法
使用Apache TraceEnable禁用HTTP TRACE请求方法。因HTTP TRACE存在跨站攻击漏洞。
加固方法:找到例如httpd.conf的主要Apache配置文件。在server级配置中将TraceEnable设置为off。server级配置是顶级配置,不嵌套在任何其他如<Directory>或<Location>的指令中。
14.限制所有目录覆盖
Apache AllowOverride允许使用.htaccess文件来覆盖大部分配置,包括身份验证,文档类型处理,自动生成的索引,访问控制和选项。当服务器找到一个.htaccess文件(由AccessFileName指定)时,它需要知道该文件中声明的哪个指令可以覆盖较早的访问信息。当这个指令设置为None时,那么.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取文件系统中的.htaccess文件。当这个指令设置为All时,在 .htaccess文件中允许任何具有.htaccess上下文的指令。
加固方法:Apache配置文件中的<Directory>中应设置:AllowOverride None
15.删除默认CGI内容test-cgi
大多数Web服务器(包括Apache安装)都带有不需要或不适合生产使用的默认CGI内容。这些示例程序的主要作用是展示Web服务器的功能。apache安装的一个常见的默认CGI内容是脚本test-cgi。这个脚本将打印回请求者的CGI环境变量,其中包括许多服务器配置细节。
加固方法:
a.通过Script,ScriptAlias,ScriptAliasMatch或ScriptInterpreterSource指令找到在Apache配置中启用的cgi-bin文件和目录。
b.删除cgi-bin目录中的printenv默认CGI(如果已安装)。
0x03 总结
对Apache进行安全配置可以有效的防范一些常见安全问题,按照基线标准做好安全配置能够减少安全事件的发生。国内常见的基线标准有中国信息安全等级保护、电信网和互联网安全防护基线配置要求及检测要求,美国CIS基线也有详细的Apache基线标准,不同的企业也可以根据自身企业业务制定符合自己企业的安全基线标准。
0x04 参考链接
- 国家信息安全等级保护制度要求
- 电信网和互联网安全防护基线配置要求及检测要求
- CIS_Apache_HTTP_Server_2.4_Benchmark_v1.3.0
- CIS_Apache_HTTP_Server_2.2_Benchmark_v3.4.0