什么是SQL注入?SQL 注入,也称为 SQLI,是一种常见的攻击媒介,它使用恶意 SQL 代码进行后端数据库操作,以访问不打算显示的信息。此信息可能包括任意数量的项目,包括敏感的公司数据、用户列表或私人客户详细信息。
SQL 注入对业务的影响是深远的。一次成功的攻击可能会导致未经授权查看用户列表、删除整个表,并且在某些情况下,攻击者会获得对数据库的管理权限,所有这些都会对企业造成极大的损害。
在计算 SQLi 的潜在成本时,重要的是要考虑到如果电话号码、地址和信用卡详细信息等个人信息被盗,客户将失去信任。虽然此向量可用于攻击任何 SQL 数据库,但网站是最常见的目标。
什么是 SQL 查询
SQL 是一种标准化语言,用于访问和操作数据库,为每个用户构建可定制的数据视图。SQL 查询用于执行命令,例如数据检索、更新和记录删除。不同的 SQL 元素执行这些任务,例如,根据用户提供的参数使用 SELECT 语句检索数据的查询。
典型的 eStore 的 SQL 数据库查询可能如下所示:
选择 ItemName,ItemDescription 来自项目 其中 ItemNumber = ItemNumber
由此,Web 应用程序构建一个字符串查询,该查询作为单个 SQL 语句发送到数据库:
sql_查询=“ 选择 ItemName,ItemDescription 来自项目 WHERE ItemNumber = " & Request.QueryString("ItemID")
用户提供的输入 http://www.estore.com/items/items.asp?itemid=999 然后可以生成以下 SQL 查询:
选择 ItemName,ItemDescription 来自项目 其中 ItemNumber = 999
您可以从语法中了解到,此查询提供了项目编号 999 的名称和描述。
SQL注入的类型
SQL 注入通常分为三类:In-band SQLi (Classic)、Inferential SQLi (Blind) 和 Out-of-band SQLi。您可以根据 SQL 注入用于访问后端数据的方法及其破坏潜力对 SQL 注入类型进行分类。
带内 SQLi
攻击者使用相同的通信渠道发起攻击并收集结果。带内 SQLi 的简单性和高效性使其成为最常见的 SQLi 攻击类型之一。此方法有两个子变体:
- 基于错误的 SQLi — 攻击者执行导致数据库产生错误消息的操作。攻击者可能会使用这些错误消息提供的数据来收集有关数据库结构的信息。
- 基于联合的 SQLi — 该技术利用了 UNION SQL 运算符,它融合了数据库生成的多个选择语句以获得单个 HTTP 响应。此响应可能包含攻击者可以利用的数据。
推理(盲)SQLi
攻击者向服务器发送数据有效载荷并观察服务器的响应和行为以了解有关其结构的更多信息。这种方法称为盲 SQLi,因为数据不会从网站数据库传输到攻击者,因此攻击者无法看到有关带内攻击的信息。
SQL 盲注依赖于服务器的响应和行为模式,因此它们通常执行起来较慢,但可能同样有害。SQL盲注可分为以下几类:
- 布尔值——攻击者向数据库发送 SQL 查询,提示应用程序返回结果。结果将根据查询是真还是假而有所不同。根据结果,HTTP 响应中的信息将修改或保持不变。然后,攻击者可以确定消息生成的结果是真还是假。
- 基于时间——攻击者向数据库发送 SQL 查询,这使数据库等待(以秒为单位的一段时间)才能做出反应。攻击者可以从数据库响应的时间看出查询是真还是假。根据结果,将立即或在等待一段时间后生成 HTTP 响应。因此,攻击者可以计算出他们使用的消息是返回真还是假,而不依赖于数据库中的数据。
带外 SQLi
只有在 Web 应用程序使用的数据库服务器上启用了某些功能时,攻击者才能执行这种形式的攻击。这种形式的攻击主要用作带内和推理 SQLi 技术的替代方法。
当攻击者无法使用相同的通道发起攻击和收集信息,或者服务器速度太慢或不稳定而无法执行这些操作时,将执行带外 SQLi。这些技术依赖于服务器创建 DNS 或 HTTP 请求以将数据传输给攻击者的能力。
SQL 注入示例
希望执行 SQL 注入的攻击者操纵标准 SQL 查询以利用数据库中未经验证的输入漏洞。可以通过多种方式执行此攻击向量,此处将展示其中的几种方式,让您大致了解 SQLI 的工作原理。
例如,上述提取特定产品信息的输入可以更改为 http://www.estore.com/items/items.asp?itemid=999 或 1=1。
结果,相应的 SQL 查询如下所示:
选择 ItemName,ItemDescription 来自项目 其中 ItemNumber = 999 或 1=1
由于语句 1 = 1 始终为真,查询将返回数据库中的所有产品名称和描述,甚至包括您可能没有资格访问的那些。
攻击者还能够利用错误过滤的字符来更改 SQL 命令,包括使用分号分隔两个字段。
比如这个输入 http://www.estore.com/items/iteams.asp?itemid=999;DROP TABLE 用户 将生成以下 SQL 查询:
选择 ItemName,ItemDescription 来自项目 其中项目编号 = 999;删除表用户
结果,可能会删除整个用户数据库。
另一种操作 SQL 查询的方法是使用 UNION SELECT 语句。这结合了两个不相关的 SELECT 查询以从不同的数据库表中检索数据。
例如,输入 http://www.estore.com/items/items.asp?itemid=999 UNION SELECT user-name, password FROM USERS 产生如下 SQL 查询:
选择 ItemName,ItemDescription 来自项目 WHERE ItemID = '999' UNION SELECT Username, Password FROM Users;
使用 UNION SELECT 语句,此查询将对项目 999 的名称和描述的请求与另一个为数据库中的每个用户提取名称和密码的请求组合在一起。
SQL 注入与 OS 命令执行相结合:Accellion 攻击
Accellion 是 File Transfer Appliance (FTA) 的制造商,FTA 是一种网络设备,广泛部署在世界各地的组织中,用于移动大型敏感文件。该产品已有 20 多年的历史,现在已经到了生命周期的尽头。
FTA 是一种独特的、高度复杂的攻击的目标,该攻击将 SQL 注入与操作系统命令执行相结合。专家推测 Accellion 攻击是由与金融犯罪集团FIN11 和勒索软件集团 Clop有联系的黑客实施的。该攻击表明,SQL 注入不仅是一种影响 Web 应用程序或 Web 服务的攻击,还可以用于破坏后端系统和泄露数据。
谁受到了这次袭击的影响?
Accellion 漏洞是一种供应链攻击,影响了许多部署了 FTA 设备的组织。其中包括新西兰储备银行、华盛顿州、澳大利亚证券和投资委员会、电信巨头新加坡电信和安全软件制造商 Qualys,以及许多其他机构。
加速攻击流程
根据 Accellion 委托的一份报告,SQLi 和命令执行攻击的结合工作如下:
- 攻击者执行 SQL 注入以获得对 document_root.html 的访问权限,并从 Accellion FTA 数据库中检索加密密钥。
- 攻击者使用密钥生成有效令牌,并使用这些令牌访问其他文件
- 攻击者利用 sftp_account_edit.php 文件中的操作系统命令执行漏洞,允许他们执行自己的命令
- 攻击者在服务器路径 /home/seos/courier/oauth.api 中创建了一个 web shell
- 使用这个 web shell,他们将一个自定义的、功能齐全的 web shell 上传到磁盘,其中包括高度定制的工具,用于从 Accellion 系统中窃取数据。研究人员将这个外壳命名为 DEWMODE。
- 使用 DEWMODE,攻击者从 Accellion FTA 系统上的 MySQL 数据库中提取可用文件列表,并在 HTML 页面上列出文件及其元数据
- 攻击者执行文件下载请求,其中包含对 DEWMODE 组件的请求,带有加密和编码的 URL 参数。
- DEWMODE 能够接受这些请求,然后从 FTA 网络日志中删除下载请求。
这提高了 SQL 注入攻击的知名度,展示了如何将它们用作对关键企业基础设施进行更具破坏性的攻击的网关。
SQLI 预防和缓解
有几种有效的方法可以防止 SQLI 攻击的发生,并在它们发生时进行防护。第一步是输入验证(又名清理),这是编写可以识别非法用户输入的代码的做法。
虽然输入验证应始终被视为最佳实践,但它很少是万无一失的解决方案。现实是,在大多数情况下,绘制出所有合法和非法输入是根本不可行的——至少在不导致大量误报的情况下是不可行的,这会干扰用户体验和应用程序的功能。
出于这个原因,通常使用 Web 应用程序防火墙 (WAF) 来过滤掉 SQLI 以及其他在线威胁。为此,WAF 通常依赖于大量且不断更新的精心制作的签名列表,这些签名允许它像手术一样清除恶意 SQL 查询。通常,这样的列表包含用于解决特定攻击向量的签名,并定期修补以引入针对新发现漏洞的阻止规则。
现代 Web 应用程序防火墙还经常与其他安全解决方案集成。WAF可以从这些信息中接收进一步增强其安全功能的附加信息。例如,遇到可疑但并非彻头彻尾的恶意输入的 Web 应用程序防火墙可能会在决定阻止请求之前使用 IP 数据对其进行交叉验证。如果 IP 本身的声誉历史不佳,它只会阻止输入。
Imperva 基于云的 WAF使用签名识别、IP 信誉和其他安全方法来识别和阻止 SQL 注入,并最大限度地减少误报。WAF 的功能由IncapRules增强——一个自定义安全规则引擎,支持对默认安全设置进行精细自定义,并创建额外的特定案例安全策略。我们的 WAF 还采用众包技术,确保针对任何用户的新威胁立即传播到整个用户群。这有助于快速响应新披露的漏洞和零日威胁。