




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库SQL注入分类及防护思路作者:安华金和思成背景数据库凭借其强大的数据存储能力和卓越的数据处理性能,在各行各业的信息化建设中 发挥着关键的作用。随着数据库在各行业的大规模应用,数据泄露事件也频繁发生,这就使 数据库安全问题也日益凸显,逐渐变成用户越来越担心的问题。虽然数据库厂商已经做了许 多有效的措施来尽量解决数据库存在的安全问题,但至今为止数据库的安全漏洞仍然不断增 加。下图为近5年数据库漏洞数量图。H201S20142013 2012在数据库漏洞中最为常见的漏洞类型是SQL注入漏洞。安华金和数据库攻防实验室结合多年的实践结果总结出了数据库注入的分类分享给大家,以便大家对SQL注入型漏洞
2、有一个更加全面的了解。SQL注入漏洞不仅出现在 WEB端,也出现在数据库的自定义或标准库的存储过程、函 数、触发器中。数据库自身的 SQL注入漏洞比 WEB端的注入漏洞对数据库的威胁性更大。本文对SQL注入的分类是从数据库的角度来划分,不考虑 WEB端的角度,这两者在分类上有着不同的角度。首先在解释不同的数据库 SQL注入漏洞之前先简要说明一下数据库攻击者能够进行SQL注入的主要原理:SQL注入漏洞是用户在输入中混入了程序命令。最直接的例子就是攻击者 在正常的 Web页面中把自己的 SQL代码通过用户输入传输到相应的应用程序中 ,从而执行 一些非授权的 SQL代码,以达到修改、窃取或者破坏数据
3、库信息的目的。 SQL注入攻击甚至 可以帮组攻击者绕过用户认证机制,使其可以完全的操控远程服务器上的数据库。如果应用程序使用一些用户输入的数据来构造动态的SQL语句去访问数据库,将可能遭受到 SQL注入攻击。同样的如果在代码中使用了存储过程,并且这些存储过程缺乏对用户输入的合理限制也很容易发生 SQL注入。SQL注入分类2.1注入途径分类SQL注入漏洞按照注入的物理途径可以分成两大类:通过WEB端对数据库进行注入攻击和直接访问数据库进行注入攻击。直接访问数据库进行注入攻击是以数据库用户的身份直接连接数据库进行SQL注入攻击。在这种攻击方式中,攻击者可以通过SQL注入来执行SQL语句从而提高用户
4、权限或者越权执行。而那些在PL/SQL程序中在给用户授权的时候没有使用authid current_user 进行定义的存储过程、函数、触发器、程序块将更容易受到SQL注入攻击。直接访问入侵通过WEB应用程序的用户对数据库进行连接并进行SQL注入攻击。在这种类型的 SQL注入攻击中,攻击者多采用拼接语句的方法来改变查询的内容。获取该账号权限下的全部信 息。I前用户叙阪表利用磴据肆茯浮DBA技 机證擔隼祝陽一些高级的攻击手段往往结合这两种方式,先利用 WEB应用程序上的SQL注入漏洞获 取数据库和数据库所在服务器的基本信息。再利用数据库自身 SQL注入漏洞对获取的数据库 账号进行提权、越权等操作
5、已达到对数据库进行破坏或者获取敏感信息的目的。2.2注入方式分类根据入侵方式,针对数据库的SQL注入攻击可以分为四种类型,分别是SQL Manipulation Code Injection 、Function Call Injection 以及 Buffer Overflows 。前两种 SQL 注入攻击较为 常见,多出现在 WEB端的SQL注入上,而后两种攻击类型是直接针对数据库自身的攻击方 式,所以对数据库的安全威胁更加致命。1. 针对SQL操作的注入攻击 (SQL manipulation )是在所有的 SQL注入攻击类型中最 常见的一种类型。这种攻击的原理在于攻击者会试图在已经存在的
6、SQL语句中通过集合运算符(SET Operator )比如 UNION INTERSECT 或者 MINUS 来添加一些内容在 WHERE 子 句中使其功能产生变化。当然还有可能会有其他的很多变化存在。最经典的SQL man ipulation攻击就存在于登录验证过程中。一个简单的Web应用程序就可以通过执行以下的SQL语句来检查用户认证是否有返回值:SELECT * FROM users WHERE username = admi n and PASSWORD = guess而攻击者就可以尝试修改 SQL语句使其变为:SELECT * FROM users WHERE username =
7、 admi n and PASSWORD = xxxxor a= a通过以上对于 WHERE子句的修改操作可以使用户登录的判定恒为真,这样攻击者便绕过了用户验证获得了进入后台的权利。 集合运算符 UNION也常常被用在 SQL注入攻击中, 其最主要的目的就是通过操作 SQL语句来从另外一个表中返回某些行。一个 WEB窗体可 以执行以下SQL语句从一个存在的 product表中返回一个需要的表单:SELECT product_ name FROM all_products WHERE product_ name like %ddd%而攻击者可以修改 SQL语句使其变为:SELECT produc
8、t_name FROM all_products WHERE product_name like %ddd%UNION SELECT username,password FROM dba_users WHERE username like %这种情况下在执行完这个 SQL 语句以后所返回的 web 表单中的结果就会包括 所有的产品名以及所有的数据库用户名和密码 (当然需要链接账号具备查询表 dba_users 权限)。2. 代码注入攻击( CODE INJECTION )就是尝试在已经存在的 SQL 语句中添加额外的 SQL 语句或者命令。这种类型的攻击会经常的被应用在微软的 SQLServe
9、r 应用程序里。在 SQL Server 中 EXECUTE 语句经常会成为 这种 SQL 注入攻击的目标。虽然 Oracle 这类 数据库中没有相应的语句,在 PL/SQL 和 Java 中,也不支持单个数据库的多条 SQL 语句 的请求,但一些程序语言或者 API 可能允许多个 SQL 语句同时执行。 PL/SQL 和 Java 应 用程序可以动态的执行那些容易受到代码注入攻击的匿名 PL/SQL 块。所以在特定情况下代 码注入攻击对即便不支持多 SQL 请求的数据库依旧有效。3. 函数调用注入( FUNCTION CALL INJECTION )是因为在数据库函数或者自定义函数 中存在某
10、些漏洞,攻击者对问题函数进行 SQL 语句注入从而使此函数可以执行非预期功能 而达到攻击者的目的。严格讲不光数据库中的函数可能存在这些漏洞存储过程、触发器等也 存在类似漏洞。这些函数调用可以被用来在数据库中生成数据或者系统调用。以Oracle为例,Oracle数据库允许自定义函数或者包中的函数作为SQL语句的一部分来执行。 同时 Oracle 数据库在 175 个标准数据库包中提供了 1000 多个函数, 其中有一小 部分有可能遭到 SQL 注入攻击,而那些用作网络通信的函数同样可以被攻击者利用。任何 的自定义函数或者那些存在于自定义包中的函数都可以在SQL 语句中执行。当函数作为SQL SE
11、LECT 语句中的一部分来执行的时候对于数据库 来 说 不 会 造 成 任 何 变 化 除 非 这 个 函 数 被 标 记 成 了 “PRAGMATRANSACTION ”。只有极少数的标准数 据库函数会被自动执行,而那些在插入、更新、删除语句中执行的函数会对数据库中的数据 进行修改。当攻击者使用那些有漏洞的标准Oracle 函数的时候就可以将数据库中的信息发送到远程计算机或者在其他的数据库服务 器执行攻击。 许多基于 Oracle 的应用程序都可能会使用那些有漏洞的数据库软件包,而这些自定义的软件包里就有可能会包括那些可以修改密码或执行那些敏感的应用程序的函数。对于函数调用注入攻击来说,任何
12、动态生成的 SQL 语句都是脆弱的,即使是最简单的SQL 语句都可以被攻击者利用。 例如创建存储过程 test 说明用 DBA 权限建立自定义存储过程create or replace procedure test (putin varchar2) as type c_type is ref cursor;cv c_type;buffer varchar2(200);begindbms_output.enable(1000000);open cv for select object_name from all_objects where owner = |putin| and object_t
13、ype= library ;close cv;End;/这个 SQL 语句不容易遭到其它类型的注入攻击,但是却很容易遭受到函数注入攻击。 这是因为在这个函数中缺乏对输入变量的约束。攻击者可能会输入的是一个想要执行的命令。 例如 grant dba to public;低权限用户构造一个含有想要执行的命令的函数Create or replace function get_dba return varchar authid current_user isPragma autonomous_transaction;BeginExecute immediate grant dba to scott ;
14、End;/在这个例子中本来存储过程 test 是用来查询用户所拥有的库的,但是为了方便其他用户 使用 test 的执行,这一权限被赋予了所有用户,导致任何用户都可以执行 test 存储过程。但 是函数中由于采用了定义者权限定义 test ,所以造成所有用户在执行 test 的时候都获得了 DBA 权限。这一过程是低权限用户创建注入函数 get_dba 。通过 test 把任意低权限账号提权到 DBA 权限。Exec sys.test( AAAA |username.get_dba() );至此低权限用户通过漏洞把自身提权到 DBA 权限可以对整个数据库进行非法控制。数据 库厂商的解决方案一般是
15、通过删除存在漏洞函数的 public 执行权限来解决4. 许多的标准数据库函数都很容易受到缓冲区溢出(BUFFER OVER FLOWS )攻击,这 溢出漏洞。缓冲区溢出漏洞危害很大,往往最终会造成攻击者直接控制数据库或数据库所在 操作系统。是因为只需要对那些没有及时打补丁的数据库做SQL 注入攻击就可以很容易利用到缓冲区以Oracle为例,在某些版本的标准数据库软件包和标准数据库函数中TZ_OFFSET,TO_TIMESTAMP_TZ, BFILENAME, FROM_TZ, NUMTOYMINTERVAL, an dNUMTODSINTERVAL等函数存在缓冲区溢出漏洞。而要使用这些存在缓
16、冲区溢出漏洞的标准数据库包和函数来做缓冲区溢出漏洞攻击就需要利用到之前所介绍的函数注入的方法; 当攻击者通过 SQL注入攻击来利用缓冲区溢出漏洞的时候,就可以实现远程连接操作系统。 此外,一些应用程序和WEB服务器都不能够正常处理由于缓冲区溢出所造成的数据库连接中断;通常,Web进程将会被挂起,甚至导致发生拒绝服务攻击。防护SQL注入数据库厂商针对 SQL注入进行了大量的工作,其中以 oracle为例在Oracle推出10G r2 的时候开发了一个 dbms_assert补丁包。这个补丁包主要被用来修复sql注入漏洞,加强对用户输入的信息的防守。修复了大量存在的数据库漏洞。但并不能呢彻底解决数
17、据库自身的 所有SQL注入漏洞。根据测试DBMS_ASSERT 对二阶SQL注入和跨语言传参缺乏有效防守。数据库厂商虽然一直在努力,但受限于数据库应用环境和场景。很多时候数据库不能及 时进行补丁升级,所以很多时候数据库威胁依然存在。安华金和攻防实验室建议广大数据库 用户,除了及时更新数据库补丁的同时,必要的时候采用第三方产品来加固数据库的安全。这里安华金和攻防实验室给出两种数据库加固思路:1. 从信息的源头着手, 对敏感信息进行加密。 即便被攻击者获取到敏感信息,也保障信息 是全密文,攻击者无法获得有价值的信息。2. 从数据库安全加固的角度。数据库防火墙可以有效防护来自外部的攻击行为。专业的数
18、据库防火墙应该是基于数据库协议精确解析,通过对SQL语法/词法中存在的风险进行精确识别,拥有数据库虚拟补丁技术,能够进行细粒度权限管控,行为审计、监测分析等核心功能,以防止攻击者对数据库进行入侵。发挥保护数据库安全的作用。相信以上无论哪种方式都会使用户数据库中的数据更加安全。出师表两汉:诸葛亮先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣 不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光 先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其 刑赏,以昭陛下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深水核反应堆技术挑战-全面剖析
- 健康生活理念下的日用杂品创新-全面剖析
- 电梯安装与维修工理论过关考核习题带答案
- 写建议书教案
- 游客引导规范流程
- 自行车赛道行业深度调研及发展战略咨询报告
- 线上财富管理定制企业制定与实施新质生产力战略研究报告
- 阅读会员等级行业跨境出海战略研究报告
- 互联网基金超市行业深度调研及发展战略咨询报告
- 营养与饮食指导企业制定与实施新质生产力战略研究报告
- 《淞沪会战》课件
- 《社区共治共建共享研究的国内外文献综述》4300字
- 软件代码审计与测试作业指导书
- 上消化道出血护理疑难病例讨论记
- 城市轨道交通自动售票机
- 环境设计专业考察课程教学大纲
- 2024版互联网企业股东合作协议书范本3篇
- 企业环保知识培训课件
- 110kV立塔架线安全施工方案
- 完形填空-2025年安徽中考英语总复习专项训练(含解析)
- 《岁末年初重点行业领域安全生产提示》专题培训
评论
0/150
提交评论