雷池语义分析技术解密与绕过思路
2023-4-21 17:23:8 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

上周,长亭科技发布了核心产品雷池的免费社区版——https://waf-ce.chaitin.cn

长亭雷池 WAF 的核心技术是智能语义分析检测算法,作为雷池的产品经理,今天我来科普一下雷池智能语义分析检测算法的和绕过思路。

欢迎网友测试雷池的检测引擎,发现绕过可以通过 CTStack 社区提交反馈,误报确认后可以获得现金或礼品奖励,下面是社区反馈地址https://stack.chaitin.com/security-challenge/safeline/index(点击“阅读原文”快捷到达)

    看了一下雷池社区版 Demo 上的流量,尝试在绕过的人不少,但是大部分思路都不太对

  • 有人在尝试用大小写混淆,用 ScRiPt 代替 script

  • 比如用 seleSELECTct 代替 select

  • 有人在尝试一些特殊字符代替空格,比如 1/**/and/**/1/**/=/**/1

这些方法都是没有用的,都跟你们说了雷池不看关键字,告诉你们一些妙招,绕过应该从语法层面去找

  1. 语言(比如MYSQL)升级了新版本,发布的新语法雷池暂未支持

  2. 语言(比如MYSQL)的实现和文档说明不一致,存在一些特殊 feature 雷池暂未支持

下面几个 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 这些年的发展离不开正则和关键字

黑客经常使用 and 1=2 union select xx 进行 SQL 注入

好,那就检查 union select 关键字,只要出现就阻断访问。

黑客经常使用<img src=# onerror=alert()>进行 XSS 探测

好,那就检查 alert() 关键字,只要出现就阻断访问。

黑客经常使用 ../../etc/passwd 进行文件包含探测

好,那就检查 /etc/passwd 关键字,只要出现就阻断访问。

关键字技术发展了二十年,现在 github 随便一搜就能找到非常多的开源 WAF 正则规则。

黑客绕过 WAF 也很简单,各种变形,各种加混淆,就是想办法让攻击代码看起来没有明显的关键字。

代码是多灵活的东西,想实现同样的效果,我可以有无数种方式来写代码,正则写的太严就会漏报,写的太松就会误报,关键字再怎么也不可能覆盖全面,面对黑客的绕过,这种检测方式完全没有办法。

我这里抛出一个观点:只要你的 WAF 是根据正则来维护规则的,那防护效果肯定好不到哪里去,要么误报特别多,要么漏报特么多,误报率和漏报率不可能同时降下来

早在 10 多年前有一个叫做 libinjection 的开源项目尝试在正则表达式的基础上叠加使用编译原理的思路检测 SQL 注入攻击关键技术,libinjection 的核心思路如下:
  • 通过词法分析将 Payload 拆解为 Token 序列

  • 去除注释、换行等无意义的词法单元

  • 分析 Token 序列是否符合 SQL 注入的常见特征

libinjection 的检测方式简单直接,相比直接使用正则表达式匹配关键字的方式,效果上有了很大的提升。

长亭受到启发,于是往编译原理的方向更近了一步,打造了免费在线 SQL 注入检测工具 SQLChop,从此开启了商业化 WAF 产品扎堆搞智能语义分析技术的大门。

雷池的攻击检测分 X 个关键阶段

  1. 接受流量,解析 HTTP 协议,从 GET/POST/Header 等字段中提取参数

  2. 对 HTTP 的各种参数进行深度嵌套解码,寻找可能存在的用户输入

  3. 初步猜测可能存在的攻击方式

  4. 进行词法分析,将用户输入转换为词法序列

  5. 进行语法分析,判定用户输入是否符合特定攻击的语法

  6. 进行语义分析,对符合攻击语法的用户输入进行行为分析,从而判定恶意程度

  7. 对流量进行阻断

  • 误报少:语法检查严格,几乎不存在误伤的情况

  • 很难绕过:覆盖各种语言的所有变形种类,防护级别更高

  • 检测速度块:正则规则约维护越多,规则越多速度就约慢,但是语法规则永远只有一套

语义分析是编译原理中的一个概念,学过编译原理的同学都知道,编译过程分为三个主要阶段

  • 词法分析

  • 语法分析

  • 语义分析

 “编译原理是计算机专业的本科课程,很多学校的信息安全专业不开编译原理课,不过最近几年接触过的比较优秀的信安毕业生都会自学编译原理课程,可以看出编译原理相关知识在安全从业圈里的普及率尚可。”

文法是形式语言的描述规则,其实就是我们常说的 “语法”。

我们日常使用的中文、英文,被称为自然语言;计算机所使用语言,像 C、Python、SQL、Java,这些语言约束性更强,有明确的规范,被称为形式语言。

文法也是编译原理中的一个概念,编译原理将形式化语言根据表达能力的强弱将文法分为 4 个级别

  • 0 型文法:无限制文法,表达能力最强,能力等同于图灵机

  • 1 型文法上下文有关文法,能力等同于线性有界自动机

  • 2 型文法上下文无关文法,能力等同于下推自动机

  • 3 型文法正则文法,表达能力最弱,能力等同于有限状态自动机

恳请大家伸出小手,给雷池社区版的 GitHub 仓库点上你的关键 star。

-GitHub:

https://github.com/chaitin/safeline

- 官网:

https://waf-ce.chaitin.cn

欢迎感兴趣的朋友加入 雷池讨论群 深入交流。


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzOTE1ODczMg==&mid=2247496509&idx=2&sn=efbc304503c77edd6eabd79e228cd9f4&chksm=e92ce79ede5b6e88ef3acd886d7a6ec31b247260aee576f446523bb824bd4d34e1bc3762b952&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh