Apache ModSecurity 基础介绍

转自:https://javascript.net.cn/article?id=449

一,主要功能:

SQL Injection (SQLi):阻止SQL注入

Cross Site Scripting (XSS):阻止跨站脚本攻击

Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击

Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击

Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击

PHP Code Injectiod:阻止PHP代码注入

HTTP Protocol Violations:阻止违反HTTP协议的恶意访问

HTTPoxy:阻止利用远程代理感染漏洞进行攻击

Sshllshock:阻止利用Shellshock漏洞进行攻击

Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击

Scanner Detection:阻止黑客扫描网站

Metadata/Error Leakages:阻止源代码/错误信息泄露

Project Honey Pot Blacklist:蜜罐项目黑名单

GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断

二,阶段处理分为 5 个阶段:

Request Header(phase:1):处理 requesst line 和 request headers

Request Body(phase:2):处理 request body

Response Header(phase:3):处理 response headers

Response Body(phase:4):处理 response body

Logging(phase:5):日志记录,添加header

三,添加例外:

修改modsecurity.conf配置

a、通过规则id: 添加SecRuleRemoveById id

b、SecRuleRemoveByMsg指令:通过Rule Msg禁用指定规则

c、url加白 :对指定路径关闭WAF检测/或只记录不拦截

SecRuleEngine DetectionOnly (On或者Off)

四,规则新规则:

黑名单

#SecRule REMOTE_ADDR “@pmFromFile host.deny.data” “id:10087,phase:1,log,auditlog,deny,status:403,msg:‘jinzhifangwen’”

#SecRule REMOTE_ADDR “@pmFromFile host.deny.data” “id:10088,phase:2,log,auditlog,deny,status:403,msg:‘jinzhifangwen’”

白名单

SecRule REMOTE_ADDR “@pmFromFile host.allow.data” “id:10085,phase:1,nolog,pass,ctl:ruleEngine=off”

SecRule REMOTE_ADDR “@pmFromFile host.allow.data” “id:10086,phase:2,nolog,pass,ctl:ruleEngine=off”

五,审计日志文件 SecAuditLogParts

定义主审计日志文件(串行日志记录格式)或并发日志记录索引文件(并发日志记录格式)的路径。 当与mlogc结合使用时(仅适用于并发日志记录),该指令定义mlogc位置和命令行。

如果您打算使用并发审计日志记录并想将审计日志数据发送到远程服务器,则需要部署ModSecurity日志收集器(mlogc),如下所示:

SecAuditLog “|/path/to/mlogc /path/to/mlogc.conf”

A:审计日志头(必须配置)

B:请求头

C:请求体(仅在请求体存在并且ModSecurity配置为拦截它时才存在。 这需要将SecRequestBodyAccess设置为On)

D:该值是为中间响应头保留,尚未有任何实际作用

E:中间响应体(仅当ModSecurity配置为拦截响应体并且审计日志引擎配置为记录时才存在。 拦截响应体需要将SecResponseBodyAccess设置为On)。 除非ModSecurity拦截中间响应体,否则中间响应体与实际响应体相同,在这种情况下,实际响应体将包含错误消息(Apache默认错误消息或ErrorDocument页面))

F:最终响应头(不包括日期和服务器标题,Apache始终在内容交付的后期阶段添加)

G:该值是为实际响应体保留,尚未有任何实际作用

H:审计日志追踪内容;

I:该部分是C的替代品。除了使用multipart/form-data编码,否则它在所有情况下记录的数据与C相同。 在这种情况下,它将记录一个假应用程序/ x-www-form-urlencoded正文,其中包含有关参数的信息,但不包含有关文件的信息。 如果您不想在审核日志中存储(通常很大)的文件,使用I比使用C更方便。

J:该部分包含有关使用multipart/form-data编码上传的文件的信息。

K:该部分包含了本次访问中所匹配到的所有规则(按每行一个进行记录)。规则是完全合格的,因此将显示继承的操作和默认操作符。V2.5.0以上支持。

Z:结尾分界线,表示本次日志记录完毕(必须配置)

六,规则文件

REQUEST-910-IP-REPUTATION.conf(可疑IP匹配)

REQUEST-912-DOS-PROTECTION.conf(DDOS攻击)

REQUEST-913-SCANNER-DETECTION.conf(扫描器检测)

REQUEST-920-PROTOCOL-ENFORCEMENT.conf(HTTP协议规范相关规则)

REQUEST-921-PROTOCOL-ATTACK.conf(协议攻击)

REQUEST-930-APPLICATION-ATTACK-LFI.conf(应用攻击-路径遍历)

REQUEST-931-APPLICATION-ATTACK-RFI.conf(远程文件包含)

REQUEST-932-APPLICATION-ATTACK-RCE.conf(远程命令执行)

REQUEST-933-APPLICATION-ATTACK-PHP.conf(PHP注入攻击)

REQUEST-941-APPLICATION-ATTACK-XSS.conf(XSS)

REQUEST-942-APPLICATION-ATTACK-SQLI.conf(SQL注入)

REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf(会话固定)

REQUEST-949-BLOCKING-EVALUATION.conf()

RESPONSE-950-DATA-LEAKAGES.conf(信息泄露)

RESPONSE-951-DATA-LEAKAGES-SQL.conf(SQL信息泄露)

RESPONSE-952-DATA-LEAKAGES-JAVA.conf(JAVA源代码泄露)

RESPONSE-953-DATA-LEAKAGES-PHP.conf(PHP信息泄露)

RESPONSE-954-DATA-LEAKAGES-IIS.conf(IIS信息泄露)

七,常用方法举例:

方法一、SecRuleRemoveById 指令:通过Rule ID禁用指定规则
<LocationMatch .*>
SecRuleRemoveById 960017 #allow Host Header is a IP address

方法二、SecRuleRemoveByMsg指令:通过Rule Msg禁用指定规则
<LocationMatch .*>
SecRuleRemoveByMsg “Host header is a numeric IP address”

方法三、url加白 :对指定路径关闭WAF检测/或只记录不拦截
<LocationMatch /xss.php>
SecRuleEngine DetectionOnly(或者Off)

八,规则 ID 参考

Rule ID Paranoia
Level Severity Description (msg)
901001 PL1 none Check if crs-set.conf was loaded
901450 PL1 none Sampling: Disable the rule engine based on sampling_percentage
905100 PL1 none Common Exeptions example rule
905110 PL1 none Common Exeptions example rule
910000 PL1 critical Request from Known Malicious Client (Based on previous traffic violations).
910100 PL1 critical Client IP is from a HIGH Risk Country Location.
910150 PL1 critical HTTP Blacklist match for search engine IP,
910160 PL1 critical HTTP Blacklist match for spammer IP
910170 PL1 critical HTTP Blacklist match for suspicious IP
910180 PL1 critical HTTP Blacklist match for harvester IP
911100 PL1 critical Method is not allowed by policy
912120 PL1 none Denial of Service (DoS) attack identified from %{tx.real_ip} (%{tx.dos_block_counter} hits since last alert)"
912170 PL1 none Potential Denial of Service (DoS) Attack from %{tx.real_ip} - # of Request Bursts: %{ip.dos_burst_counter}
912171 PL2 none Potential Denial of Service (DoS) Attack from %{tx.real_ip} - # of Request Bursts: %{ip.dos_burst_counter}
913100 PL1 critical Found User-Agent associated with security scanner
913101 PL2 critical Found User-Agent associated with scripting/generic HTTP client
913102 PL2 critical Found User-Agent associated with web crawler/bot
913110 PL1 critical Found request header associated with security scanner
913120 PL1 critical Found request filename/argument associated with security scanner
920100 PL1 notice Invalid HTTP Request Line
920120 PL1 critical Attempted multipart/form-data bypass
920130 PL1 critical Failed to parse request body.
920140 PL1 critical Multipart request body failed strict validation:
920160 PL1 critical Content-Length HTTP header is not numeric.
920170 PL1 critical GET or HEAD Request with Body Content.
920180 PL1 notice POST request missing Content-Length Header.
920190 PL1 warning Range: Invalid Last Byte Value.
920200 PL2 warning Range: Too many fields (6 or more)
920201 PL2 warning Range: Too many fields for pdf request (35 or more)
920202 PL4 warning Range: Too many fields for pdf request (6 or more)
920210 PL1 warning Multiple/Conflicting Connection Header Data Found.
920220 PL1 warning URL Encoding Abuse Attack Attempt
920230 PL2 warning Multiple URL Encoding Detected
920240 PL1 warning URL Encoding Abuse Attack Attempt
920250 PL1 warning UTF8 Encoding Abuse Attack Attempt
920260 PL1 warning Unicode Full/Half Width Abuse Attack Attempt
920270 PL1 error Invalid character in request (null character)
920271 PL2 critical Invalid character in request (non printable characters)
920272 PL3 critical Invalid character in request (outside of printable chars below ascii 127)
920273 PL4 critical Invalid character in request (outside of very strict set)
920274 PL4 critical Invalid character in request headers (outside of very strict set)
920280 PL1 warning Request Missing a Host Header
920290 PL1 warning Empty Host Header
920300 PL2 notice Request Missing an Accept Header
920310 PL1 notice Request Has an Empty Accept Header
920311 PL1 notice Request Has an Empty Accept Header
920320 PL2 notice Missing User Agent Header
920330 PL1 notice Empty User Agent Header
920340 PL1 notice Request Containing Content, but Missing Content-Type header
920350 PL1 warning Host header is a numeric IP address
920360 PL1 critical Argument name too long
920370 PL1 critical Argument value too long
920380 PL1 critical Too many arguments in request
920390 PL1 critical Total arguments size exceeded
920400 PL1 critical Uploaded file size too large
920410 PL1 critical Total uploaded files size too large
920420 PL1 critical Request content type is not allowed by policy
920430 PL1 critical HTTP protocol version is not allowed by policy
920440 PL1 critical URL file extension is restricted by policy
920450 PL1 critical HTTP header is restricted by policy (%{MATCHED_VAR})
920460 PL4 critical Abnormal character escape detected
921100 PL1 critical HTTP Request Smuggling Attack.
921110 PL1 critical HTTP Request Smuggling Attack
921120 PL1 critical HTTP Response Splitting Attack
921130 PL1 critical HTTP Response Splitting Attack
921140 PL1 critical HTTP Header Injection Attack via headers
921150 PL1 critical HTTP Header Injection Attack via payload (CR/LF detected)
921151 PL2 critical HTTP Header Injection Attack via payload (CR/LF detected)
921160 PL1 critical HTTP Header Injection Attack via payload (CR/LF and header-name detected)
921180 PL3 critical HTTP Parameter Pollution (%{TX.1})
930100 PL1 critical Path Traversal Attack (/…/)
930110 PL1 critical Path Traversal Attack (/…/)
930120 PL1 critical OS File Access Attempt
930130 PL1 critical Restricted File Access Attempt
931100 PL1 critical Possible Remote File Inclusion (RFI) Attack: URL Parameter using IP Address
931110 PL1 critical Possible Remote File Inclusion (RFI) Attack: Common RFI Vulnerable Parameter Name used w/URL Payload
931120 PL1 critical Possible Remote File Inclusion (RFI) Attack: URL Payload Used w/Trailing Question Mark Character (?)
931130 PL2 critical Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link
932100 PL1 critical Remote Command Execution: Unix Command Injection
932105 PL1 critical Remote Command Execution: Unix Command Injection
932110 PL1 critical Remote Command Execution: Windows Command Injection
932115 PL1 critical Remote Command Execution: Windows Command Injection
932120 PL1 critical Remote Command Execution: Windows PowerShell Command Found
932130 PL1 critical Remote Command Execution: Unix Shell Expression Found
932140 PL1 critical Remote Command Execution: Windows FOR/IF Command Found
932150 PL1 critical Remote Command Execution: Direct Unix Command Execution
932160 PL1 critical Remote Command Execution: Unix Shell Code Found
932170 PL1 critical Remote Command Execution: Shellshock (CVE-2014-6271)
932171 PL1 critical Remote Command Execution: Shellshock (CVE-2014-6271)
933100 PL1 critical PHP Injection Attack: Opening/Closing Tag Found
933110 PL1 critical PHP Injection Attack: PHP Script File Upload Found
933111 PL3 critical PHP Injection Attack: PHP Script File Upload Found
933120 PL1 critical PHP Injection Attack: Configuration Directive Found
933130 PL1 critical PHP Injection Attack: Variables Found
933131 PL3 critical PHP Injection Attack: Variables Found
933140 PL1 critical PHP Injection Attack: I/O Stream Found
933150 PL1 critical PHP Injection Attack: High-Risk PHP Function Name Found
933151 PL2 critical PHP Injection Attack: Medium-Risk PHP Function Name Found
933160 PL1 critical PHP Injection Attack: High-Risk PHP Function Call Found
933161 PL3 critical PHP Injection Attack: Low-Value PHP Function Call Found
933170 PL1 critical PHP Injection Attack: Serialized Object Injection
933180 PL1 critical PHP Injection Attack: Variable Function Call Found
941100 PL1 critical XSS Attack Detected via libinjection
941110 PL1 critical XSS Filter - Category 1: Script Tag Vector
941120 PL1 critical XSS Filter - Category 2: Event Handler Vector
941130 PL1 critical XSS Filter - Category 3: Attribute Vector
941140 PL1 critical XSS Filter - Category 4: Javascript URI Vector
941150 PL1 critical XSS Filter - Category 5: Disallowed HTML Attributes
941160 PL1 critical NoScript XSS InjectionChecker: HTML Injection
941170 PL1 critical NoScript XSS InjectionChecker: Attribute Injection
941180 PL1 critical Node-Validator Blacklist Keywords
941190 PL1 critical IE XSS Filters - Attack Detected.
941200 PL1 critical IE XSS Filters - Attack Detected.
941210 PL1 critical IE XSS Filters - Attack Detected.
941220 PL1 critical IE XSS Filters - Attack Detected.
941230 PL1 critical IE XSS Filters - Attack Detected.
941240 PL1 critical IE XSS Filters - Attack Detected.
941250 PL1 critical IE XSS Filters - Attack Detected.
941260 PL1 critical IE XSS Filters - Attack Detected.
941270 PL1 critical IE XSS Filters - Attack Detected.
941280 PL1 critical IE XSS Filters - Attack Detected.
941290 PL1 critical IE XSS Filters - Attack Detected.
941300 PL1 critical IE XSS Filters - Attack Detected.
941310 PL1 critical US-ASCII Malformed Encoding XSS Filter - Attack Detected.
941320 PL2 critical Possible XSS Attack Detected - HTML Tag Handler
941330 PL2 critical IE XSS Filters - Attack Detected.
941340 PL2 critical IE XSS Filters - Attack Detected.
941350 PL1 critical UTF-7 Encoding IE XSS - Attack Detected.
942100 PL1 critical SQL Injection Attack Detected via libinjection
942110 PL2 warning SQL Injection Attack: Common Injection Testing Detected
942120 PL2 critical SQL Injection Attack: SQL Operator Detected
942130 PL2 critical SQL Injection Attack: SQL Tautology Detected.
942140 PL1 critical SQL Injection Attack: Common DB Names Detected
942150 PL2 critical SQL Injection Attack
942160 PL1 critical Detects blind sqli tests using sleep() or benchmark().
942170 PL1 critical Detects SQL benchmark and sleep injection attempts including conditional queries
942180 PL2 critical Detects basic SQL authentication bypass attempts 1/3
942190 PL1 critical Detects MSSQL code execution and information gathering attempts
942200 PL2 critical Detects MySQL comment-/space-obfuscated injections and backtick termination
942210 PL2 critical Detects chained SQL injection attempts 1/2
942220 PL1 critical Looking for intiger overflow attacks, these are taken from skipfish, except 3.0.00738585072007e-308 is the “magic number” crash
942230 PL1 critical Detects conditional SQL injection attempts
942240 PL1 critical Detects MySQL charset switch and MSSQL DoS attempts
942250 PL1 critical Detects MATCH AGAINST, MERGE and EXECUTE IMMEDIATE injections
942251 PL3 critical Detects HAVING injections
942260 PL2 critical Detects basic SQL authentication bypass attempts 2/3
942270 PL1 critical Looking for basic sql injection. Common attack string for mysql, oracle and others.
942280 PL1 critical Detects Postgres pg_sleep injection, waitfor delay attacks and database shutdown attempts
942290 PL1 critical Finds basic MongoDB SQL injection attempts
942300 PL2 critical Detects MySQL comments, conditions and ch(a)r injections
942310 PL2 critical Detects chained SQL injection attempts 2/2
942320 PL1 critical Detects MySQL and PostgreSQL stored procedure/function injections
942330 PL2 critical Detects classic SQL injection probings 1/2
942340 PL2 critical Detects basic SQL authentication bypass attempts 3/3
942350 PL1 critical Detects MySQL UDF injection and other data/structure manipulation attempts
942360 PL1 critical Detects concatenated basic SQL injection and SQLLFI attempts
942370 PL2 critical Detects classic SQL injection probings 2/2
942380 PL2 critical SQL Injection Attack
942390 PL2 critical SQL Injection Attack
942400 PL2 critical SQL Injection Attack
942410 PL2 critical SQL Injection Attack
942420 PL3 warning Restricted SQL Character Anomaly Detection (cookies): # of special characters exceeded (8)
942421 PL4 warning Restricted SQL Character Anomaly Detection (cookies): # of special characters exceeded (3)
942430 PL2 warning Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (12)
942431 PL3 warning Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (6)
942432 PL4 warning Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (2)
942440 PL2 critical SQL Comment Sequence Detected.
942450 PL2 critical SQL Hex Encoding Identified
942460 PL3 warning Meta-Character Anomaly Detection Alert - Repetitive Non-Word Characters
943100 PL1 critical Possible Session Fixation Attack: Setting Cookie Values in HTML
943110 PL1 critical Possible Session Fixation Attack: SessionID Parameter Name with Off-Domain Referer
943120 PL1 critical Possible Session Fixation Attack: SessionID Parameter Name with No Referer
949100 PL1 none Request Denied by IP Reputation Enforcement.
949110 PL1 none Check of inbound anomaly score
950100 PL2 error The Application Returned a 500-Level Status Code
950130 PL1 error Directory Listing
951110 PL1 critical Microsoft Access SQL Information Leakage
951120 PL1 critical Oracle SQL Information Leakage
951130 PL1 critical DB2 SQL Information Leakage
951140 PL1 critical EMC SQL Information Leakage
951150 PL1 critical firebird SQL Information Leakage
951160 PL1 critical Frontbase SQL Information Leakage
951170 PL1 critical hsqldb SQL Information Leakage
951180 PL1 critical informix SQL Information Leakage
951190 PL1 critical ingres SQL Information Leakage
951200 PL1 critical interbase SQL Information Leakage
951210 PL1 critical maxDB SQL Information Leakage
951220 PL1 critical mssql SQL Information Leakage
951230 PL1 critical mysql SQL Information Leakage
951240 PL1 critical postgres SQL Information Leakage
951250 PL1 critical sqlite SQL Information Leakage
951260 PL1 critical Sybase SQL Information Leakage
952100 PL1 error Java Source Code Leakage
952110 PL1 error Java Errors
953100 PL1 error PHP Information Leakage
953110 PL1 error PHP source code leakage
953120 PL1 error PHP source code leakage
954100 PL1 error Disclosure of IIS install location
954110 PL1 error Application Availability Error
954120 PL1 error IIS Information Leakage
954130 PL1 error IIS Information Leakage
959100 PL1 none Check of outbound anomaly score
980100 PL1 none Anomaly score correlation rule
980110 PL1 none Anomaly score correlation rule
980120 PL1 none Anomaly score correlation rule
980130 PL1 none Anomaly score correlation rule
980140 PL1 none Anomaly score correlation rule
9001*** PL1 none Drupal rule exception
9002*** PL1 none WordPress rule exception

参考:

http://www.modsecurity.cn/chm/phase.html

https://www.jianshu.com/p/f9c636eb0d4c

http://tanjiti.lofter.com/post/1cc6c85b_10c4e155

https://www.netnea.com/cms/core-rule-set-inventory/

修改时间 2018-05-06

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值