跳到主体内容

SQL 注入攻击是最古老的 Web 应用漏洞之一,自 20 世纪 90 年代末以来一直是研究热点,时至今日仍然备受重视。本文概述了 SQL 注入的定义、运作原理以及防御手段。

SQL 注入 – 含义和定义

SQL(结构化查询语言)注入(有时缩写为 SQLi)是一种安全漏洞,攻击者使用一段 SQL 代码来操纵数据库并访问可能有价值的信息。这是流行范围最广、威胁最大的攻击类型之一,因为它可能被用来攻击任何使用基于 SQL 的数据库的 Web 应用或网站,而大多数 Web 应用和网站都使用基于 SQL 的数据库。

SQL 注入攻击的运作原理是什么?

要了解 SQL 注入,必须了解什么是结构化查询语言 (SQL)。SQL 是一种在编程中使用的查询语言,用于存取、修改和删除存储在关系数据库中的数据。由于绝大多数网站和 Web 应用依赖 SQL 数据库,因此 SQL 注入攻击可能会对组织造成严重后果。

SQL 查询是发送到数据库的请求,用于执行某些类型的活动或功能,例如查询数据或执行 SQL 代码。其中一个示例是通过 Web 表单提交登录信息以允许用户访问某个网站。通常情况下,设计此类 Web 表单是为了仅接受特定类型的数据,例如名称和/或密码。在添加此类信息时,将会对照一个数据库进行检查,如果匹配则授权用户进入,否则,用户将被拒绝访问。

由于大多数 Web 表单都无法阻止在表单上输入附加信息,因此存在安全隐患。攻击者可以利用这一漏洞,通过表单上的输入框将自己的请求发送到数据库中。这样就可以实施各种非法活动,包括窃取敏感数据,或者操纵数据库中的信息以达到自己的目的。

由于大多数网站和服务器都使用数据库,使得 SQL 注入漏洞成为最古老、分布最广的网络攻击类型之一。黑客技术不断发展,加剧了这类攻击的风险,其中最值得注意的是出现了用于检测和利用 SQL 注入的工具。借助开源开发人员免费提供的这些工具,网络犯罪分子可以通过简单的点击攻击过程来访问数据库中的任何表格或任何列,几分钟内就能自动实施攻击。

SQL 注入攻击的迹象

SQL 注入攻击成功后可能根本没有任何迹象。但是有时会显露出一些迹象,其中包括:

  • 在短时间内收到过多请求。例如,您可能会从网页联系表中看到大量电子邮件。
  • 重定向到可疑网站的广告。
  • 奇怪的弹窗和消息错误。

SQL 注入的类型

根据攻击者访问后端数据的方式以及造成的潜在损害程度,SQL 注入分为三类:

带内 SQL 注入:

这种类型的 SQL 注入攻击对于攻击者来说很简单,因为他们可以在同一个信道内发起攻击并收集结果。这种类型的 SQL 注入攻击有两种形式:

  • 基于错误消息的 SQL 注入:由于受到攻击,数据库会产生错误消息。攻击者根据这些错误消息生成的数据来收集有关数据库基础设施的信息。
  • 基于联合查询的 SQL 注入:攻击者使用 UNION SQL 运算符将多个 SELECT 语句合并成单个 HTTP 响应,从而获取所需的数据。

推理 SQL 注入(又称 SQL 盲注):

在实施这类 SQL 注入时,攻击者会在发送数据有效负载后,使用服务器的响应和行为模式来了解有关其结构的更多信息。网站数据库的数据不会传输给攻击者,因此攻击者看不到有关带内攻击的信息(因此称为“SQL 盲注”)。推理 SQL 注入可以分为两类:

  • 基于时间的 SQL 注入:攻击者向数据库发送 SQL 查询,数据库会等待几秒钟,然后显示查询结果是 True 还是 False。
  • 布尔型 SQL 注入:攻击者向数据库发送 SQL 查询,让应用显示查询结果是 True 还是 False。

带外 SQL 注入:

这种类型的 SQL 发生在以下两种情况下:

  • 当攻击者无法使用同一信道发起攻击以及收集信息时;或者,
  • 当服务器太慢或不稳定而无法执行这些操作时。
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

SQL 注入攻击的影响

SQL 注入攻击成功后可能会对企业造成严重后果。SQL 注入攻击会带来以下危害:

  • 暴露敏感数据。攻击者可以检索数据,这可能会暴露存储在 SQL 服务器上的敏感数据。
  • 损害数据完整性。攻击者可以修改或删除系统中的信息。
  • 侵害用户隐私。根据存储在 SQL 服务器上的数据,攻击可能会导致敏感的用户信息暴露,例如地址、电话号码和信用卡详细信息。
  • 攻击者获取访问系统的管理员权限。如果数据库用户拥有管理员权限,攻击者就可以使用恶意代码访问系统。
  • 攻击者获取访问系统的普通权限。如果您使用 SQL 弱口令来检查用户名和密码,攻击者可能会在不知道用户凭证的情况下访问系统。这样一来,攻击者可以通过访问和操纵敏感信息来造成严重破坏。

SQL 注入攻击造成的危害不仅仅是金钱损失:如果姓名、地址、电话号码和信用卡详细信息等个人信息被盗,企业可能会失去客户的信任,并且会声誉受损。一旦失去客户的信任,就很难修复。

SQL 注入示例

多年来,很多组织都遭遇过 SQL 注入攻击。一些备受关注的事件包括:

2019 年的 Fortnite 事件

Fortnite 是一款拥有超过 3.5 亿注册玩家的在线游戏。2019 年,在该游戏中发现了一个 SQL 注入漏洞,攻击者可以借此访问玩家的账号。该漏洞已修复。

2018 年的思科 (Cisco) 事件

2018 年,思科的 Prime 许可证管理器中检测到一个 SQL 注入漏洞。攻击者利用该漏洞获得了对已部署该软件的系统的 Shell 访问权限。思科此后修复了该漏洞。

2014 年的特斯拉 (Tesla) 事件

2014 年,安全研究人员称他们可以利用 SQL 注入攻击特斯拉的网站,获得管理权限并在此过程中窃取用户数据。

SQL 注入攻击常见问题

有关 SQL 注入的常见问题包括:

什么是 SQL 注入攻击?

SQL 注入攻击借助恶意 SQL 代码来操纵后端数据库,从而访问私人信息。这些信息可能包括敏感的公司数据、用户列表或客户详细信息。SQL 即“结构化查询语言”,SQL 注入有时缩写为 SQLi。

SQL 注入有什么危害?

借助 SQL 注入攻击,攻击者可以伪造身份、修改现有数据、泄露系统上的数据、破坏数据或使数据不可用,并拿到数据库服务器的管理员权限。SQL 注入攻击可能会对企业造成严重损害,如果用户的机密数据遭到泄露,企业就会失去客户的信任。

SQL 注入攻击是否很常见?

因为实施这类攻击相对简单,但可能收获很大的回报,所以 SQL 注入攻击并不少见。虽然统计数据有差异,但据估计,软件应用遭受的攻击中大多数都是 SQL 注入攻击。开放式 Web 应用安全项目 (Open Web Application Security Project) 的研究显示,包括 SQL 注入在内的注入攻击是 2021 年第三大严重的 Web 应用安全风险

如何防御 SQL 注入攻击

想要加强 SQL 注入防御的企业可以参照以下关键原则来加强网站和 Web 应用的安全防线:

员工培训:提高负责 Web 应用的团队对 SQL 注入相关风险的认识,并为所有用户提供必要的基于角色的培训。

检查用户输入:SQL 查询中使用的任何用户输入都会带来风险。在处理经过身份验证和/或内部用户的输入时,采用与公共输入相同的方式,确保其通过验证。只为连接 SQL 数据库的账户提供最低必要权限。使用白名单(而非黑名单)作为标准方法来验证和过滤用户输入。

使用最新版本:使用最新版本的开发环境以最大限度地加强保护非常重要,因为旧版本可能不包含当前的安全功能。务必及时安装最新的软件版本和安全补丁。

持续扫描 Web 应用:

使用全面的应用性能管理工具。定期扫描 Web 应用,识别并修复潜在漏洞,防止漏洞造成严重损害。

使用防火墙:Web 应用防火墙 (WAF) 通常用于过滤 SQL 注入以及其他线上威胁。WAF 依赖大量经常更新的签名列表,能够过滤掉恶意的 SQL 查询。该列表通常包含针对特定攻击媒介的签名,并定期修复以抵御新发现的漏洞。

相关产品:

延伸阅读:

什么是 SQL 注入?定义和解释

SQL 注入让攻击者可以未经授权访问数据库,从而对企业造成损害。详细了解 SQL 注入的运作原理。
Kaspersky Logo