Ringkasan

OWASP Core Rule Set (CRS) adalah kumpulan aturan deteksi serangan untuk WAF yang menjadi standar industri. CRS v4 terdiri dari 50+ file rule yang diorganisir per phase (request/response), kategori serangan, dan paranoia level. Memahami struktur CRS penting untuk mengembangkan rule engine jarsWAF yang kompatibel dan efektif.

Cross-link: waf-reverse-proxy-deepdivejarswaf-internal-architecture-deepdivewaf-evasion-techniques-encyclopediahierarchy-waf-reverse-proxyctf-tool-arsenal-universal


Daftar Isi


1. CRS File Organization

CRS v4 mengorganisir rules dalam format:

REQUEST-9XX-CATEGORY.conf
RESPONSE-9XX-CATEGORY.conf

File per Phase

FileFungsiContoh Rule
REQUEST-901-INITIALIZATIONSetup awalInit vars, anomaly scores
REQUEST-905-COMMON-EXCEPTIONSWhitelist umumExclude monitoring tools
REQUEST-911-METHOD-ENFORCEMENTMethod restrictionGET, POST only
REQUEST-913-SCANNER-DETECTIONScanner detectionNmap, nessus, sqlmap
REQUEST-920-PROTOCOL-ENFORCEMENTProtocol complianceHTTP version, headers
REQUEST-921-PROTOCOL-ATTACKProtocol attackRequest smuggling
REQUEST-930-LFIFile inclusion../../etc/passwd
REQUEST-931-RFIRemote file inclusionhttp://evil.com/shell
REQUEST-932-RCERemote command executioncmd.exe, /bin/sh
REQUEST-933-PHPPHP injectionphp://, assert
REQUEST-934-GENERICGeneric injectionCharset, encoding
REQUEST-941-XSSCross-site scripting<script>, onerror
REQUEST-942-SQLISQL injection' OR 1=1, UNION
REQUEST-943-SESSION-FIXATIONSession fixationCookie: manipulation
REQUEST-944-JAVAJava attacksOGNL, deserialization
REQUEST-949-BLOCKING-EVALUATIONBlocking decisionAnomaly score threshold

2. Request Phase Rules

Setiap rule file berisi aturan spesifik untuk satu kategori serangan.

Struktur Rule CRS

# Rule ID: 942100
# Severity: CRITICAL
# Paranoia Level: 2
 
SecRule REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_HEADERS|ARGS_NAMES|ARGS|XML:/* "@pm from-file sqli-data.data" \
    "id:942100,\
    phase:2,\
    block,\
    t:urlDecodeUni,\
    msg:'SQL Injection Detected via libinjection',\
    logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\
    tag:'application-multi',\
    tag:'language-multi',\
    tag:'platform-multi',\
    tag:'attack-sqli',\
    tag:'paranoia-level/2',\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.0.0',\
    severity:'CRITICAL',\
    setvar:'tx.anomaly_score_pl2=+%{tx.critical_anomaly_score}'"

Komponen

KomponenFungsi
Target variableARGS, REQUEST_COOKIES, REQUEST_HEADERS
Operator@pm (pattern match), @rx (regex), @within
Transform functiont:urlDecodeUni, t:lowercase, t:removeNulls
Anomaly scoresetvar:'tx.anomaly_score_pl2=+CRITICAL'
Paranoia leveltag:'paranoia-level/2'

3. Response Phase Rules (RESPONSE-9XX)

Rule yang memeriksa response dari backend, bukan request.

FileFungsi
RESPONSE-950-DATA-LEAKAGESData leakage generic
RESPONSE-951-DATA-LEAKAGES-SQLSQL error messages
RESPONSE-952-DATA-LEAKAGES-JAVAJava stack traces
RESPONSE-953-DATA-LEAKAGES-PHPPHP error messages
RESPONSE-954-DATA-LEAKAGES-IISIIS error messages
RESPONSE-955-WEB-SHELLSWebshell detection
RESPONSE-956-DATA-LEAKAGES-RUBYRuby error messages
RESPONSE-959-BLOCKING-EVALUATIONBlocking decision
RESPONSE-980-CORRELATIONCorrelation rules

4. Data Files (.data)

CRS menggunakan file .data untuk payload database — text file berisi daftar pattern yang di-load via @pm operator.

# Contoh: lfi-os-files.data
/etc/passwd
/etc/shadow
/etc/hosts
/etc/issue
/proc/self/environ
/usr/local/apache/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
...

Data Files di CRS v4

ai-critical-artifacts.data    lfi-os-files.data            scanners-user-agents.data
asp-dotnet-errors.data        php-errors.data              sql-errors.data
iis-errors.data               php-function-names-933150.data  ssrf.data
java-classes.data             php-variables.data           ssrf-no-scheme.data
restricted-files.data         unix-shell.data              web-shells-asp.data
restricted-upload.data        unix-shell-aliases.data      web-shells-php.data
ruby-errors.data              unix-shell-builtins.data      windows-powershell-commands.data

5. Exclusion Rules

Aturan pengecualian untuk mengurangi false positive:

REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
REQUEST-999-COMMON-EXCEPTIONS-AFTER-CRS.conf
REQUEST-999-EXCLUSION-RULES-AFTER-CRS.conf.example

6. Paranoia Levels

LevelNamaRisiko FPCoverage
PL1DefaultRendahSerangan umum
PL2AdvancedSedangBypass techniques
PL3HighTinggiObfuscation & encoding
PL4ParanoidSangat tinggiSemua varian

Perbedaan per Level

PL1: ' OR '1'='1 (SQLi basic)
PL2: ' OR '1'='1' -- (SQLi with comment)
PL3: %27%20OR%201%3D1%20-- (URL encoded SQLi)
PL4: %25%32%37%20%4F%52%20%31%3D%31 (Double encoded)

7. Anomaly Scoring

Skema Scoring

# Set anomaly score per severity
setvar:'tx.critical_anomaly_score=5'
setvar:'tx.error_anomaly_score=4'
setvar:'tx.warning_anomaly_score=3'
setvar:'tx.notice_anomaly_score=2'
 
# Threshold
setvar:'tx.inbound_anomaly_score_threshold=5'  # Default PL1
setvar:'tx.outbound_anomaly_score_threshold=4'

Scoring Flow

Request → Rule1 (Critical, +5) → Rule2 (Warning, +3) → Total=8
→ Threshold PL1=5 → BLOCKED (8 >= 5)

8. Implikasi untuk jarsWAF

Konsep CRSImplementasi di jarsWAFStatus
Rule phasesheaders.rs, body.rs, evasion.rs✅ Ada
Anomaly scoringanomaly.rs + scoring_mode✅ Ada (accumulate/threshold)
Paranoia levelsBelum ada level system🎯 Bisa adopsi
Data filesBelum ada @pm operator🎯 Bisa via .data files
Exclusion rulesCustom rules via config.toml✅ Ada
Transform functionst:urlDecodeUni → normalize di engine✅ Parsial
Per-phase blockingREQUEST-949 → blocking decision phase🔄 Bisa ditambah

Lokasi CRS: /mnt/data_d/Projects/Reference/owasp-coreruleset/