数据库自主安全防护技术的研究与实现
系统实现主要分为系统数据字典设计、用户登录与用户管理、系统相关策略制定、侦听器(Sensor)的实现、访问控制以及日志审计六部分。原数据库API信息(dll)、用户的自主防护策略作为输入,Sensor核心一方面将用户的防护策略融合在原数据库的API接口中,另一方面记录用户对数据库的操作并生成日志,提供给用户做审计。用户在使用过程中不需要修改原有系统,即可实现自主防护。系统核心Sensor的结构如图3所示。
Sensor由API处理模块、访问控制模块(Access Control)、Sensor核心模块(Core)、注射模块四部分组成。Core是Sensor的核心部件,主要负责拦截接口,解析并分离接口中的重要信息,使程序转入自定义的安检程序中执行安全检查。Access Control组件实现不同级别的访问控制,根据用户提供的安检信息,组态出对应的安防模块,并在合适的时候调用其进行访问控制。API(dll)主要将数据库系统提供的接口信息,转化为dll以便Sensor侦听时使用。Inject/Eject为Sensor提供远程注射的功能。
Core通过拦截对API的调用来实现定制功能。程序在调用API函数之前,首先要把API所在的动态链接库载入到程序中;然后将API函数的参数、返回地址(也就是函数执行完后,下一条语句的地址)、系统当前的环境(主要是一些寄存器的值)压入系统调用栈;接着,进入到API函数的入口处开始执行API函数,执行过程中从系统调用栈中取出参数,执行函数的功能,返回值存放在EAX寄存器中,最终从堆栈中取出函数的返回值并返回(参数压栈的顺序还要受到调用约定的控制,本文不详细介绍)。
举例说明函数调用时堆栈的情况。假设调用约定采用_stdcall,堆栈由高向低递减,API为Int func(int a, int b, int c)。系统调用栈的部分内容如表1所示。
拦截主要通过HOOK API技术实现,可以拦截的操作包括DOS下的中断、Windows中的API调用、中断服务、IFS和NDIS过滤等。目前微软提供了一个实现HOOK的函数库Detours。其实现原理是:将目标函数的前几个字节改为jmp指令跳转到自己的函数地址,以此接管对目标函数的调用,并插入自己的处理代码。
HOOK API技术的实质是改变程序流程。在CPU的指令集中,能够改变程序流程的指令包括JMP、CALL、INT、RET、RETF、IRET等。理论上只要改变API入口和出口的任何机器码,都可以实现HOOK。但实际实现上要复杂得多,主要需要考虑如何处理好以下问题:(1)CPU指令长度。在32 bit系统中,一条JMP/CALL指令的长度是5 B,因此只需要替换API中入口处的前5 B的内容,否则会产生不可预料的后果。(2)参数。为了访问原API的参数,需要通过EBP或ESP来引用参数,因此需要明确HOOK代码中此时的EBP/ESP的值。(3)时机问题。有些HOOK必须在API的开头,如CreateFileA( )。有些必须在API的尾部,如RECV()。(4)程序上下文内容的保存。在程序执行中会涉及修改系统栈的内容,因此注意保存栈中原有内容,以便还原。(5)在HOOK代码里尽量杜绝全局变量的使用,以降低程序之间的耦合性。通过以上的分析,整理出如图4所示的实现的流程。
DSS与传统数据库的安全防护功能相比,具有以下特点:
(1)独立于具体的数据库。这种独立性体现在:①DSS只需要数据库提供其接口信息即可工作。②支持不同标准的SQL语句,通过数据库命令映射表可将非标准的SQL语句映射为系统设置的SQL命令。③系统自身数据的物理存储是独立于数据库的。
(2)灵活性和针对性的统一。用户可以根据自己的需要配置针对特定应用的相关规则。
(3)完善的自我安全保护措施。DSS只有数据库安全管理员和安全审计员才能访问。安全管理员和安全审计员是一类特殊的用户,他们只负责安全方面的操作,而不能访问数据库中的数据。这与Oracle等的数据库不同,在这些数据库中,DBA可以进行所有的操作。DSS系统本身具有故障恢复能力,能使系统出现问题时恢复到一个安全的状态。
(4)完备的信息查阅和报警功能。在DSS中,本文提供了便利的设计查阅工具,方便用户对系统进行监控。另外,用户也可以自己定义报警条件和报警处理措施,一旦满足报警条件,系统就会自动地做出响应。
3 实验及结果分析
DSS的开发主要采用VS 2005实现,开发完成后在一台主频为2.8 GHz、内存2 GB、装有Windows 2000操作系统的普通 PC机上对其进行了功能和性能的测试,使用的数据库是开源的嵌入式数据库SQLite 3.6。为了搭建测试环境,需要在SQLite中添加初始化系统自身的数据字典,并开发应用程序。测试内容包括:登录、用户管理、Sensor、访问控制、日志审计以及增加DSS前后数据库系统安全性变化等功能性测试和增加DSS系统后对数据库性能的影响两方面。其中,性能测试主要从时间和资源的增加情况来说明,针对不同数据库对象分别在五个级别(20 000、40 000、60 000、80 000、100 000)的数据上进行了插入和查询操作测试。为了做好性能对比,在SQLite中也添加了相同的访问控制功能,记为Inline Processing。插入操作的测试结果如图5所示,查询操作的测试结果如图6所示。
从功能测试结果可以看出,DSS可以为数据库系统提供自主防护。从性能测试的结果中看出,查询操作和插入操作耗时相差比较大,这主要是SQLite工作方式引起的,在执行用户的插入操作时,数据库需将内存中的数据写入磁盘数据库文件中,占用了一部分时间。而查询时,SQLite会将数据库文件部分内容缓存起来,加快了查询的速度。另外,增加DSS会对性能有略微的影响,但是它能实现对数据库系统自主保护。
本文针对传统数据库安全防护功能配置不灵活的问题,提出了一种基于HOOK技术的数据库通用安全防护系统。该系统的最大优点在于,它不受数据库自身的约束,完全独立于数据库系统,为用户提供一种按需定制的功能,不仅增加了安防配置的灵活性而且提高了通用性,可以用于不同的数据库系统中。在嵌入式数据库SQLite上的实验结果表明,该系统在不影响原系统正常运行的前提下,解决了数据库面临的"越权使用、权限滥用、权限盗用"等安全威胁,能满足不同用户的需求,适用于政府、金融、运营商、税务、教育及企业等所有使用数据库的各个行业。
- 发电厂电力信息安全综合防护探讨(12-21)
- SICK的安全防护设备应用于棒材加工机(12-20)
- 浅析我国工控系统安全防护的三大问题及对策(12-13)
- 基于虚拟仪器的特性测试参数数据库的设计(06-24)
- 嵌入式数据库在Java中的应用(03-03)
- SQLite嵌入式数据库系统的研究与实现(02-20)