// ============================================================================= // MeshSafe L2B YARA 规则集 — Webshell 专项(C3) // ============================================================================= // // 设计原则: // - 所有规则使用 2-3 个特征组合命中,避免单一关键词导致误杀 // - 光闸场景误报代价极高(阻断合法文件传输),宁可漏报不轻易阻断 // - 命中后作为 finding 交给 PolicyEngine 权重累加,不直接零容忍 // // 元数据规范: // risk_level = critical | high | medium | low // category = "C3" // false_positive_rate = low | medium | high // // 维护: // - 新 Webshell 工具/变体出现时,优先新增"工具特征"组合规则 // - 纯 PHP/JSP 反序列化 payload 单特征也可能有价值,但组合原则仍适用 // ============================================================================= // ============================================================================= // PHP Webshell —— 一行马 / 变形马 // ============================================================================= // PHP 一行 eval($_POST) 组合(常见的菜刀/蚁剑/冰蝎基础形态) // 单一 eval + $_GET/$_POST 误伤太大,必须"动态执行入口 + 用户输入 + 输出回显"三点组合 rule C3_PHP_Webshell_Oneliner { meta: risk_level = "critical" category = "C3" false_positive_rate = "low" reference = "OWASP Web Shell Cheat Sheet" description = "PHP 一行 Webshell:eval + 超全局变量 + 输出回显 组合命中" strings: $entrypoint = /eval\s*\(\s*\$\s*_(GET|POST|REQUEST|COOKIE)\s*\[.+\]\s*\)/ ascii // 备选入口:assert / create_function / preg_replace / system $entryp2 = /assert\s*\(\s*\$\s*_(GET|POST|REQUEST)/ ascii $entryp3 = /create_function\s*\(\s*['"]['"]\s*,\s*\$\s*_(GET|POST|REQUEST)/ ascii // 回显手段:print / echo / var_dump / die $echo = /print|echo|var_dump|die/ ascii condition: ($entrypoint or $entryp2 or $entryp3) and $echo } // PHP Webshell —— 多层解码(base64 + gzinflate + str_rot13) rule C3_PHP_Webshell_Obfuscated { meta: risk_level = "high" category = "C3" false_positive_rate = "medium" reference = "典型 Webshell 变形手段" description = "PHP 解码链组合(base64_decode + gzinflate / str_rot13 + eval)" strings: $b64 = "base64_decode" ascii wide $eval = "eval(" ascii wide $gzinflate = "gzinflate" ascii wide $rot13 = "str_rot13" ascii wide $assert = "assert(" ascii wide $createfn = "create_function" ascii wide // PHP 上下文证据:没有