上周,长亭科技发布了核心产品雷池的免费社区版 —— https://waf-ce.chaitin.cn/。
长亭雷池 WAF 的核心技术是智能语义分析检测算法,作为雷池的产品经理,今天我来科普一下雷池智能语义分析检测算法的和绕过思路。
欢迎网友测试雷池的检测引擎,发现绕过可以通过 CTStack 社区提交反馈,误报确认后可以获得现金或礼品奖励,下面是社区反馈地址
看了一下雷池社区版 Demo 上的流量,尝试在绕过的人不少,但是大部分思路都不太对
这些方法都是没有用的,都跟你们说了雷池不看关键字,告诉你们一些妙招,绕过应该从语法层面去找
下面几个 case 是雷池历史上曾经发生过的绕过,他们都有一个共同特征 —— 一眼看上去好像语法错误,实际背后有一些 feature,使得这些语句都可以解析。
1eand 1e=2eunion select ******
// SQL Server 允许整数不带指数,而且后面可以直接跟其他关键字
weight_string(0x56af level 1 desc reverse)
// weight_string 函数的参数允许传入一个 level 子语句
select @'' a /*!from*/ table
// MYSQL 允许 from 关键字写在带 ! 的注释中
WAF 的定位是防护 Web 网站,使其免于受到黑客的攻击。很难说世界上第一款 WAF 产品是啥,从早期简单的关键字过滤脚本,到现在成熟的商业化 WAF 产品,这个品类到目前至少有 20 年的历史。
WAF 这些年的发展离不开正则和关键字
场景1:黑客经常使用 and 1=2 union select xx 进行 SQL 注入
方案1:好,那就检查 union select 关键字,只要出现就阻断访问
场景2:黑客经常使用 <img src=# onerror=alert()>
进行 XSS 探测
方案2:好,那就检查 alert() 关键字,只要出现就阻断访问
场景3:黑客经常使用 ../../etc/passwd 进行文件包含探测
方案3:好,那就检查 /etc/passwd 关键字,只要出现就阻断访问
关键字技术发展了二十年,现在 github 随便一搜就能找到非常多的开源 WAF 正则规则。
黑客绕过 WAF 也很简单,各种变形,各种加混淆,就是想办法让攻击代码看起来没有明显的关键字。
代码是多灵活的东西,想实现同样的效果,我可以有无数种方式来写代码,正则写的太严就会漏报,写的太松就会误报,关键字再怎么也不可能覆盖全面,面对黑客的绕过,这种检测方式完全没有办法。
我这里抛出一个观点:只要你的 WAF 是根据正则来维护规则的,那防护效果肯定好不到哪里去,要么误报特别多,要么漏报特么多,误报率和漏报率不可能同时降下来。
早在 10 多年前有一个叫做 libinjection 的开源项目尝试在正则表达式的基础上叠加使用编译原理的思路检测 SQL 注入攻击关键技术,libinjection 的核心思路如下
libinjection 的检测方式简单直接,相比直接使用正则表达式匹配关键字的方式,效果上有了很大的提升。
长亭受到启发,于是往编译原理的方向更近了一步,打造了免费在线 SQL 注入检测工具 SQLChop,从此开启了商业化 WAF 产品扎堆搞智能语义分析技术的大门。
雷池的攻击检测分 X 个关键阶段
语义分析是编译原理中的一个概念,学过编译原理的同学都知道,编译过程分为三个主要阶段
编译原理是计算机专业的本科课程,很多学校的信息安全专业不开编译原理课,不过最近几年接触过的比较优秀的信安毕业生都会自学编译原理课程,可以看出编译原理相关知识在安全从业圈里的普及率尚可。
文法是形式语言的描述规则,其实就是我们常说的 “语法”
我们日常使用的中文、英文,被称为自然语言;计算机所使用语言,像 C、Python、SQL、Java,这些语言约束性更强,有明确的规范,被称为形式语言。
文法也是编译原理中的一个概念,编译原理将形式化语言根据表达能力的强弱将文法分为 4 个级别
恳请大家伸出小手,给雷池社区版的 GitHub 仓库点上你的关键 star。
欢迎感兴趣的朋友加入 雷池讨论群 深入交流。