SQLite注入攻击如何工作?为什么SQLite安全漏洞很危险?
SQLite 漏洞于 2018 年由腾讯的安全研究人员(隶属于 Blade Team)首次发现,它继续使数百万应用程序、软件、物联网设备等面临 SQLite 注入攻击的更高风险。尽管是一个中等影响的漏洞,但SQLite 漏洞是一个严重的安全漏洞。让我们进一步研究这个漏洞。
SQLite 漏洞:简介
什么是 SQLite?
SQLite 是一个开源、零配置、自包含且功能齐全的关系数据库管理系统,包含在一个 C 编程库中。它是一个嵌入式 SQL 数据库引擎,没有客户端-服务器关系。它根据需要动态或静态地与应用程序链接。与其他 SQL 数据库不同,它是无服务器的,不需要单独的服务器进程。
SQLite 注入攻击如何工作?
SQLite 注入背后的基本思想是从数据库中获取机密信息并执行易受攻击的操作,例如更新、修改或删除记录、添加新记录等。
通常,要使 SQLite 注入攻击成功,必须满足以下先决条件之一:
- 应用程序存在 SQLi 漏洞或运行 SQLite 的过时版本。
- 应用程序必须允许未经过滤和未经验证的用户输入。
- 应用程序必须允许攻击者提交恶意制作的数据库文件,应用程序将打开和查询这些文件。
假设您的网站上有一个注册页面,用户必须在其中输入他们的用户名。如果用户输入的是 SQLite 语句而不是他们的名字怎么办?查询将直接进入数据库并获取查询语句中请求的数据。这就是大多数SQLite 注入攻击发生的方式。
让我们再举一个例子。您的应用程序允许第三方应用程序从 SQLite 数据库读取数据或提交恶意制作的数据库文件。利用此漏洞,攻击者可以在数据库中存储恶意代码,前提是他们具有相关的文件系统访问权限。当应用程序从数据库访问数据时,就会执行恶意代码。
基于 Chromium 的浏览器,如 Google Chrome、Brave、Vivaldi 等,实现了 JavaScript 的 Web SQL 特性。这使攻击者能够创建将 SQL 命令发送到应用程序的嵌入式 SQLite 代码的网页。利用此 SQLite 漏洞,攻击者可以运行任意 SQL 文本。在支持 SQLite 的浏览器中访问网页这样简单的事情就足以让攻击者利用该漏洞并触发远程代码执行。Web SQL API 将恶意代码转换为常规 SQL 语法。
为什么 SQLite 安全漏洞很危险?
发现较新的缺陷
腾讯安全团队于2018年首次在SQLite中发现远程代码执行漏洞。此后其他SQL安全漏洞如Integer Flow、Use-after-free、NULL pointer deference、Input Validation errors、SELECT query functionality缺陷等使得攻击者执行他们的命令。研究人员不断在不同的操作系统、软件、应用程序、平台、程序和设备中寻找漏洞和利用 SQLite 引擎的方法。它可能是大量新漏洞的起点。
影响
攻击者利用 SQLite 漏洞进行范围广泛的恶意活动,从远程代码执行、泄漏内存程序和崩溃程序到编排DDoS 攻击。
它的广泛使用增加了相关风险
鉴于其兼容性、轻量级特性(在设置复杂性、资源使用和管理开销方面)和其他优势,SQLite 通常用于计算领域,包括应用程序、软件和物联网设备(包括语音助手、智能电视等)。
它还用于运行这些应用程序的底层操作系统,例如 Android、Unix flavors、MacOS 等。它也是基于 Chromium 的浏览器的一部分,例如 Google Chrome、Brave、Vivaldi、Opera 等。因此,SQLite 被嵌入到数十亿的应用程序、智能手机和设备中。甚至已知某些版本的 Safari 和 Firefox 也存在此漏洞。考虑到它的使用范围,您的应用程序面临风险的可能性很高。即使您使用的第三方应用程序存在 SQLite 安全漏洞,您的应用程序也可能存在风险。
巨大的攻击面
由于这些被归类为中等影响漏洞,开发人员/供应商可能会产生一种错误的安全感,并且可能不会修复漏洞。这最终可能会创建一个广泛的攻击面,攻击者可能会在未来利用它来编排未打补丁系统的链式攻击。
即使发布了补丁,应用程序也可能存在风险
Google 等使用 SQLite 引擎的应用程序已经发布了补丁。将嵌入式数据库引擎更新到应用程序可能是一个危险的过程,会导致数据损坏。因此,开发人员倾向于避免长期修复这些缺陷。应用程序的库和组件很少更新,这增加了 SQLite 漏洞的风险。
结论
修补 SQLite 漏洞以及清理和验证用户输入是防止 SQLite 注入的必要步骤。您必须有一个托管的智能安全解决方案来解决这些漏洞并加强应用程序的安全状况。