ModSecurity的规则因为奇怪的正则(可读性差?正则都很天书地说!)及被绕过案例(哪个WAF没有被绕过的经历呢?),还有性能啥的,被不少的安全人员围攻,但从架构层面来说,是款非常优秀的WAF,对构造我们自己的WAF非常具有借鉴性。
对安全人员而言,WAF貌似最有价值的是规则,我们来看看ModSecurity CRS规则集的组织结构。ModSecurity CRS 规则集包括一个配置文件与四个部分(基础规则集、SLR规则集、可选规则集、实验性质规则集)
配置文件
modsecurity_crs_10_setup.conf
第一部分:基础规则集
modsecurity_crs_20_protocol_violations.conf HTTP协议规范相关规则 modsecurity_crs_21_protocol_anomalies.conf HTTP协议规范相关规则 modsecurity_crs_23_request_limits.conf HTTP协议大小长度限制相关规则 modsecurity_crs_30_http_policy.conf HTTP协议白名单相关规则 modsecurity_crs_35_bad_robots.conf 恶意扫描器与爬虫规则 modsecurity_crs_40_generic_attacks.conf 常见的攻击例如命令执行,代码执行,注入,文件包含、敏感信息泄露、会话固定、HTTP响应拆分等相关规则 modsecurity_crs_41_sql_injection_attacks.conf SQL注入相关规则(竟然有一条MongoDB注入的规则,很全) modsecurity_crs_41_xss_attacks.conf XSS相关规则 modsecurity_crs_42_tight_security.conf 目录遍历相关规则 modsecurity_crs_45_trojans.conf webshell相关规则 modsecurity_crs_47_common_exceptions.conf Apache异常相关规则 modsecurity_crs_49_inbound_blocking.conf 协同防御相关规则 modsecurity_crs_50_outbound.conf 检测response_body中的错误信息,警告信息,列目录信息
modsecurity_crs_59_outbound_blocking.conf 协同防御相关规则 modsecurity_crs_60_correlation.conf 协同防御相关规则
第二部分:SLR规则集
来自确定APP的PoC,不会误报,检测方法是先检查当前请求的文件路径是否出现在da
modsecurity_crs_46_slr_et_joomla_attacks.conf JOOMLA应用的各种漏洞规则 modsecurity_crs_46_slr_et_lfi_attacks.conf 各种APP的本地文件包含相关规则 modsecurity_crs_46_slr_et_phpbb_attacks.conf PHPBB应用的各种漏洞规则 modsecurity_crs_46_slr_et_rfi_attacks.conf 各种APP的远程文件包含相关规则 modsecurity_crs_46_slr_et_sqli_attacks.conf 各种APP的SQL注入相关规则 modsecurity_crs_46_slr_et_wordpress_attacks.conf WORDPRESS应用的各种漏洞规则 modsecurity_crs_46_slr_et_xss_attacks.conf 各种APP的XSS相关规则
第三部分:可选规则集
modsecurity_crs_10_ignore_static.conf 静态文件不过WAF检测的相关规则 modsecurity_crs_11_avs_traffic.conf AVS(授权的漏洞扫描器)的IP白名单规则 modsecurity_crs_13_xml_enabler.conf 请求体启用XML解析处理 modsecurity_crs_16_authentication_tracking.conf 记录登陆成功与失败的请求
modsecurity_crs_16_session_hijacking.conf 会话劫持检测 modsecurity_crs_16_username_tracking.conf 密码复杂度检测
modsecurity_crs_25_cc_known.conf CreditCard验证
modsecurity_crs_42_comment_spam.conf 垃圾评论检测 modsecurity_crs_43_csrf_protection.conf 与modsecurity_crs_16_session_hijacking.conf联合检测,使用内容注入动作append注入CSRF Token
modsecurity_crs_46_av_scanning.conf 使用外部脚本扫描病毒 modsecurity_crs_47_skip_outbound_checks.conf modsecurity_crs_10_ignore_static.conf的补充
modsecurity_crs_49_header_tagging.conf 将WAF规则命中情况配合Apache RequestHeader指令注入到请求头中,以供后续应用进一步处理 modsecurity_crs_55_application_defects.conf 安全头(X-XSS-Protection,X-FRAME-OPTIONS,X-Content-Type-Options)设置,安全Cookie设置(Domain,httponly,secure),字符集设置等规则 modsecurity_crs_55_marketing.conf记录MSN/Google/Yahoo robot情况
第四部分:实验性规则集
modsecurity_crs_11_brute_force.conf 防御暴力破解相关规则 modsecurity_crs_11_dos_protection.conf 防DoS攻击相关规则 modsecurity_crs_11_proxy_abuse.conf 检测X-Forwarded-For是否是恶意代理IP,IP黑名单
modsecurity_crs_11_slow_dos_protection.conf Slow HTTP DoS攻击规则
modsecurity_crs_25_cc_track_pan.conf 检测响应体credit card信息
modsecurity_crs_40_http_parameter_pollution.conf 检测参数污染 modsecurity_crs_42_csp_enforcement.conf CSP安全策略设置
modsecurity_crs_48_bayes_analysis.conf 使用外部脚本采取贝叶斯分析方法分析HTTP请求,区分正常与恶意请求 modsecurity_crs_55_response_profiling.conf 使用外部脚本将响应体中的恶意内容替换为空 modsecurity_crs_56_pvi_checks.conf使用外部脚本检测 REQUEST_FILENAME是否在osvdb漏洞库中
modsecurity_crs_61_ip_forensics.conf 使用外部脚本收集IP的域名、GEO等信息
modsecurity_crs_40_appsensor_detection_point_2.0_setup.conf APPSENSOR检测设置文件
modsecurity_crs_40_appsensor_detection_point_3.0_end.conf APPSENSOR检测设置文件
modsecurity_crs_16_scanner_integration.conf 对扫描器设置IP白名单,并调用扫描器API来进行检测
modsecurity_crs_46_scanner_integration.conf
使用 modsecurity_crs_40_appsensor_detection_point_2.0_setup.conf, modsecurity_crs_40_appsensor_detection_point_3.0_end.conf 来跟踪 XSS漏洞参数与SQLI漏洞参数modsecurity_crs_40_appsensor_detection_point_2.1_request_exception.conf 使用外部脚本检测请求方法,参数个数,参数名字,参数长度,参数字符等限制
modsecurity_crs_40_appsensor_detection_point_2.9_honeytrap.conf 使用隐藏参数设置蜜罐
ModSecurity CRS单条规则的内容,请参看ModSecurity CRS详解
扫描器scanner恶意爬虫crawlerwebshell (Trojans) shell上传:见文件上传 shell连接:get/post/cookieSQLi/BlindSQLI(Reflected SQLi, Stored SQLi) GET POST Referer Cookie X_Forwarded_For UserAgent Basic-AuthorizationLFI/RFI get lfi/rfi post lfi/rfi cookie lrfi/rfi data://URI php://input php://filter get directory traversal post directory traversal File Upload php asp(x) jspRCE struts2 nginx CVE PHP CGI get rce post rceXSS( Reflected XSS, Stored XSS, DOM XSS) /CSRF/flash xss/json xss GET POSTcode injection get co de injection post co de injection XPath injectionLDAP injectionXML injectionexpression language injection server side includes injectionserver side request forgeryHTTP响应拆分CRLF注入服务器解析漏洞敏感信息泄漏info leak svn/cvs 后台暴露http parameter pollution参数污染brute force暴力破解(weak password)DoSslow HTTP DoSURL Redirectsession fixation会话固定/ easily-guessable session IDs会话劫持垃圾评论防病毒access control(vertical, horizontal)/ Unauthorized File Exposure(download)logic flaws逻辑漏洞协议异常 不合规范的RequestLine 异常文件名 请求体解析错误 multipart请求体解析错误 Content-Length异常 Content-Enoding异常 Range异常 Request-Range异常 Expect异常 Connection异常 Pragma, Cache-Control Host异常 User -Agent异常 Accpet异常 X-Forwarded-For异常 编码异常,url编码异常,utf-8异常 charset设置缺失或不一致 Cookie Domain/httponly/secure设置错误 安全头设置错误 X-XSS-Protection, X-FRAME-OPTIONS, X-Content-Type-Options协议限制 允许请求方法 GET/POST/HEAD 允许协议版本HTTP/1.0 or HTTP/1.1 允许Content-Type 允许的文件后缀名 允许的请求头 长度限制 参数名长度限制 参数值长度限制 参数个数限制 参数的总大小 上传文件大小限制 上传文件总大小限制 编码限制IP白名单/黑名单/恶意代理