ModSecurity中文手册.docx
《ModSecurity中文手册.docx》由会员分享,可在线阅读,更多相关《ModSecurity中文手册.docx(48页珍藏版)》请在冰豆网上搜索。
ModSecurity中文手册
ModSecurity中文手册
一、介绍
引言
ModSecurity是一个Web应用防火墙(WAF)。
当前已经有超过70%的攻击发生在网络应用层,各级组织急需要能够保证他们的系统安全性的帮助。
WAF系统的部署,可以为web应用增加一个外部安全层来检测或防止攻击。
针对一系列的攻击,ModSecurity为web应用提供了强大的保护,并对HTTP流量进行监测和实时分析,这些都只是很少或是根本没有影响系统的基础设施。
HTTP流量记录
web服务器已有的日志功能已经足够进行访问请求分析,但是就web的应用分析还有些不足,特别是大多情况下没办法记录下请求体。
你的对手很清楚这一点,所以很多时候的攻击是通过POST请求产生,并导致您的系统失明。
ModSecurity充分的获取HTTP交互中的所以内容,并记录完整的请求和响应。
其日志功能可以允许您更细致的做出判断究竟什么是登录的时候,并确保相关的数据都被记录下来。
一些请求和响应中的某些关键字段可能包含敏感数据,ModSecurity可以被配置成在记录这些审计日志前隐藏它。
实时监控和攻击检测
除了提供记录日志功能外,ModSecurity还能实时的监控HTTP的流量以检测攻击。
在某些时候,ModSecurity做为一个WEB入侵检测工具,可以让你对发生在WEB系统上的一些可疑事件做出响应。
攻击防御和及时修补
ModSecurity能够立即针对你的WEB应用系统进行攻击防御,有三种通用的方法:
1、消极(negative)安全模型:
消极安全模型监控那些异常的、不常用的和通用的WEB攻击类请求。
它统计每个请求的有关IP地址、应该连接、和用户帐户的异常分数,当出现较高的异常分数时,会记录日志并完全的阻止访问。
2、积极安全模开型:
部署积极安全模型后,只有那些明确的请求被允许通过,其它的一律禁止。
这个模式要求你对需要保护的WEB应用要非常的了解。
因此积极安全模式最好是用于那种大量访问却很少更新的系统,这样才能使这种模型的维护工作量降到最低。
3、已知漏洞攻击:
其规则语言使ModSecurity成为一个理想的外部修补工具,外部修补(有时是指虚拟修补)可以减少机会之窗。
一些组织修补这些应用的漏洞通常需要几周的时间,使用ModSecurity,应用系统可以从外部修补,根本不用改应用的源码(甚至时不用去管它),可以保证你的系统安全直到有一个合适的补丁来应用到系统中。
灵活的规则引擎
灵活的规则引擎是ModSecurity的核心,其实现了ModSecurity的规则语言,这是一个专用的程序语言设计的用于处理HTTP的传输数据。
ModSecurity规则语言被设计的简单易用,非常的灵活:
通用的操作是简单的,而复杂的操作也是可以实现的。
经过认证的ModSecurity规则,放在ModSecurity中,包含了一整套规则,它实现了通用目的强化、协议正规化和对一些通用web应用安全问题的检测。
大量评论认为,这些规则可以用于学习研究使用。
嵌入式模式部署
ModSecurity是一个可嵌入式的WEB应用防火墙,意思就是它可以做为以apache为基础的已经提供WEB服务的WEB服务器的一部分。
这样的部署译意风一些特殊的优势:
1、不改变已有的网络结构。
只需要花几分钟就可以为你的WEB服务器添加ModSecurity,而且由于它默认被设计为完全的被动方式,你可以自由的逐步部署并且只使用你需要的特性。
同样也可以根据你的需要轻松的删除或停用它。
2、不存在单点故障。
与网络设备部署方式不同,你不会给你的系统带来新的故障点。
3、绝对支持负载均衡。
因为它以嵌入方式运行在WEB服务器上,ModSecurity会自动的利用附加的负载均衡特性。
你不需要考虑负载均衡,除非你的系统本来就需要它。
4、极少开销。
因为它在WEB服务器进程内工作,不会带来网络间接通信的负载,而且只进行最小的分析和数据交换开销。
5、加密或压缩内容没问题。
许多IDS系统分析SSL流量的时候很困难,但对于ModSecurity没有麻烦,因为它工作于已解密和解压的数据环节。
基于网络的部署
在基于apache的反向代理模式上ModSecurity同样能工作的很好,我们很多客户选择这样做。
在这种情形下,装了ModSecurity的可以保护任一一种WEB服务器(即使它不是apache的)。
可移植性
众所周知,ModSecurity可以很好的工作在众多操作系统上,我们的用户已经将它成功运行在Linux,Windows,Solaris,FreeBSD,OpenBSD,NetBSD,AIX,MacOSX,和HP-UX等系统上。
许可
ModSecurity有两种许可方式。
用户可以选择在GNU许可第二版(本发布中包含这个许可文本)下免费的使用这个软件产品。
还有一系列的商业许可可供选择,同时会有一些商业支持合同。
有关更详细的商业许可信息请联系BreachSecurity。
注意
ModSecurity,mod_security,ModSecurityPro,和ModSecurityCoreRules等都是BreachSecurity,Inc.的商标或注册商标。
二、ModSecurityCoreRules
概述
ModSecurity是一个WEB应用防火墙引擎,自身所提供的保护非常少。
为了变得更有用些,ModSecurity必须启用规则配置。
为了让用户能够充分利用ModSecurity离开方块,BreachSecurity,Inc.为ModSecurity2.x提供了一套免费的认证规则集。
和入侵检测及防御系统不一样,它们依赖于具体的签名过的已知漏洞,而这一核心规则却是为从网络应用中发现的不知名的漏洞提供一般的保护,通常这些漏洞大多数情况下都是自定义编码的。
这一核心规则有了大量的评论,从而使得这些能够被用来做ModSecurity的部署向导。
最新的核心规则可能通过ModeSecurity的站点找到-http:
//www.modsecurity.org/projects/rules。
核心规则内容
为了提供一般WEB应用保护,核心规则使用以下技术:
∙HTTP保护-HTTP协议正规划检测,并启用本地有效策略
∙一般WEB攻击保护-检测一般WEB应用的安全攻击
∙自动检测-检测机器人、爬虫、扫描器和其他的表面恶意行动
∙木马检测-检测木马程序进入
∙过失隐藏-伪装服务器发出错误消息
三、安装
安装
ModSecurity安装过程包含以下几步:
1、ModSecurity2.x工作于Apache2.0.x或者更高版本
2、确认您已经安装了mod_unique_id。
mod_unique_id是apache的httpd中的一个包
3、服务器中还没有libxml2的话,请安装它的最新版.
http:
//xmlsoft.org/downloads.html
4、如果服务中还没有安装Lua,而且你将需要使用的话,请安装5.1.x分支的最新版
http:
//www.lua.org/download.html
注意ModSecurity需要的是动态库,而采用源代码编译时默认得不到这些,所以最好采用二进制发布版本。
5、停止apache的httpd服务
6、解开ModSecurity安装包
7、Unix(或者类Unix)操作系统和Windows上进行不同的构建
ØUnix
a、运行configure脚本生成Makefile文件,通常不需要设置选项
./configure
更多的定制使用配置选项(使用./configure--help可以得到完整列表),但通常你只需要使用--with-apxs选项指定apache的httpd安装时的apxs的位置即可。
./configure--with-apxs=/path/to/httpd-2.x.y/bin/apxs
b、编译:
make
c、可选的测试:
maketest
注意:
这一步还是带有一点点试验性质,如果发现问题,请把构建过程中的所有输出发送到支持列表,大部分常见问题是找不到所需要的头和库文件。
d、可选构建ModSecurity的日志收集器:
makemlogc
e、可选安装mlogc:
查检发布版本包含在apache2/mlogc-src目录下的INSTALL文件
f、安装ModSecurity模块:
makeinstall
ØWindows(MSVC++8)
a、编辑Makefile.win文件,配置apache主目录和二进制目录
b、编译:
nmake-fMakefile.win
c、安装ModSecurity模块:
nmake-fMakefile.wininstall
d、拷贝libxml2.dll和lua5.1.dll到apache的二进制目录,当然也可以象下面的操作那样使用LoadFile命令加载那些库文件。
8、编辑apachehttpd的主配置文件(通常是httpd.conf)
OnUNIX(在Windows上,如果你没有按上述规定拷贝DLL文件话也可以)上你必须在ModSecurity之前加载libxml2和lua5.1,参考如下操作:
LoadFile/usr/lib/libxml2.so
LoadFile/usr/lib/liblua5.1.so
按如下加载ModSecurity
LoadModulesecurity2_modulesmodules/mod_security2.so
9、配置ModSecurity
10、启动apachehttpd
11、到目前为止,你应该已经装好ModSecurity2.x并且运行它了。
注意:
如果你是自己编译的apache,那你或许经历了在PCRE上编译ModSecurity的问题,这是因为apache带上了PCRE,但通常PCRE的库文件又是由系统提供的,我希望绝大多数的供应商打包apache发布版本时配置使用外部PCRE的库文件(所以这不应成为问题)
您想避免使用apache捆绑的PCRE库和ModSecurity使用的是系统提供的库,很简单的方法就是重新编译apach,并使用系统提供的PCRE库(或者你可以下载个最新版本的PCRE编译一下),你也可以在编译的时候使用--with-pcre开关。
如果你不能重新编译apache,那么为了获得ModSecurity的编译成功,你还是需要获得捆绑的PCRE头文件(这可以在apache的代码中找到)并修改INCLUDE路径(在上述第7步中做)来指向它(通过ModSecurity的--with-pcre配置选项)。
你注意,如果你的apache使用的是外部PCRE,那你可以在编译ModSecurity时使用WITH_PCRE_STUDY定义,这将给你的服务器处理正则表达式时有一个轻微的性能提高。
四、配置指令
(一)
以下章节列出ModSecurity指令的纲要,大部分的ModSecurity指令可以用于Apache带有范围的指令中,如VirtualHost,Location,LocationMatch,Directory等。
当然也还有其他的,只能在主配置文件中使用一次。
这些信息在下述范围章节中指定,下述的版本指令章节中给出第一个版本可用给定的指令。
这些规则除了核心规则文件之外,应当做为一个独立的于httpd.conf之外的配置文件,通过apache的include指定包含在其中。
如此可以方便更新或迁移规则,如果你要创建自己的规则,作为核心规则使用,你应该创建一个文件叫modsecurity_crs_15_customrules.conf当作核心规则放在相同的目录下。
使用这个文件名,你的自定义规则会在标准的ModSecurity规则之后被加载,但会在其他规则之前,这可以使得您的规则在您需要实施具体的“允许”规则或纠正任务误报的核规则时得到优先评估,从而使其真正用到你的网站系统上。
注意:
我们鼓励您不要去修改核心规则文件,但你可以把所有的改动(就象SecRuleRemoveByID等)放到自己定义的文件中,这样可以让您很方便的从ModSecurity站点升级新的核心规则文件。
SecAction
描述:
无条件执行动作列表中的第一个也是唯一的一个参数,只接受一个参数,其句法规则与SecRule的第三个参数相同
语法:
SecActionaction1,action2,action3
示例:
SecActionnolog,initcol:
RESOURCE=%{REQUEST_FILENAME}
阶段:
所有
范围:
所有
版本:
2.0.0
备注:
无
SecAction是您想无条件执行一个动作时的最好选择,这是有条件基于对请求/响应数据的检查导致明确的控制产生的一般动作,当你想运行一些特定的动作如initcol来初始化搜集时这是一个很有用的指令。
SecArgumentSeparator
描述:
指定的字符做为application/x-www-form-urlencoded内容的分隔符,默认是&,非常少的情况下应用会使用分号(;)。
语法:
SecArgumentSeparatorcharacter
示例:
SecArgumentSeparator;
阶段:
所有
范围:
Main
版本:
2.0.0
备注:
无
这个指令用于后台WEB应用在使用非标准的参数分隔符,如果没有在每一个WEB应用中合理设置这个指令,那么ModSecurity可能无法适当的分析所有的参数,并且规则匹配的效果可能会显著的降低。
SecAuditEngine
描述:
配置审计日志引擎的开启与否
语法:
SecAuditEngineOn|Off|RelevantOnly
示例:
SecAuditEngineOn
阶段:
N/A
范围:
任意
版本:
2.0.0
备注:
在当前事务可以通过ctl操作进行设置或修改
举例:
以下例子说明不同的审计指令一起使用
SecAuditEngineRelevantOnly
SecAuditLoglogs/audit/audit.log
SecAuditLogPartsABCFHZ
SecAuditLogTypeconcurrent
SecAuditLogStorageDirlogs/audit
SecAuditLogRelevantStatus^(?
:
5|4\d[^4])
允许值如下:
On-默认情况下记录所有事务的日志
Off-默认情况下不记录所有事务的日志
RelevantOnly-默认只记录事务中由warning或error触发的日志,或者记录一些特意考虑过的状态码
SecAuditLog
描述:
定义主审计日志文件路径
语法:
SecAuditLog/path/to/auditlog
示例:
SecAuditLog/usr/local/apache/logs/audit.log
阶段:
N/A
范围:
Any
版本:
2.0.0
备注:
伴随服务器运行开时,这个文件会以root打开,你不能为非root权限的用户对这个文件或存储这个文件的目录有可写权限。
如果串行审计日志格式使用后,这个文件将被用作审计日志条目的存储。
如果同时审计日志格式使用这个文件那将被当作索引,并包含所有的审计日志文件创建信息。
如果你计划使用同时审计日志并发送审计日志数据到远程主机或商业ModSecurity管理平台,那么你需要配置和使用ModSecurity日志搜集器(mlogc)并使用下述格式去得到审计日志。
SecAuditLog"|/path/to/mlogc/path/to/mlogc.conf"
五、配置指令
(二)
SecAuditLog2
描述:
定义同时日志启用下的第二审计日志索引文件路径
语法:
SecAuditLog2/path/to/auditlog2
示例:
SecAuditLog2/usr/local/apache/logs/audit2.log
阶段:
N/A
范围:
Any
版本:
2.1.2
备注:
在本指令使用之前必须通过SecAuditLog定义主审计日志,另外这个文件仅用于当同时审计日志使用时复制主审计索引文件,不能用于非同时审计日志的情况。
SecAuditLogParts
描述:
定义每个事务中记录到审计日志中的部分。
每部分以一个独立的字母表示,当某个字母出现在列表中,也就是指每个事务中的相同部分会被记录,全部列表见下文。
语法:
SecAuditLogPartsPARTS
示例:
SecAuditLogPartsABCFHZ
阶段:
N/A
范围:
Any
版本:
2.0.0
备注:
在这个时候ModSecurity不记录apache的见用响应内容(如404),或者服务器和日期的响应头。
默认:
ABCFHZ.
可用的审计日志部分:
A-审计日志标题(强制的)
B-请求标题
C-请求体(目前仅针对请求体存在,并且ModSecurity已经配置成拦截)
D-为中间人响应头保留,暂未实现
E-中间人响应体(目前仅对配置了拦截响应体和配置审计日志引擎记录有效)。
中间人响应体和实际的响应体相同,除非ModSecurity拦截了中间人响应体,这种情况下,实际响应体会包含出错信息(可能是apache的默认错误信息,也可能是出错文档页面)。
F-最终响应头(除了日期和服务器标题以外的被apache添加的近期内容传递信息)。
G-为实际响应体保留,暂未实现。
H-审计日志索引
I-这C部分的替换,使用multipart/form-data编码时,在所有的异常情形下会记录与C相同的数据,在这种情况下,会记录假的application/x-www-form-urlencoded内容,这包含参数的相关信息,但不是这个文件的。
如果你不想用文件(通常很大)来存储你的审计日志,这是很方便的。
J-保留。
实现后,这部分会包含文件使用multipart/form-data编码上传的信息。
K-这部分包含一个完整的列表,按顺序匹配(每行一个),这些规则是完全合格的,从而表明继承默认的动作和操作,从2.5.0开始支持。
Z-最终分界,意味着是条目的最后(强制的)
SecAuditLogRelevantStatus
描述:
配置哪些响应状态码与审计日志的目的密切相关
语法:
SecAuditLogRelevantStatusREGEX
示例:
SecAuditLogRelevantStatus^(?
:
5|4\d[^4])
阶段:
N/A
范围:
Any
版本:
2.0.0
备注:
必须将SecAuditEngine设置为RelevantOnly,其参数是个正则表达式。
这个指令最主要的目的是允许你配置审计产生特殊HTTP响应状态码的唯一事务,这个指令通常用于减少审计日志文件的总体大小。
记住一点,如果使用了这个参数,那么返回状态码是200的成功攻击事件不会记录。
SecAuditLogStorageDir
描述:
配置同时审计日志条目存储时的路径
语法:
SecAuditLogStorageDir/path/to/storage/dir
示例:
SecAuditLogStorageDir/usr/local/apache/logs/audit
阶段:
N/A
范围:
Any
版本:
2.0.0
备注:
必须同时设置SecAuditLogType,启动apache前,需要先创建目录,而且必须让服务器用户运行时可以新建文件。
尽管有了记录日志的机制,还需要确保指定的本地文件系统上有足够的磁盘究竟,并且不是在根分区上。
SecAuditLogType
描述:
配置使用审计日志记录机制的类型
语法:
SecAuditLogTypeSerial|Concurrent
示例:
SecAuditLogTypeSerial
阶段:
N/A
范围:
Any
版本:
2.0.0
备注:
如果使用Concurrent类型必须指定SecAuditLogStorageDir
可用的值:
Serial-所有的审计日志条目都被存储在主审计日志记录文件中,随意使用是很方便,但是它很慢,因为任何时候只有一个文件被打开也只能写入一条审计日志条目。
Concurrent-审计日志条目被存储于不同的文件中,每个事务一个,如果你要把审计日志数据发送到远程ModSecurity控制主机上就使用Concurrent日志模式。
六、配置指令(三)
SecCacheTransformations
(Deprecated/Experimental)
描述:
控制transformations的缓存,2.5.6开始,缓存是默认关闭的,当时都不赞成开启并降低为实验性。
语法:
SecCacheTransformationsOn|Off[options]
示例:
SecCacheTransformationsOn"minlen:
64,maxlen:
0"
阶段:
N/A
范围:
Any
版本:
2.5.0
备注:
N/A
第一个参数:
On-缓存变化(每阶段,每次变化)允许相同的变化只执行一次(默认的)
Off-不缓存任务变化,强制所有的变化都被每一条规则实行生效
有以下可选项(逗号分隔)
incremental:
on|off-启用这个选项后,缓存每一个变化,而不只是最后一个变化(默认:
off)
maxitems:
N-缓存N个以内的变化,超过时不再缓存,为0时表示unlimited,对于限制缓存一个使用大数字的ARGS表单这个选项是有用的。
(默认:
512)
minlen:
N-缓存变化的值的最小长度(默认:
32)
maxlen:
N-缓存变化的值的最大长度,为0时表示unlimited(默认:
1024)
七、配置指令(四)
SecChrootDir
描述:
配置WEB服务器工作的安全目录
语法:
SecChrootDir/path/to/chroot/dir
示例:
SecChrootDir/chroot
阶段:
N/A
范围:
Main
版本:
2.0.0
备注:
这个功能在Windows系统的版本上不可用,ModSecurity提供的内部chroot功能在简单配置上工作的很好,举个最简单的配置例子,apache只提供静态页面服务或使用模块提供脚本运行功能。
在一些复杂设置时你会遇到一些问题:
1、DNS查询无法工作(这是因为这一功能在chroot操作后,一经查询就要求加载一个共享库)
2、你不能使用PHP发送邮件,因为PHP使用sendmail但sendmail在安全目录之外
3、某些情况下apache会莫名其妙的不干活了(重载)
你需要小心,这个内部chroot功能可能不是100%可用。
由于大量默认的或是第三方为apacheweb服务器提供的模块,它们不可能去校验在内部chroot下是否可用,在没有被限制在安全目录中时,一个apache的模块,工作的很正常。
特别是如果你正使用的模块在模块初始化阶段进行fork的(如mod_fastcgi,mod_fcgid,mod_cgid),建议你测试每个apache进程