2013年08月22日 星期四 10:37
Naxsi是一款优秀的基于白名单的主动防御模块,可以支持包括SQL注入、跨站脚本攻击等在内的多种攻击手段的检测。
SEnginx中默认集成了Naxsi模块,其使用方式没有发生变化,可以参考Naxsi的文档进行设置,也可以参考下面的说明进行设置。
语法 | naxsi_neteye_action tag=<$tag> action=block/pass notify=/path/to/a/page; |
默认值 | |
上下文 | Location |
有效版本 | 1.5.3-1及以后版本 |
指定当发生某种攻击的时候,naxsi采取的动作
举例:
naxsi_neteye_action tag=$SQL action=block notify=/reject.html; naxsi_neteye_action tag=$XSS action=block notify=/reject.html;
其中tag需要和naxsi定义的攻击类型相匹配。
senginx集成的naxsi模块位于senginx安装目录下的naxsi目录中,包括一些生成白名单的工具和规则集等。
首次使用senginx中集成的naxsi,你需要做如下事情:
创建白名单文件空,例如wl.conf,文件位置任意,例如/path/to/senginx/conf/wl.conf。
在senginx的nginx.conf配置文件中include naxsi的核心规则库:
/usr/local/senginx/naxsi/naxsi_config/naxsi_core.rules;
在nginx.conf中,需要进行安全过滤的location上设置naxsi的相关命令并指定白名单文件的位置:
location /cn { error_log logs/error.cn.log; ... ... LearningMode; SecRulesEnabled; #SecRulesDisabled; include wl.conf; ## check rules CheckRule "$XSS >= 4" BLOCK; CheckRule "$TRAVERSAL >= 4" BLOCK; CheckRule "$EVADE >= 8" BLOCK; CheckRule "$UPLOAD >= 8" BLOCK; CheckRule "$RFI >= 8" BLOCK; CheckRule "$SQL >= 8" BLOCK; naxsi_neteye_action tag=$SQL action=block notify=off; naxsi_neteye_action tag=$XSS action=block notify=off; naxsi_neteye_action tag=$TRAVERSAL action=block notify=off; naxsi_neteye_action tag=$EVADE action=block notify=off; naxsi_neteye_action tag=$UPLOAD action=block notify=off; naxsi_neteye_action tag=$RFI action=block notify=off; }
在nginx.conf中,需要进行安全过滤的location上设置naxsi的相关命令并指定白名单文件的位置:
location /cn { error_log logs/error.cn.log; ... ... LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl "/RequestDenied"; // 1.5.3-1以及以后版本不需要此命令 include wl.conf; ## check rules CheckRule "$XSS >= 4" BLOCK; CheckRule "$TRAVERSAL >= 4" BLOCK; CheckRule "$EVADE >= 8" BLOCK; CheckRule "$UPLOAD >= 8" BLOCK; CheckRule "$RFI >= 8" BLOCK; CheckRule "$SQL >= 8" BLOCK; }
1.5.3-1以后版本不需要此location,使用naxsi_neteye_action来处理动作。
写一个/RequestDenied location,当然名字可以任意,需要和DeniedUrl指令的参数一致即可:
location /RequestDenied { return 403; }
阻断的请求会被送到这个Location中,你可以在这里做任何你想做的事情,例子中简单的返回了403。
此时naxsi处于学习状态。
遍历整个网站,让naxsi充分学习,以便生成尽可能完整的学习记录。
注意,在这个阶段所有命中规则的攻击都不会被阻断,而是会被记录到senginx的error.log中,在这个例子中,我定义了一个location的error.log,名为error.cn.log,因此所有的naxsi记录都会记录到error.cn.log中。另外一点,在这个阶段,需要确保你的网站流量是纯净的,也就是不能混杂有攻击流量,否则攻击流量会被记录到白名单中,从而导致naxsi对这些攻击类型无法识别。
执行如下命令:
注意: 如果你不想手动敲下面的这些命令,你可以选择使用我们提供的一个perl脚本来自动完成这些工作,在这里下载此脚本:gen-wl.pl。(后续此脚本会随senginx包一同发布,但目前没有)。将此脚本放在/path/to/senginx/naxsi/contrib/naxsi_ui目录下,并执行: ./gen-wl.pl /path/to/error.log /path/to/whitelist/file 你也可以参考naxsi的官方文档来使用一个守护进程进行自动学习以及自动的白名单生成,请参考这里:Naxsi Learning Mode |
以下是手动分步执行的步骤:
cd /path/to/senginx/naxsi/contrib/naxsi-ui/ sudo python ./nx_intercept.py -c ./naxsi-ui.conf -l /path/to/location's/error.log -n sudo python nx_extract.py -c ./naxsi-ui.conf -o
其中nx_intercept.py的-l参数需要指定error.log文件的位置。
最后,将nx_extract.py命令的输出的最后部分,形如:
########### Optimized Rules Suggestion ################## # total_count:1 (50.0%), peer_count:1 (100.0%) | , in stuff BasicRule wl:1015 "mz:$URL:/en/load.php|$ARGS_VAR:modules"; # total_count:1 (50.0%), peer_count:1 (100.0%) | mysql keyword (|) BasicRule wl:1005 "mz:$URL:/en/load.php|$ARGS_VAR:modules";
复制到之前创建的wl.conf中去。
查看wl.conf,如果有白名单的话,会产生形如:
BasicRule wl:1000 "mz:$URL:/cn/select * from|URL";
的行(可能有多个,视学习情况而定)。
编辑nginx.conf,将LearningMode注释掉,最后reload senginx,此时naxsi进入保护状态,后续的攻击会被以error级别的日志记录到error log中。
Zeuux © 2024
京ICP备05028076号