Windows下,Apache安全防护WAF,安装配置mod_security模块

一,在不改动现有系统任何代码的前提下,防止SQL注入

比如下面这个场景:服务器中难免有些安全性比较差的程序,比如使用了老版本的dedecms。或者某个程序引用的第三方插件,在SQL处理上,没有使用参数绑定,而是直接拼接字符串,还没有类型检查。 这时可以考虑使用WAF (Web Application Firewall)。

 

二,如何选择

市面上的WAF有三种形态,硬件Web防火墙、Web防护软件和云Waf。 最为灵活的方案是选择Web防护软件。

 

三,安装配置

服务器环境Windows server 2008, Apache是PHP官方推荐的Windows二进制版 http://www.apachelounge.com/ 。

首先安装好Apache 2.4,下载对应版本的mod_security http://www.apachelounge.com/download/ 。

我下载的是 mod_security-2.9.2-win64-VC15.zip 解压后,里面有两个文件夹,mod_security和mlogc中readme.txt,有安装过程。

### mod_security中Readme.txt的大致内容:

安装mod_security-2.9.2
拷贝 mod_security2.so 到你的 apache/modules 文件夹
拷贝 yajl.dll and libcurl.dll 到你的 apache/bin 文件夹

配置文件 httpd.conf:
取消注释,
LoadModule security2_module modules/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so

# 快速开始:
SecRuleEngine On
SecDefaultAction "deny,phase:2,status:403"
## -- 规则--
SecRule ARGS "\.\./" "t:normalizePathWin,id:50904,severity:4,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,msg:'Drive Access'" 

重启apache,在浏览器打开如下地址,会提示403拒绝访问

http://www.xxxx.com/?abc=../../ 



四,安全防护

添加规则要参考,http://www.modsecurity.org/rules.html ,官网推荐 https://github.com/SpiderLabs/owasp-modsecurity-crs

下载规则,解压到 |apache\conf\modsecurity-crs下。

设置配置文件httpd.conf

LoadModule security2_module modules/mod_security2.so
# Rules and documentation : http://www.modsecurity.org/
SecRuleEngine On
SecDefaultAction "deny,phase:2,status:403"
## -- rule --
SecRule ARGS "\.\./" "t:normalizePathWin,id:50904,severity:4,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,msg:'Drive Access'" 

<IfModule security2_module>
  Include conf/modsecurity-crs/crs-setup.conf
  Include conf/modsecurity-crs/rules/*.conf
</IfModule>


五,安全防护日志

mlogc可以记录所有被规则拦截的日志。配置如下:

<IfModule security2_module>
  Include conf/modsecurity-crs/crs-setup.conf
  Include conf/modsecurity-crs/rules/*.conf

  # mlogc.exe 配置文件
  SecDataDir logs
  SecAuditEngine RelevantOnly
  SecAuditLogRelevantStatus "^(?:5|4\d[^4])"
  SecAuditLogType Concurrent
  SecAuditLogParts ABCDEFGHZ
  SecAuditLogStorageDir logs/mod_security/
  SecAuditLog "${SRVROOT}/bin/mlogc.exe"
</IfModule>

 

六,测试

下面是安全狗的防护日志,可以用来测试一下mod_security和OWASP

/?ac=digg&ac2=&id=1&tab=vod union select  null,md5(1231412414) 拦截原因:防止SQL联合查询,可疑内容:Union
/?ss=x and 1=1,拦截原因:防止简单的and or 方式注入
/?ss=information_schema。。。,拦截原因:非法访问information_schema数据库
/?typeArr[1' or `@\'`=1 and (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((Select pwd from dede_admin limit 1,1),1,62)))a from information_schema.tables group by a)b) and ']=11&&kwtype=0&q=1111&searchtype=title,拦截原因:防止对数据库进行数据查询操作,可疑内容:Select pwd from dede_admin limit 
/?typeArr[1' or `@\'`=1 and (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((Select uname from dede_admin limit 1,1),1,62)))a from information_schema.tables group by a)b) and ']=11&&kwtype=0&q=1111&searchtype=title,拦截原因:防止对数据库进行数据查询操作,可疑内容:Select uname from dede_admin limit 
/?aid=1&_FILES[type][name]&_FILES[type][size]&_FILES[type][type]&_FILES[type][tmp_name]=aa\'and char(@`'`)  Union*/  SeLect*/ 1,2,3,group_concat(userid,0x23,pwd),5,6,7,8,9 from `#@__admin`#,拦截原因:防止SQL联合查询,可疑内容:Union    SeLect  1,2,3,group_concat(userid,0x23,pwd),5,6,7,8,9 from `#@__admin`#

都可以被拦截到,现在apache/logs/mod_security下面生成的防护日志如下:

--4d070000-A--
[28/Apr/2018:16:24:53 +0800] WuQv1aUHpaQ0n2CMGvixFAAAAJE 171.14.39.141 56190 122.114.245.230 443
--4d070000-B--
GET /?ss=information_schema HTTP/1.1
Host: javascript.net.cn
...

--4d070000-F--
HTTP/1.1 403 Forbidden
Content-Length: 209
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

--4d070000-E--

--4d070000-H--
Message: Warning. Pattern match "(?i:\\b(?:m(?:s(?:ysaccessobjects|ysaces|ysobjects|ysqueries|ysrelationships|ysaccessstorage|ysaccessxml|ysmodules|ysmodules2|db)|aster\\.\\.sysdatabases|ysql\\.db)\\b|s(?:ys(?:\\.database_name|aux)\\b|chema(?:\\W*\\(|_name\\b)|qlite(_temp)?_master\\b) ..." at ARGS:ss. [file "D:/ap/apache/conf/modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "100"] [id "942140"] [rev "3"] [msg "SQL Injection Attack: Common DB Names Detected"] [data "Matched 
...

Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/); OWASP_CRS/3.0.2.
Server: Apache/2.4.33 (Win64) OpenSSL/1.1.0h PHP/7.2.4 mod_evasive2/1.10.2
Engine-Mode: "ENABLED"

--4d070000-Z--

 

 

修改时间 2018-04-29

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
什么是 XSS 攻击
Wordpress 使用 tag 标签获取文章列表的方法
Node.js 控制台进度条实现原理
SQL 注入的生命力
WordPress 评论表单函数 comment_form()
WordPress 常用接口
WordPress 分页
Node.js 使用 Jest 和 supertest 做接口测试