PRINCIPLE · 写给第一次接触 YSL 的你

没见过的新攻击,凭什么能拦?

这一页不讲参数、不讲配置,只回答一个问题:规则库里没有的攻击(0day),YSL 靠什么拦下来。看懂这一页,你就看懂了 YSL 和所有规则库 WAF 的本质区别。

第一章 · 先说清楚问题

规则库的天花板:它只能拦「认识」的攻击

传统 WAF 的工作方式像通缉令:厂商拿到攻击样本 → 提取特征 → 写成正则规则 → 推送更新。这意味着——

漏洞一

先中枪,再免疫

0day 爆发到规则推送之间有一个窗口期,短则几小时,长则数周。这个窗口里你是裸奔的。

漏洞二

变形即穿透

通缉令上写的是"红色外套"。攻击者换件蓝外套——加个注释、换个编码、拆个关键词——规则就匹配不上了。

漏洞三

规则越多,误报越多

为了追变形,规则越写越宽,宽到把正常用户也拦进来。运维最后只能含泪放宽策略。

YSL 换了一条路:不背通缉令,直接学"什么是犯罪"。攻击无论怎么变形,它的结构和行为是不变的——这就是能拦 0day 的全部原理基础。

第二章 · YSL 的答案

第一步:14 层编码归一化——先让所有变形「现出原形」

攻击者最常用的 hiding 手段是编码和混淆。YSL 的流水线把请求逐层剥开,变形在这里坍缩。

// 三种写法完全不同的攻击载荷—— uni%6fn sel%u0065ct // URL 编码拆字 UNION/**/SELECT // 注释混淆 UNION SELECT // 全角字符 // 经过 14 层归一化(递归 URL 解码 → 注释混淆还原 → 全角/半角映射 → …)—— 全部坍缩为:union select // 攻击者可以发明一万种新写法, // 但只要它本质是 "union select",在这一步之后都长同一个样子。 // 注意:这一步发生在任何"识别攻击"之前——变形绕过在这里就已经输了。

第二步:结构判定——看「结构」不看「特征串」

归一化之后,YSL 不去查"这个字符串在不在黑名单",而是把载荷按语法结构拆开(SQL token 流、注入上下文归类),看结构是否成立。

// 假设出现一个明天才被披露的 0day 载荷,写法从未有人见过: 1' oR((seLect/**/group_concat(table_name)/**/fRoM/**/information_schema.tables))# // 签名库:没见过这条样本(但下面的判定不依赖"见过") // YSL DeepAST 的 SQL token 流结构分析看到的是: ├─ token 流: [数字][引号][OR][子查询起始][聚合函数 group_concat][FROM][系统表名] ├─ 结构事实:布尔上下文 + 子查询读系统表 = 数据外带结构成立 └─ 证据入格: deepast.sqli_* (MAYBE) · pathfinder.EFFECT_REACH (MAYBE) · rule.SQLI_META (EXPLOITABLE) —— 语法与数据流事实,不依赖样本历史 // 就像法官不需要见过某个骗子的脸, // 只需要认定"虚构事实+转移财产"的结构成立,就能定罪。

第三步:行为推演——「会做什么」比「是什么」更难伪装

有些攻击连结构都很隐蔽。YSL 的轻量沙箱在受控环境里推演载荷的运行时行为:

// 一个藏了多层编码的 webshell(真实分析输出,ysl analyze 整形) $z = gzinflate(base64_decode($_POST['z'])); @eval($z); // YSL 沙箱逐层解开,在内存里推演最终载荷的行为—— ├─ 推演行为: taint:$_POST · taint_flow:eval( · obf:base64_decode · obf:gzinflate ├─ 证据入格: sbxscore (MAYBE) · pathfinder EFFECT_REACH (MAYBE · RCE) └─ 全程无真实执行、无进程创建,步数/内存有硬上限(沙箱本身打不挂) // 上传链路里的 webshell 体由 upload_scan 独立扫描(文件名门禁 + 内容签名 + 图像魔数),不再单靠沙箱
第三章 · 完整回放

一个「从未见过」的攻击,走完 YSL 全程

把三步串起来,看一次完整判定。这个例子里的载荷是假设的——正因为是假设的,才叫 0day 防护。

请求到达,先过前置防线

TLS 指纹(JA4)显示客户端不是浏览器;H2 行为探纹进一步确认是自动化工具。进入检测管线。

14 层归一化

三层嵌套编码被逐层剥开(L1 递归 URL → L5 嵌套递归 → L7 Base64),载荷露出规范形态。

多路独立检测

签名层:SQLI_UNION 命中(EXPLOITABLE);污点路径:EFFECT_REACH 从参数直达 SQL 汇点(EXPLOITABLE);深层结构:跨注释 UNION/SELECT 结构成立(MAYBE)——三路检测器各自举证、互不通信,证据进同一张格。

证据格仲裁

加权后 score=100(0-100 口径),过阻断门限 60,判定 arbiter_critical。结论不是任何一路"拍脑袋"给的,是格上的加权与冲突消解。

处置与反制

拦截 + 审计留证。攻击者 IP 进入观察名单——后续他看到的是假后台、假数据(蜜罐反制),他的一切探测动作变成我们的情报。

学习闭环沉淀

这次拦截进审计库 → 自动挖掘新形态 → 模型训练 → 热加载生效(置信度封顶 0.85)。下一次同类攻击,拦得更快。

换个角度想:规则库 WAF 是"见过才拦";YSL 是"结构对就拦"。新攻击要穿透 YSL,攻击者必须发明一种既不是已知语法结构、推演起来也没有行为特征的攻击——而那已经不是 Web 攻击了。
第三章附 · 检测面全景

结构分析与签名层,各管什么?

如实分层:真正做结构判定的是三块(红色标注:SQL 结构签名 / 注入上下文图 / HPP 合并);21 个攻击家族是结构化签名集——源自盾甲在野规则沉淀,编译进二进制、不联网热更、有门控与评分,是机制层脚下的辅助资产。

表达式注入 ${}/${#/OGNL} JNDI(Log4Shell 类) SSTI 模板注入 反序列化 文件包含 LFI/RFI XPath 注入 XSS 跨站 开放重定向 原型污染 JWT 篡改 CSV 注入 NoSQL 注入 CRLF 注入 XXE 实体 GraphQL 攻击 SMTP 头注入 XSLT 注入 Shellshock ImageTragick XML 炸弹 ReDoS 正则炸弹 + SQL token 流结构分析(DeepAST) + 注入上下文图(多假设并存) + HPP 参数污染合并

红色三项是结构判定面——签名法做不到的跨注释/跨空白/上下文歧义判定,0day 拦截的主力。

COVERAGE · 常见问题

能防哪些漏洞?只有 SQL 吗?

SQL 只是其中一路。以下是产品真实的防御面清单(全部可在评测中实测)。

类别覆盖的漏洞 / 攻击类型
注入类
家族签名 ×21 + 词法探针族
SQL 注入 · NoSQL 注入 · XSS 跨站 · XPath 注入 · 表达式注入(SpEL/OGNL)· SSTI 模板注入 · JNDI(Log4Shell 类)· 反序列化 · XXE 实体 · CSV 公式注入 · SMTP 头注入 · CRLF 注入 · XSLT 注入 · GraphQL 攻击 · XML 炸弹 · ReDoS 正则炸弹 · 开放重定向 · 原型污染 · JWT 篡改 · Shellshock · ImageTragick | 另有词法探针族:SSI 服务端包含 · 目录穿越/PHP 流包装器 · LDAP 注入 · 命令拼接
结构类
结构判定三块
SQL token 流结构签名(DeepAST)· 注入上下文图(多假设)· HPP 参数污染合并
上传类Webshell(评分分层)· 像素炸弹 · PDF 主动内容(/Launch、JS+触发器)· OLE 宏马 · zip 藏匿 / 符号链接
协议类HTTP 请求走私 · Range DoS(Apache Killer 口径)· Slow POST 滴流 · CC 洪水 · WebSocket 连接耗尽
行为类撞库 / 爆破(敏感路径行为限流)· 扫描器 · 恶意爬虫(JA4 + 行为指纹)· 请求头自动化指纹
主机类页面/文件篡改(DNA 基线还原)· 上传目录后门探测 · 授权克隆
LAYERS · 常见问题

一条请求到底经过多少层?

不止四层。真实产品里是 20+ 道关卡按序把关,以下按请求经过顺序(每组都有独立开关与审计)。

// 接入层 威胁情报+网段连坐 → WS 耗尽防护 → 官方蜘蛛豁免(双验证) → 请求头自动化指纹 → 四档熔断(常态→降级→紧急→熔断) // 行为层 上传目录后门探测 → 敏感路径行为限流(撞库/爆破) → CC/JS 挑战 // 协议层 请求走私检测 → Range DoS → 请求体检视(压缩炸弹/限长) → Slow POST → 解析歧义 // 引擎层 14 层编码归一化 → DeepAST 结构分析 + 家族签名 → 沙箱行为推演 → AI 集成 → 证据格仲裁(门限裁决) // 处置层 蜜罐历史信号 → 放行/拦截/污染/假世界 → 转发 → 响应泄露检测

每一关的判定都带证据入库——大屏上能回放任何一条请求的完整旅程。
申请演示版实测 →

第五章 · 正面回答质疑

"只留深层结构分析,不就够了?为什么要整套 YSL?"

先如实交代分层:21 家族是结构化签名资产,真正做结构判定的只有三块(SQL 结构签名 / 上下文图 / HPP 合并)。于是问题变成——只留这三块真语义 + 主场机制,够不够?答案:主场机制正是让它们能打仗的前提。

结构解析只认规范输入。uni%6fn sel%u0065ct、全角 UNION——直接喂给 SQL 解析器,它什么都解析不出来。14 层归一化先把一万种变形坍缩成一个形态,结构分析才有活干。没有链,每路解析器都得自己重复处理所有编码,还处理不齐。
任何单路定罪 = 单点误报:正常业务里一句含 SQL 关键词的文案、一个带 ${} 的模板参数都会触发报警。YSL 架构里每路检测只提供证据(带置信度),弱信号不定罪,多路叠加过门限才处置。误报是证据格拔掉的,不是哪个检测器自己压住的——只留单路,你要么漏报要么误报,二选一。
上传 Webshell、像素炸弹、请求走私、CC 洪水、撞库爆破、文件篡改——这些没有"语法结构"可解析,结构分析完全无能为力。沙箱管行为、协议层管走私、DNA 管主机——结构分析只是 20+ 道关卡中的一道。
深度嵌套的恶意输入能让递归解析器栈溢出,恶意正则能让引擎挂死(ReDoS)。有界性(深度/步数/内存硬上限)长在变换链和沙箱的骨架里——没有这层,攻击者第一个打挂的就是检测引擎本身。
如实回答:它是结构化签名资产——编译进二进制、不联网热更、不追漏洞公告,每条带门控与评分,与厂商"见过才拦"的在线规则库性质不同。但它的定位始终是辅助层:核心拦截力来自归一化坍缩 + DeepAST 结构判定 + 沙箱行为推演,签名只做背景补充,并由在线学习闭环(机器沉淀、置信度封顶)逐步接替。
法庭类比:深层结构分析是关键证人(认定结构事实),21 家族签名是案卷背景档案(见过的高频作案手法),证据格是法庭,变换链是标准笔录流程(方言翻成普通话才能开庭),沙箱是行为侦察。只有证人没有法庭——谁都能定罪;只有档案没有证人——没证据可审。YSL 内核的价值,就是把证人、档案、法庭、笔录、侦察组织成一套可回放、有边界、误报可控的制度——这也是"从论文到工程"真正的贡献:确定性、可解释、有界。
第四章 · 三道保险之外

还有最后一道:学习闭环

保险一

结构(AST)

语法事实永不过期。攻击者换写法,换不掉语法结构。

保险二

行为(沙箱)

推演"它要干什么",比识别"它是什么"难伪装一个数量级。

保险三

证据格

单路不确定不定罪,多路同指才升级——误报的根被拔掉。

兜底

学习闭环

每条真实拦截自动沉淀为新知识(置信度封顶 0.85,人握终审)——同类攻击再出现,识别更快。

看懂了?亲眼看一遍

演示评估版功能全开,拿一个靶机环境,亲手打一次——看证据格怎么工作。

💬 商务咨询 634769642