SQIRL

SQIRL: Grey-Box Detection of SQL Injection Vulnerabilities Using Reinforcement Learning 论文分享

Wahaibi, S. A., Foley, M., & Maffeis, S. (2023). SQIRL: Grey-Box Detection of SQL Injection Vulnerabilities Using Reinforcement Learning. 32nd USENIX Security Symposium (USENIX Security 23), 6097–6114.

pdf链接:usenix.org/system/files/usenixsecurity23-al-wahaibi.pdf

SQIRL:使用强化学习的SQL注入漏洞灰盒检测

SQIRL是一种基于深度强化学习,使用多个工作代理和灰盒反馈来检测SQL注入漏洞的新方法,使用单个代理来学习如何修正SQL语法、转义上下文和绕过sanitisation。

现存的SQL注入漏洞扫描器局限
  1. 漏洞扫描器通常用于在投入生产之前找到漏洞,但是它们有时依赖于错误处理和网页上的SQL查询的反馈,导致在不存在错误时的有效性不高
  2. 现有的扫描器使用简单的基于规则的方法来覆盖最常见的SQL注入有效载荷,但是这些有效载荷缺乏多样性,并且无法根据特定的网络应用程序来制定有效载荷,导致扫描器忽略了合法的漏洞
提出问题

如何生成针对每个注入点、特定上下文和防御的有效载荷

贡献
  1. 为代理实现一个强化学习(RL)环境,为SQL注入模糊Web应用程序,通过我们扩展的最先进的爬虫识别输入。

  2. 设计并实现了SQIRL,一种新的深度强化学习模糊方法。单个RL代理完成SQL注入的三项任务:语法修复、上下文转义和清理旁路,并且让这些工作在知识在代理之间共享。

强化学习(RL)

强化学习的主要思想是通过与环境的交互,基于奖励和惩罚来学习如何最好地完成任务,以实现长期累积奖励的最大化。在这个过程中,智能体通过尝试不同的行为,并根据获得的奖励和惩罚来调整自己的策略,以最大化长期累积奖励。强化学习考虑的是长期累积奖励,而不仅仅是即时奖励,因此智能体需要学会通过一系列看似不相关的行为来最大化长期奖励。此外,智能体还需要在探索和利用之间找到平衡,以最大化长期奖励。强化学习通常使用马尔科夫决策过程(MDP)来建模决策问题,其中包括状态、动作、奖励和转移概率。通过学习价值函数或策略函数来决定在每个状态下应该采取什么样的行动,以最大化长期奖励。

联邦学习(FL)

联邦学习是多个客户端模型在一段时间内独立训练,将学习得到的参数发送给中央服务器模型,服务器模型对得到的参数进行汇总(通常是求平均值),然乎将汇总后的参数发送给客户端,客户端使用新的参数进行训练,直至模型收敛。

查找SQL注入漏洞的主要步骤
  1. 识别可能容易受到SQL注入影响的输入位置。包括URL、输入标签和与网页相关的动态链接元素。
  2. 一旦找到输入位置,就可以制作相关的有效负载。

有效负载必须满足4个标准才能触发SQL注入

  • 生成语法有效的SQL,以避免执行错误

  • 转义预期的SQL上下文

  • 绕过应用于有效负载的任何基于黑名单的过滤

  • 更改SQL语句的预期行为。例如,假设没有过滤,表1中红色显示的有效载荷会转义为“并执行SLEEP语句”。

    image

SQIRL实现

SQIRL架构

image

RL环境

绿色部分是RL代理,计算当前有效载荷的突变。RL环境将Web应用程序抽象为RL代理,作为接受操作并返回观察结果的组件,它需要抓取Web应用程序和监控SQL数据库,提供反馈机制没允许代理学习如何定制SQL注入有效载荷。

SQl Proxy

SQL代理从数据库日志文件中检索SQL语句,用于SQIRL的抓取和模糊阶段。

State & Extrinsic Reward

时刻 t 的状态由三个不同的部分组成:在t−1时刻注入的有效载荷;在时间t−1时从SQL代理中提取的SQL语句(在出现错误且没有新的SQL语句的情况下,本文使用在t−2时捕获的SQL语句);如果在前一个时间步骤中出现SQL错误,则使用bit来标记。为了减少可能状态的空间,并鼓励泛化,有效负载和SQL语句被转换为通用形式:字符串和整数值分别被通用令牌STR和INT替换。

这部分涉及一个算法,用于计算奖励、终止条件和下一局的过渡函数。

image

如果没有发生错误,检测有效载荷是否更改了SQL的行为,出发成功的终止条件并奖励0。假如,SLEEP关键字八日注入,并且在预期的上下文之外没有进行过滤,这就是一个合法的SQL注入有效载荷,但是如果有效负载无法逃离上下文,被清理,不改变已执行的SQL的行为或者导致SQL语法错误,提供-1的奖励。过度函数中的行为更改、清理和专业上下文条件作为合法检查和正则表达式实现。

Payload Control Module

本地代理通过有效载荷控制模块(PCM)与Web应用程序交互。PCM将一个动作转换为具体的有效载荷,并将其注入Web应用中,计算结果状态和奖励,反馈给相关代理。

生成具体有效载荷的操作

  • 上下文转义:从有效载荷中添加或删除基本令牌,如’,#,1=1,SELECT
  • 行为更改:从有效载荷中添加或删除行为更改令牌,如AND SLEEP(0),WHERE SLEEP(0),SLEEP(0)
  • 过滤转义:更改现有有效载荷令牌,如通过关键字大小写(SeLect)、字符令牌(CHAR(20))和注释空白

这张表是SQL有效负载和语句的令牌空间

image

Local Worker

SQIRL的核心,包含处理操作、状态和执行主要学习任务的逻辑。

Global Agent

全局代理包含全局策略,使用代理从同一目标的独立互动中收集不同的行为

SQIRL生成的有效载荷通用表示法

image

本文的局限性

SQIRL使用SQL数据库中的信息,但无法访问网络应用程序的源代码,是一种灰盒工具,不需要依赖在网页上泄露错误信息就能发现漏洞,但是针对已部署网络应用程序的恶意行为无效。