Blog

How to Install & Configure Mod_Security on cPanel/WHM VPS

In this guide, we will show you an easy way to install mod_security on a cPanel VPS, including rules to protect from MySQL injection and web attacks.

Mod_security is a web application firewall module for Apache web server, and can provide extremely safe protection against web-based attacks, when configured properly.

This guide requires cPanel/WHM to be installed on your VPS or server already. If you need to install cPanel, please follow the link for instructions.

 

How to Install Mod_Security on cPanel/WHM:

1. Log in to your server’s WHM interface and navigate to EasyApache.

2. Follow the prompts to rebuild using your last saved profile, or the default profile. Ensure Mod_Security is selected in the installation choices.

3. Wait for the rebuild to complete (20-30 minutes).

 

How to Install ModSec Control Plugin for WHM:

Log in to your server’s console, terminal, or access remotely via SSH. You will need root privileges. Run the following commands to download and install the ConfigServer ModSec Control (CMC) plugin for WHM:

cd /root; wget http://download.configserver.com/cmc.tgz

tar xvf cmc.tgz; cd cmc/; sh install.sh

 

How to Configure ModSecurity Ruleset with cPanel/WHM:

1. Refresh the WHM interface and navigate to Plugins > ModSec Control.

2. Switch the state to ‘On‘ and save to activate the web firewall.

3. Scroll down to ConfigServer ModSecurity Tools and select modsec2.user.conf to Edit.

Here, you can copy in a ruleset. Rules are directives for mod_security to use when screening web server activity, instructing mod_security what events to check for, and what actions to take.

The best mod_security rules will greatly depend on your server and the application(s) you are hosting. We have provided an example ruleset below, which defines basic directives to help protect from MySQL injection, PHP, and other web server abuse.

4. Copy the entire text below into the edit space for modsec2.user.conf, while preserving any existing lines in the file. Then Save, and check on the confirmation screen that Apache webserver has successfully reloaded. You are now protected! 

SecRule ARGS {php} “severity:4,log,deny,id:6624001”
SecRule ARGS eval “severity:4,log,deny,id:6624002”
SecRule ARGS base64_decode “severity:4,log,deny,id:6624003”

SecRule REQUEST_URI|ARGS|REQUEST_BODY “base64_decode” “severity:4,log,deny,msg:’Access Denied’id:’6624009′”
SecRule REQUEST_URI|ARGS|REQUEST_BODY “eval” “severity:4,log,deny,msg:’Access Denied’id:’6624010′”
SecRule REQUEST_URI|ARGS|REQUEST_BODY “{php}” “severity:4,log,deny,msg:’Access Denied’id:’6624011′”

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

SecRequestBodyAccess On
SecRule FILES_TMPNAMES “@inspectFile /etc/cxs/cxscgi.sh” \
“log,auditlog,deny,severity:2,phase:2,t:none,id:’1010101′”
SecTmpDir /tmp

# Deprecated due to security issues so it should be off: http://blog.modsecurity.org/2008/08/transformation.html
SecCacheTransformations Off

# Check Content-Length and reject all non numeric ones
SecRule REQUEST_HEADERS:Content-Length “!^\d+$” “deny,log,auditlog,msg:’Content-Length HTTP header is not numeric’, severity:’2′,id:’960016′”

# Do not accept GET or HEAD requests with bodies
SecRule REQUEST_METHOD “^(?:GET|HEAD)$” “chain,phase:2,t:none,deny,log,auditlog,status:400,msg:’GET or HEAD requests with bodies’, severity:’2′,id:’960011′,tag:’PROTOCOL_VIOLATION/EVASION'”
SecRule REQUEST_HEADERS:Content-Length “!^0?$” t:none

# Require Content-Length to be provided with every POST request.
SecRule REQUEST_METHOD “^POST$” “chain,phase:2,t:none,deny,log,auditlog,status:400,msg:’POST request must have a Content-Length header’,id:’960012′,tag:’PROTOCOL_VIOLATION/EVASION’,severity:’4′”
SecRule &REQUEST_HEADERS:Content-Length “@eq 0” t:none

# Don’t accept transfer encodings we know we don’t know how to handle
SecRule REQUEST_HEADERS:Transfer-Encoding “!^$” “phase:2,t:none,deny,log,auditlog,status:501,msg:’ModSecurity does not support transfer encodings’,id:’960013′,tag:’PROTOCOL_VIOLATION/EVASION’,severity:’3′”

# Check decodings
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer “@validateUrlEncoding” \
“chain, deny,log,auditlog,msg:’Access Denied’,id:’950107′,severity:’4′”
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer “\%(?![0-9a-fA-F]{2}|u[0-9a-fA-F]{4})”

SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer “@validateUtf8Encoding” “deny,log,auditlog,msg:’Access Denied’,id:’950801′,severity:’4′”

# Proxy access attempt
SecRule REQUEST_URI_RAW ^\w+:/ “phase:2,t:none,deny,log,auditlog,status:400,msg:’Proxy access attempt’, severity:’2′,id:’960014′,tag:’PROTOCOL_VIOLATION/PROXY_ACCESS'”

# Restrict type of characters sent
SecRule REQUEST_FILENAME|REQUEST_HEADERS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer \
“@validateByteRange 1-255” \
“log,auditlog,msg:’Request Missing an Accept Header’, severity:’2′,id:’960015′,t:urlDecodeUni,phase:1”

SecRule ARGS|ARGS_NAMES “@validateByteRange 1-255” \
“deny,log,auditlog,msg:’Invalid character in request’,id:’960901′,severity:’4′,t:urlDecodeUni,phase:2”

# allow request methods
SecRule REQUEST_METHOD “!^((?:(?:POS|GE)T|OPTIONS|HEAD))$” \
“phase:2,t:none,log,auditlog,status:501,msg:’Method is not allowed by policy’, severity:’2′,id:’960032′,tag:’POLICY/METHOD_NOT_ALLOWED'”

# Restrict file extension
# removed exe so that frontpage will work

# Restricted HTTP headers
SecRule REQUEST_HEADERS_NAMES “\.(?:Lock-Token|Translate|If)$” \
“deny,log,auditlog,msg:’HTTP header is restricted by policy’,id:’960038′,severity:’4′”

SecRule HTTP_User-Agent “(?:\b(?:m(?:ozilla\/4\.0 \(compatible\)|etis)|webtrends security analyzer|pmafind)\b|n(?:-stealth|sauditor|essus|ikto)|b(?:lack ?widow|rutus|ilbo)|(?:jaascoi|paro)s|internet explorer|webinspect|\.nasl)” \
“deny,log,auditlog,msg:’Request Indicates a Security Scanner Scanned the Site’,id:’990002′,severity:’2′”
SecRule REQUEST_HEADERS_NAMES “\bacunetix-product\b” \
“deny,log,auditlog,msg:’Request Indicates a Security Scanner Scanned the Site’,id:’990901′,severity:’2′”
SecRule REQUEST_FILENAME “^/nessustest” \
“deny,log,auditlog,msg:’Request Indicates a Security Scanner Scanned the Site’,id:’990902′,severity:’2′”

SecRule REQUEST_HEADERS:User-Agent “(?:m(?:ozilla\/(?:4\.0 \(compatible; advanced email extractor|2\.0 \(compatible; newt activex; win32\))|ailto:craftbot\@yahoo\.com)|e(?:mail(?:(?:collec|harves|magne)t|(?: extracto|reape)r|siphon|wolf)|(?:collecto|irgrabbe)r|xtractorpro|o browse)|a(?:t(?:tache|hens)|utoemailspider|dsarobot)|w(?:eb(?:emailextrac| by mail)|3mir)|f(?:astlwspider|loodgate)|p(?:cbrowser|ackrat|surf)|(?:digout4uagen|takeou)t|(?:chinacla|be)w|hhjhj@yahoo|rsync|shai|zeus)” \
“deny,log,auditlog,msg:’Rogue web site crawler’,id:’990012′,severity:’2′”

SecRule REQUEST_HEADERS:User-Agent “(?:\b(?:(?:indy librar|snoop)y|microsoft url control|lynx)\b|d(?:ownload demon|isco)|w(?:3mirror|get)|l(?:ibwww|wp)|p(?:avuk|erl)|cu(?:sto|rl)|big brother|autohttp|netants|eCatch)” \
“chain,log,auditlog,msg:’Request Indicates an automated program explored the site’,id:’990011′,severity:’5′”
SecRule REQUEST_HEADERS:User-Agent “!^apache.*perl”
# Blind SQL injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “@pm sys.user_triggers sys.user_objects @@spid msysaces instr sys.user_views sys.tab charindex sys.user_catalog constraint_type locate select msysobjects attnotnull sys.user_tables sys.user_tab_columns sys.user_constraints waitfor mysql.user sys.all_tables msysrelationships msyscolumns msysqueries” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:replaceComments,t:compressWhiteSpace,pass,nolog,skip:1,id:’1040401′”
SecAction phase:2,pass,nolog,skipAfter:959007,id:1040402
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer “(?:\b(?:(?:s(?:ys\.(?:user_(?:(?:t(?:ab(?:_column|le)|rigger)|object|view)s|c(?:onstraints|atalog))|all_tables|tab)|elect\b.{0,40}\b(?:substring|ascii|user))|m(?:sys(?:(?:queri|ac)e|relationship|column|object)s|ysql.user)|c(?:onstraint_type|harindex)|attnotnull)\b|(?:locate|instr)\W+\()|\@\@spid\b)” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,t:replaceComments,t:compressWhiteSpace,ctl:auditLogParts=+E,log,auditlog,msg:’Blind SQL Injection Attack’,id:’950007′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′,id:’9600016′”
SecRule REQUEST_FILENAME|ARGS|REQUEST_HEADERS|!REQUEST_HEADERS:Referer “\b(?:(?:s(?:ys(?:(?:(?:process|tabl)e|filegroup|object)s|c(?:o(?:nstraint|lumn)s|at)|dba|ibm)|ubstr(?:ing)?)|user_(?:(?:(?:constrain|objec)t|tab(?:_column|le)|ind_column|user)s|password|group)|a(?:tt(?:rel|typ)id|ll_objects)|object_(?:(?:nam|typ)e|id)|pg_(?:attribute|class)|column_(?:name|id)|(?:dba|mb)_users|xtype\W+\bchar|rownum)\b|t(?:able_name\b|extpos\W+\())” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:replaceComments,t:compressWhiteSpace,ctl:auditLogParts=+E,log,auditlog,msg:’Blind SQL Injection Attack’,id:’959007′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′,id:’9600116′”

SecRule REQUEST_FILENAME|ARGS|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “@pm substr xtype textpos all_objects rownum sysfilegroups sysprocesses user_group sysobjects user_tables systables pg_attribute user_users user_password column_id attrelid user_tab_columns table_name pg_class user_constraints user_objects object_type dba_users sysconstraints mb_users column_name atttypid object_id substring syscat user_ind_columns sysibm syscolumns sysdba object_name” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,pass,nolog,skip:1,id:’9600118′”
SecAction phase:2,pass,nolog,skipAfter:959904,id:’9600123′
SecRule REQUEST_FILENAME|ARGS “\b(?:(?:s(?:ys(?:(?:(?:process|tabl)e|filegroup|object)s|c(?:o(?:nstraint|lumn)s|at)|dba|ibm)|ubstr(?:ing)?)|user_(?:(?:(?:constrain|objec)t|tab(?:_column|le)|ind_column|user)s|password|group)|a(?:tt(?:rel|typ)id|ll_objects)|object_(?:(?:nam|typ)e|id)|pg_(?:attribute|class)|column_(?:name|id)|(?:dba|mb)_users|xtype\W+\bchar|rownum)\b|t(?:able_name\b|extpos\W+\())” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’Blind SQL Injection Attack’,id:’950904′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “\b(?:(?:s(?:ys(?:(?:(?:process|tabl)e|filegroup|object)s|c(?:o(?:nstraint|lumn)s|at)|dba|ibm)|ubstr(?:ing)?)|user_(?:(?:(?:constrain|objec)t|tab(?:_column|le)|ind_column|user)s|password|group)|a(?:tt(?:rel|typ)id|ll_objects)|object_(?:(?:nam|typ)e|id)|pg_(?:attribute|class)|column_(?:name|id)|(?:dba|mb)_users|xtype\W+\bchar|rownum)\b|t(?:able_name\b|extpos\W+\())” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’Blind SQL Injection Attack’,id:’959904′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# SQL injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “@pm insert xp_enumdsn infile openrowset nvarchar autonomous_transaction print data_type or outfile inner shutdown tbcreator @@version xp_filelist sp_prepare sql_longvarchar xp_regenumkeys xp_loginconfig xp_dirtree ifnull sp_addextendedproc xp_regaddmultistring delete sp_sqlexec and sp_oacreate sp_execute cast xp_ntsec xp_regdeletekey drop varchar xp_execresultset having utl_file xp_regenumvalues xp_terminate xp_availablemedia xp_regdeletevalue dumpfile isnull sql_variant select ‘sa’ xp_regremovemultistring xp_makecab ‘msdasql’ xp_cmdshell openquery sp_executesql ‘sqloledb’ dbms_java ‘dbo’ utl_http sp_makewebtask benchmark xp_regread xp_regwrite” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,pass,nolog,skip:1,id:’9600121′”
SecAction phase:2,pass,nolog,id:999501,skipAfter:959001,id:’9600125′
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES “(?:\b(?:(?:s(?:elect\b(?:.{1,100}?\b(?:(?:length|count|top)\b.{1,100}?\bfrom|from\b.{1,100}?\bwhere)|.*?\b(?:d(?:ump\b.*\bfrom|ata_type)|(?:to_(?:numbe|cha)|inst)r))|p_(?:(?:addextendedpro|sqlexe)c|(?:oacreat|prepar)e|execute(?:sql)?|makewebtask)|ql_(?:longvarchar|variant))|xp_(?:reg(?:re(?:movemultistring|ad)|delete(?:value|key)|enum(?:value|key)s|addmultistring|write)|e(?:xecresultset|numdsn)|(?:terminat|dirtre)e|availablemedia|loginconfig|cmdshell|filelist|makecab|ntsec)|u(?:nion\b.{1,100}?\bselect|tl_(?:file|http))|group\b.*\bby\b.{1,100}?\bhaving|d(?:elete\b\W*?\bfrom|bms_java)|load\b\W*?\bdata\b.*\binfile|(?:n?varcha|tbcreato)r)\b|i(?:n(?:to\b\W*?\b(?:dump|out)file|sert\b\W*?\binto|ner\b\W*?\bjoin)\b|(?:f(?:\b\W*?\(\W*?\bbenchmark|null\b)|snull\b)\W*?\()|a(?:nd\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|utonomous_transaction\b)|o(?:r\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|pen(?:rowset|query)\b)|having\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|print\b\W*?\@\@|cast\b\W*?\()|(?:;\W*?\b(?:shutdown|drop)|\@\@version)\b|'(?:s(?:qloledb|a)|msdasql|dbo)’)” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’950001′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “(?:\b(?:(?:s(?:elect\b(?:.{1,100}?\b(?:(?:length|count|top)\b.{1,100}?\bfrom|from\b.{1,100}?\bwhere)|.*?\b(?:d(?:ump\b.*\bfrom|ata_type)|(?:to_(?:numbe|cha)|inst)r))|p_(?:(?:addextendedpro|sqlexe)c|(?:oacreat|prepar)e|execute(?:sql)?|makewebtask)|ql_(?:longvarchar|variant))|xp_(?:reg(?:re(?:movemultistring|ad)|delete(?:value|key)|enum(?:value|key)s|addmultistring|write)|e(?:xecresultset|numdsn)|(?:terminat|dirtre)e|availablemedia|loginconfig|cmdshell|filelist|makecab|ntsec)|u(?:nion\b.{1,100}?\bselect|tl_(?:file|http))|group\b.*\bby\b.{1,100}?\bhaving|d(?:elete\b\W*?\bfrom|bms_java)|load\b\W*?\bdata\b.*\binfile|(?:n?varcha|tbcreato)r)\b|i(?:n(?:to\b\W*?\b(?:dump|out)file|sert\b\W*?\binto|ner\b\W*?\bjoin)\b|(?:f(?:\b\W*?\(\W*?\bbenchmark|null\b)|snull\b)\W*?\()|a(?:nd\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|utonomous_transaction\b)|o(?:r\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|pen(?:rowset|query)\b)|having\b ?(?:\d{1,10}|[\’\”][^=]{1,10}[\’\”]) ?[=<>]+|print\b\W*?\@\@|cast\b\W*?\()|(?:;\W*?\b(?:shutdown|drop)|\@\@version)\b|'(?:s(?:qloledb|a)|msdasql|dbo)’)” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’959001′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES “\b(\d+) ?= ?\1\b|[\’\”](\w+)[\’\”] ?= ?[\’\”]\2\b” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’950901′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “\b(\d+) ?= ?\1\b|[\’\”](\w+)[\’\”] ?= ?[\’\”]\2\b” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’959901′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_FILENAME|ARGS|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “@pm user_objects object_type substr all_objects mb_users column_name rownum atttypid substring object_id user_group user_tables pg_attribute user_users column_id user_password attrelid object_name table_name pg_class” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,pass,nolog,skip:1,id:’95990013′”
SecAction phase:2,pass,nolog,skipAfter:959906,id:’9600127′
SecRule REQUEST_FILENAME|ARGS “\b(?:user_(?:(?:object|table|user)s|password|group)|a(?:tt(?:rel|typ)id|ll_objects)|object_(?:(?:nam|typ)e|id)|pg_(?:attribute|class)|column_(?:name|id)|substr(?:ing)?|table_name|mb_users|rownum)\b” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’950906′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer “\b(?:user_(?:(?:object|table|user)s|password|group)|a(?:tt(?:rel|typ)id|ll_objects)|object_(?:(?:nam|typ)e|id)|pg_(?:attribute|class)|column_(?:name|id)|substr(?:ing)?|table_name|mb_users|rownum)\b” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’959906′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|!REQUEST_HEADERS:via “\b(?:coalesce\b|root\@)” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’950908′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer|!REQUEST_HEADERS:via “\b(?:coalesce\b|root\@)” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:replaceComments,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:’SQL Injection Attack’,id:’959908′,tag:’WEB_ATTACK/SQL_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# file injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/* “@pm .www_acl .htpasswd .htaccess boot.ini httpd.conf /etc/ .htgroup global.asa .wwwacl” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,pass,nolog,skip:1,id:’95990015′”
SecAction phase:2,pass,nolog,skipAfter:959005,id:’9600131′
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES “(?:\b(?:\.(?:ht(?:access|passwd|group)|www_?acl)|global\.asa|httpd\.conf|boot\.ini)\b|\/etc\/)” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’Access Denied’,id:’950005′,tag:’WEB_ATTACK/FILE_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/* “(?:\b(?:\.(?:ht(?:access|passwd|group)|www_?acl)|global\.asa|httpd\.conf|boot\.ini)\b|\/etc\/)” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’Access Denied’,id:’959005′,tag:’WEB_ATTACK/FILE_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# Command access
SecRule REQUEST_FILENAME “\b(?:n(?:map|et|c)|w(?:guest|sh)|cmd(?:32)?|telnet|rcmd|ftp)\.exe\b” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Access’,id:’950002′,tag:’WEB_ATTACK/FILE_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# Command injection
SecRule ARGS “@pm uname wguest.exe /perl /nasm rcmd.exe nc tclsh /xterm finger tftp chown /echo nmap.exe ping /passwd /chsh ps /uname telnet.exe /ftp ls tclsh8 lsof /ping echo cmd.exe /kill python traceroute /ps perl passwd wsh.exe /rm /cpp chgrp /telnet localgroup kill /chgrp /finger nasm /ls nc.exe id /chmod /nc /g++ /id /chown cmd /nmap chsh /gcc net.exe /python /lsof ftp.exe ftp xterm mail /mail tracert nmap rm cd chmod cpp telnet cmd32.exe gcc g++” \
“phase:2,t:none,t:htmlEntityDecode,t:lowercase,pass,nolog,skip:1,id:’95990017′”
SecAction phase:2,pass,nolog,skipAfter:950006,id:’9600133′
SecRule ARGS “(?:\b(?:(?:n(?:et(?:\b\W+?\blocalgroup|\.exe)|(?:map|c)\.exe)|t(?:racer(?:oute|t)|elnet\.exe|clsh8?|ftp)|(?:w(?:guest|sh)|rcmd|ftp)\.exe|echo\b\W*?\by+)\b|c(?:md(?:(?:32)?\.exe\b|\b\W*?\/c)|d(?:\b\W*?[\\\/]|\W*?\.\.)|hmod.{0,40}?\+.{0,3}x))|[\;\|\`]\W*?\b(?:(?:c(?:h(?:grp|mod|own|sh)|md|pp)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)\b|g(?:\+\+|cc\b))|\/(?:c(?:h(?:grp|mod|own|sh)|pp)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|g(?:\+\+|cc)|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)(?:[\’\”\|\;\`\-\s]|$))” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection’,id:’950006′,tag:’WEB_ATTACK/COMMAND_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:’/^(Cookie|Referer|X-OS-Prefs)$/’|REQUEST_COOKIES|REQUEST_COOKIES_NAMES \
“@pm uname wguest.exe /perl /nasm rcmd.exe nc tclsh /xterm finger tftp chown /echo nmap.exe ping /passwd /chsh ps /uname telnet.exe /ftp ls tclsh8 lsof /ping echo cmd.exe /kill python traceroute /ps perl passwd wsh.exe /rm /cpp chgrp /telnet localgroup kill /chgrp /finger nasm /ls nc.exe id /chmod /nc /g++ /id /chown cmd /nmap chsh /gcc net.exe /python /lsof ftp.exe ftp xterm mail /mail tracert nmap rm cd chmod cpp telnet cmd32.exe gcc g++” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,pass,nolog,skip:1,id:’95990019′”
SecAction pass,nolog,skipAfter:959006,id:’9600135′
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:’/^(Cookie|Referer|X-OS-Prefs)$/’|REQUEST_COOKIES|REQUEST_COOKIES_NAMES \
“(?:\b(?:(?:n(?:et(?:\b\W+?\blocalgroup|\.exe)|(?:map|c)\.exe)|t(?:racer(?:oute|t)|elnet\.exe|clsh8?|ftp)|(?:w(?:guest|sh)|rcmd|ftp)\.exe|echo\b\W*?\by+)\b|c(?:md(?:(?:32)?\.exe\b|\b\W*?\/c)|d(?:\b\W*?[\\\/]|\W*?\.\.)|hmod.{0,40}?\+.{0,3}x))|[\;\|\`]\W*?\b(?:(?:c(?:h(?:grp|mod|own|sh)|md|pp)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)\b|g(?:\+\+|cc\b))|\/(?:c(?:h(?:grp|mod|own|sh)|pp)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|g(?:\+\+|cc)|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)(?:[\’\”\|\;\`\-\s]|$))” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection’,id:’959006′,tag:’WEB_ATTACK/COMMAND_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule ARGS \
“(?:(?:[\;\|\`]\W*?\bcc|\bwget)\b|\/cc(?:[\’\”\|\;\`\-\s]|$))” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection’,id:’950907′,tag:’WEB_ATTACK/COMMAND_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule “REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:’/^(Cookie|Referer|X-OS-Prefs|User-Agent)$/’|REQUEST_COOKIES|REQUEST_COOKIES_NAMES” \
“(?:(?:[\;\|\`]\W*?\bcc|\bwget)\b|\/cc(?:[\’\”\|\;\`\-\s]|$))” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection’,id:’959907′,tag:’WEB_ATTACK/COMMAND_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# SSI injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES “<!–\W*?#\W*?(?:e(?:cho|xec)|printenv|include|cmd)” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’SSI injection Attack’,id:’950011′,tag:’WEB_ATTACK/SSI_INJECTION’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/* “<!–\W*?#\W*?(?:e(?:cho|xec)|printenv|include|cmd)” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’SSI injection Attack’,id:’959011′,tag:’WEB_ATTACK/SSI_INJECTION’,logdata:’%{TX.0}’,severity:’2′”

# PHP injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/* “@pm <?fgets move_uploaded_file $_session readfile ftp_put ftp_fget gzencode ftp_nb_put bzopen readdir $_post fopen gzread ftp_nb_fput ftp_nb_fget ftp_get $_get scandir fscanf readgzfile fread proc_open fgetc fgetss ftp_fput ftp_nb_get session_start fwrite gzwrite gzopen gzcompress” \
“phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,pass,nolog,skip:1,id:’95990026′”
SecAction pass,nolog,skipAfter:959013,id:’9600137′
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES “(?:(?:\b(?:f(?:tp_(?:nb_)?f?(?:ge|pu)t|get(?:s?s|c)|scanf|write|open|read)|gz(?:(?:encod|writ)e|compress|open|read)|s(?:ession_start|candir)|read(?:(?:gz)?file|dir)|move_uploaded_file|(?:proc_|bz)open)|\$_(?:(?:pos|ge)t|session))\b|<\?(?!xml))” \
“phase:2,capture,t:none,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’PHP Injection Attack’,id:’950013′,tag:’WEB_ATTACK/PHP_INJECTION’,tag:’WEB_ATTACK/HTTP_RESPONSSE_SPLITTING’,logdata:’%{TX.0}’,severity:’2′”
SecRule REQUEST_HEADERS|XML:/* “(?:(?:\b(?:f(?:tp_(?:nb_)?f?(?:ge|pu)t|get(?:s?s|c)|scanf|write|open|read)|gz(?:(?:encod|writ)e|compress|open|read)|s(?:ession_start|candir)|read(?:(?:gz)?file|dir)|move_uploaded_file|(?:proc_|bz)open)|\$_(?:(?:pos|ge)t|session))\b|<\?(?!xml))” \
“phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’PHP Injection Attack’,id:’959013′,tag:’WEB_ATTACK/PHP_INJECTION’,tag:’WEB_ATTACK/HTTP_RESPONSSE_SPLITTING’,logdata:’%{TX.0}’,severity:’2′”

This guide applies to:

This entry was posted in cPanel/WHM, Featured Guides, Guides & How To's, Linux VPS, Tech Support, VPS Hosting and tagged , , , , , , . Bookmark the permalink. Trackbacks are closed, but you can post a comment.



Questions? We're here to help.