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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 当下,语义分析算法因其轻规则、低误漏报、更贴合业务场景等优势被广泛应用于各类型的安全防护产品中,并取得了较好的效果,但现阶段依旧存在一些方法能够有效突破传统语义分析防护,本文会介绍部分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;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
存储 编译器 程序员
C语言调试大作战:与VS编译器共舞,上演一场“捉虫记”的艺术与科学
C语言调试大作战:与VS编译器共舞,上演一场“捉虫记”的艺术与科学
|
4月前
|
自然语言处理 前端开发 JavaScript
【利用AI让知识体系化】拍了拍AST
【利用AI让知识体系化】拍了拍AST
|
11月前
|
机器学习/深度学习 自然语言处理
chatGPT语义语法和计算机语言的力量
chatGPT是一种基于Transformer模型的语言生成模型,具有强大的语言理解和生成能力。它在自然语言处理领域具有广泛的应用,可以用于对话系统、问答系统、翻译系统等任务。chatGPT的语义语法和计算机语言的力量体现在以下几个方面。 首先,chatGPT能够理解和生成自然语言的语义含义。在预训练过程中,chatGPT学习到了大规模对话数据中的语言知识和上下文关联性。这使得它能够理解人类的语言表达,并且能够生成连贯、流畅的回复。通过在预训练过程中学习到的意义空间和语义运动定律,chatGPT能够根据输入的上下文信息生成与之相近的语义含义的回复。这种语义理解和生成能力使得chatGPT在对
61 0
|
机器学习/深度学习 人工智能 算法
人工智能机器学习底层原理剖析,人造神经元,您一定能看懂,通俗解释把AI“黑话”转化为“白话文”
按照固有思维方式,人们总以为人工智能是一个莫测高深的行业,这个行业的人都是高智商人群,无论是写文章还是和人讲话,总是讳莫如深,接着就是蹦出一些“高级”词汇,什么“神经网络”,什么“卷积神经”之类,教人半懂不懂的。尤其ChatGPT的风靡一时,更加“神话”了这个行业,用鲁迅先生形容诸葛武侯的话来讲:“多智而近妖”。 事实上,根据二八定理,和别的行业一样,人工智能行业内真正顶尖的天才也就是20%,他们具备真正的行业颠覆能力,可以搞出像ChatGPT这种“工业革命”级别的产品,而剩下的80%也不过就是普通人,每天的工作和我们这些人一样,枯燥且乏味,而之所以会出现类似“行业壁垒”的现象,是因为这个行
人工智能机器学习底层原理剖析,人造神经元,您一定能看懂,通俗解释把AI“黑话”转化为“白话文”
|
机器学习/深度学习 人工智能 自然语言处理
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
100 0
|
机器学习/深度学习 人工智能 自然语言处理
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
119 0
经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
|
机器学习/深度学习 人工智能 算法
当博弈论遇上机器学习:一文读懂相关理论
博弈论和机器学习能擦出怎样的火花?本文作者王子嘉通过回顾总结近年来博弈论和机器学习领域的交叉研究工作,为读者展示了这一领域最新的研究图景。
1051 0
当博弈论遇上机器学习:一文读懂相关理论
|
机器学习/深度学习 人工智能 自然语言处理
解决自然语言歧义问题,斯坦福教授、IJCAI 卓越研究奖得主提出 SenseBERT 模型
自然语言理解和生成对于 AI 系统来说是一大难题,语言的复杂性和模糊性对 AI 系统提出了很大挑战。今天,斯坦福教授、IJCAI 卓越研究奖得主 Yoav Shoham 创办的公司 AI21 Labs 提出一种能够显著提升词汇消歧能力的新模型,并发布了可控性优于其他前沿文本生成系统的「HAIM」。AI21 Labs 的愿景是构建「具备前所未有的优秀自然语言理解和生成能力」的 AI 系统。
275 0
解决自然语言歧义问题,斯坦福教授、IJCAI 卓越研究奖得主提出 SenseBERT 模型
|
机器学习/深度学习 自然语言处理 算法
什麽样的资料集不适合用深度学习?
什麽样的资料集不适合用深度学习?