Web Server配置安全

Apache安全

Web Server的安全我们关注两点:一是Web Server本身是否安全;二是Web Server是否提供了可使用的的功能。纵观Apache的漏洞史,它曾经出现过多次高危漏洞,但这些高危漏洞大部分是由Apache的Module造成的,Apache核心的高危漏洞几乎没有。

因此,检查Apache安全的第一件事,就是检查Apache的Module安装情况,根据“最小权限原则”,应该尽可能地减少不必要的Module,对于要使用的Module,则检查其对应版本是否存在已知漏洞。

定制好了Apache的安装包后,接下来需要做的,就是指定Apache进程以单独的用户身份运行,这通常需要为Apache单独建立一个user/group。需要注意的是,Apache以root身份或者admin身份运行是一个非常糟糕的决定。使用高权限的身份运行Apache的结果可能是灾难性的,它会带来两个可怕的后果:

  1. 当黑客入侵Web成功时,将直接获得一个高权限的shell;
  2. 应用程序本身将具备较高权限,当出现bug时,可能会带来较高的风险,比如删除本地重要文件、杀死进程等不可预知的结果。

比较好的做法是使用专门的用户身份运行Apache,这个用户身份不应该具备shell,它唯一的作用是用来运行Web应用。

Apache还提供了一些配置参数,可以用来优化服务器的性能,提高对抗DDOS攻击的能力:

TimeOut
KeepAlive
LimitRequestBody
LimitRequestFields
LimitRequestFieldSize
LimitRequestLine
LimitXMLRequestBody
AcceptFilter
MaxRequestWorkers

这些参数能够起到一定的作用,但单台机器的性能毕竟有限,所以对抗DDOS不可依赖于这些参数。

最后,要保护好Apache Log,一般来说,攻击者入侵成功后,要做的第一件事就是清除入侵痕迹,修改、删除日志文件,因此access log应当妥善保管,比如实时地发送到远程的syslog服务器上。

 

 

Nginx安全

近年来Nginx发展很快,它的高性能和高并发的处理能力使得用户在Web Server的选择上有了更多的空间。但从安全的角度来看,Nginx近年来出现的影响默认安装版本的高危漏洞却比Apache要多。就软件安全本身来看,Nginx与Apache最大的区别在于,检查Apache安全时更多的要关注Module的安全,而Nginx则需要注意软件本身的安全,及时升级软件版本。

与Apache一样,Nginx也应该以单独的身份运行,这是所有Web Server、容器软件应该共同遵守的原则。

Nginx的配置非常灵活,在对抗DDOS和CC攻击方面也能起到一定的缓解作用,比如下面的一些参数配置:

work_processes 1;
    worker_rlimit_nofile 80000;
    events {
        worker_connections 50000;
    }

    server_tokens off;
    log_format IP `$remote_addr`;
    reset_timeout_connection on;
    
    listen xx.xx.xx.xx:80 default rcvbuf=8192 sndbuf=16384 backlog=32000 accept_filter=httpready;

 

HTTP Parameter Pollution

HPP的攻击就是通过GET或POST向服务器发起请求时,提交两个相同的参数,那么服务器会如何选择呢?

比如提交:

/?a=test&b=test1

在某些服务端环境中,会只取第一个参数;而在另一些环境中,比如.Net环境中,则会变成:

a=test,test1

这种特性在绕过一些服务器端的逻辑判断时,会非常有用。

这种HPP攻击与Web服务器环境、服务器端使用的脚本语言有关。HPP本身可以看做服务器端软件的一种功能,参数选择的顺序有服务器端软件所决定的。但是当程序员不熟悉软件的功能时,就有可能造成误用,或者程序逻辑涵盖范围不够全面,从而形成漏洞。

比如可以通过HPP混淆参数,从而绕过ModSecurity对于SQL注入的检测:

/index.aspx?page=select 1,2,3 from table where id=1 
/index.aspx?page=select 1&page=2,3 from table where id=1 

HPP这一问题再次提醒我们,设计安全方案必须要熟悉Web技术方方面面的细节,才不至于有所疏漏。从防范上来看,由于HPP是服务器软件的一种功能,所以只需要在具体的环境中注意服务器的参数取值顺序即可。

 

你可能感兴趣的:(Web,Security)