安全研究所 | 突破语义分析的黑魔法

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 当下,语义分析算法因其轻规则、低误漏报、更贴合业务场景等优势被广泛应用于各类型的安全防护产品中,并取得了较好的效果,但现阶段依旧存在一些方法能够有效突破传统语义分析防护,本文会介绍部分SQL注入场景下突破语义分析算法的黑魔法。

引言

当下,语义分析算法因其轻规则、低误漏报、更贴合业务场景等优势被广泛应用于各类型的安全防护产品中,并取得了较好的效果,但现阶段依旧存在一些方法能够有效突破传统语义分析防护,本文会介绍部分SQL注入场景下突破语义分析算法的黑魔法。

语义\词法分析概述

词法分析

现阶段,SQL注入的词法分析主流分为两类:

基于弱规则词法黑名单

基于词法Token变化

其中基于弱规则词法黑名单的算法被用于大家熟知的Libinjection,主要通过将用户的输入进行Token化,然后再去匹配一份维护好了的SQL注入黑名单规则库,从而有效发现SQL注入问题。

其中各种输入对应词法如下:

7ea0b3a71481403af61ea458debdeed7.png

检测SQL注入的流程如下:

e1fefdb676845170ee69e1f8f0c83f38.png

而基于Token变化的检测算法,规则比上述算法更弱,只需计算用户的输入是否横跨了多个Token,如果横跨了多个Token则判断为存在SQL注入。

706ce6fb10f53736ee6160c04ef8bc91.png

语义分析

和词法分析相比,语义分析会做的更加细致,它不仅仅关注SQL的Token,更会去关注用户的输入对具体的SQL结构造成了怎样的改变,这样能够更大程度的解决词法分析仅仅基于Token造成的误报问题。

c56e3c1386e171cf4b86539ede7a484b.png

当用户输入会导致SQL整体语义发生变化,往往会被语义分析判定为SQL注入。

b9ef26d74b9c651dae5378d137ad4f17.png

对于一些运行时安全防护产品而言,由于运行在应用中,可以直接获取到完整的SQL语句,语义分析的准确率往往较高,而对于传统流量型安全防护产品而言,由于只能获取到流量中的用户输入参数,无法知道真实运行的SQL语句是什么样的,就需要额外的工作,大体分为两类:

SQL片段分析:

需要基于 Context Free Grammer ,最大的挑战是时间复杂度和准确率。

构造完整的SQL语句:

主流安全产品会假设用户输入参数为数字型、字符型两种场景,将参数拼接到简化的SQL语句中构成完整的SQL语句,进而进行语义分析。但很多时候会出现关键字拼接参数(如IN、GROUP BY、ORDER BY等)的场景,这种情况下语义分析准确率就会下降,而如果尽可能的穷举了用户参数的拼接场景,则会造成性能的不可控。

绕过思路

预期外的SQL特性

原理

语义分析会面临的一个最大的难题就是:虽然大部分的数据库语法都比较相似,但不同数据库之间又都有自己独有的一些特性在里面,这样如果攻击者对某一款数据库足够了解,就可能通过一些特殊的SQL特性进行SQL注入,而语义分析之前又未能兼容该特性,从而导致语义分析引擎报错,失去检测能力。

巧用ODBC

ODBC是一个大部分SQL都支持的特性,官方介绍如下:

{identifier expr} is ODBC escape syntax and is accepted for ODBC compatibility. The value is expr. The { and } curly braces in the syntax should be written literally; they are not metasyntax as used elsewhere in syntax descriptions.

由于ODBC本身的自由性,可以构造出很多非常复杂的SQL语句,从而导致语义分析很难进行识别。

627080b7bc11179728a2ec7f3dd37c00.png

psql并不认识转义字符

几乎大部分主流语义分析引擎、主流数据库都将 \ 理解为转义字符,但PSQL并不这么理解,对 \ 理解上的差异使得绕过PSQL变得十分容易。

4adf4debd8e3c230b7cddc6b35b2c2c5.png

神奇的科学计数法

科学符号,特别是 e 符号,已被集成到包括 SQL 在内的许多编程语言中。目前还不清楚这是否是所有 SQL 实现的一部分,但它是 MySQL/MariaDB 实现的一部分。当e符号在无效的上下文中使用的时候,并不会导致SQL报错,而是会被SQL自行忽略,这就导致了SQL注入时的Payload可以通过大量无效科学符号来影响语义分析引擎对SQL语句的解析。

select last_name from students where student_id = '1' union select concat 5.e(1.e(flag 10.2e)3.e,'*'6.e) from test 1.e.flag--

注释欺骗的艺术

原理

大部分语义分析往往都是能够识别出注释,并在分析时省略注释后面语句的分析,从而实现更好的性能,那么如果攻击者能够成功构造出语义分析引擎认为是注释而实际数据库并不认为是注释的特殊关键字,再把攻击的Payload隐藏在注释之后,就能成功欺骗语义分析,光明正大的进行SQL注入。

万能注释 //

存在不少语义分析引擎,在解析数据流的时候,会将 // 作为注释处理,忽视后面的内容,而大部分主流数据库,并不将 // 作为注释。

54fc329fe9701f5252a11ef7555b07d2.png

注释结束符的差别

语义分析引擎 往往认为 \r \n 都是注释的结束符,但很多数据库(MYSQL\ORACLE等)只认 为 \n 是注释结束符,利用注释结束符理解的差异可以构造绕过。

bdfb58baf2221beb868e311903f5e062.png

mybatis眼中的#

JAVA的mybatis框架会对用户输入的参数做一些特殊的处理,尤其针对形如 #{param} 这种写法的数据的额外处理,会对语义分析造 成极强的欺骗性。

9bba4e6c148ae20c23f25c0fdd354db2.png

b042865bcdaf8c523854556c39b47e20.png

巧用特殊关键字

原理

除去让很多开发、安全人员熟知的关键字外,不少数据库也拥有一些较为冷门的关键字,这些关键字在语义分析或词法分析时很可能未能兼容,从而导致防护失效。因此,寻找冷门且有效的关键字也是绕过语义分析引擎的一种有效手段,尤其是针对新版本的数据库,往往会出现一些新的关键字,这些关键字极有可能未被兼容。

handle替代select

MySQL 除了可以使用 select 查询表中的数据,也可使用 handler 语句,这条语句使我们能够一行一行的浏览一个表中的数据。它是 MySQL专用的语句,并没有包含到SQL标准中。handler 语句由于可以查询数据,因此也是SQL注入中一个十分方便且鲜为人知的关键字。

SELECT * FROM students WHERE stuname = 'glassy';Handler flag OPEN;Handler flag read first;Handler flag close;#

MEMBER OF函数

MEMBER OF()是一个MySQL8高版本特性,官方定义它是一个函数,但是这个函数的函数名中间还包含空格,十分具有欺骗性,虽然它对于注出数据并没有什么帮助,但是放在注入Payload的前段以促使语义分析引擎解析失败报错却是一个很不错的选择。

SELECT last_name FROM students WHERE student_id = '1' and (select substr((SELECT flag from flag), 1, 1) MEMBER OF('["a","b","t"]'))=1;

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
机器学习/深度学习 自然语言处理 测试技术
CoT神话破灭,并非LLM标配!三大学府机构联手证实,CoT仅在数学符号推理有用
【10月更文挑战第17天】链式思维(CoT)曾被认为是大型语言模型(LLM)激发推理能力的关键方法,但最新研究显示,CoT仅在数学和符号推理任务中有效,其他任务中效果不明显。加州大学伯克利分校、斯坦福大学和卡内基梅隆大学的联合研究打破了CoT作为LLM标配的神话,为重新评估LLM的推理能力提供了新视角。
54 1
|
26天前
|
人工智能 数据挖掘
AI长脑子了?LLM惊现人类脑叶结构并有数学代码分区,MIT大牛新作震惊学界!
麻省理工学院的一项新研究揭示了大型语言模型(LLM)内部概念空间的几何结构,与人脑类似。研究通过分析稀疏自编码器生成的高维向量,发现了概念空间在原子、大脑和星系三个层次上的独特结构,为理解LLM的内部机制提供了新视角。论文地址:https://arxiv.org/abs/2410.19750
67 12
|
8月前
|
自然语言处理 前端开发 JavaScript
【利用AI让知识体系化】拍了拍AST
【利用AI让知识体系化】拍了拍AST
|
机器学习/深度学习 人工智能 自然语言处理
本科毕业加入谷歌,还写了「思维链」开山之作,这位OpenAI新秀正为本科生答疑解惑
本科毕业加入谷歌,还写了「思维链」开山之作,这位OpenAI新秀正为本科生答疑解惑
133 0
|
机器学习/深度学习 人工智能 自然语言处理
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
114 0
|
机器学习/深度学习 编解码 人工智能
超有趣!LSTM之父团队最新力作:将强化学习“颠倒”过来
超有趣!LSTM之父团队最新力作:将强化学习“颠倒”过来
636 0
超有趣!LSTM之父团队最新力作:将强化学习“颠倒”过来
|
机器学习/深度学习 人工智能 自然语言处理
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
139 0
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
|
机器学习/深度学习 人工智能 安全
「看面相识别罪犯」论文要上Nature?遭1700名科学家联名反对
有 1700 名研究者签字联名抵制 Nature 出版一篇 AI 研究论文,这可是头一次。
123 0
「看面相识别罪犯」论文要上Nature?遭1700名科学家联名反对
|
机器学习/深度学习 人工智能 自然语言处理
解决自然语言歧义问题,斯坦福教授、IJCAI 卓越研究奖得主提出 SenseBERT 模型
自然语言理解和生成对于 AI 系统来说是一大难题,语言的复杂性和模糊性对 AI 系统提出了很大挑战。今天,斯坦福教授、IJCAI 卓越研究奖得主 Yoav Shoham 创办的公司 AI21 Labs 提出一种能够显著提升词汇消歧能力的新模型,并发布了可控性优于其他前沿文本生成系统的「HAIM」。AI21 Labs 的愿景是构建「具备前所未有的优秀自然语言理解和生成能力」的 AI 系统。
336 0
解决自然语言歧义问题,斯坦福教授、IJCAI 卓越研究奖得主提出 SenseBERT 模型
|
机器学习/深度学习 人工智能 监控
AI说长这样挣得多!Nature力证科学看相,3万张自拍揭露面相-性格关系,碾压算命先生
AI说长这样挣得多!Nature力证科学看相,3万张自拍揭露面相-性格关系,碾压算命先生
454 0