刘文强 巩青歌
武警工程学院通信工程系 陕西 710086
随着计算机和通信技术的高速发展,数据库作为计算机信息系统的核心部件,存储着大量的各种军事、商业的数据,数据库安全显得尤为重要。其中入侵检测作为保护计算机安全的重要手段之一也引入了数据库安全体系之中。基于数据库本身数据和结构的一般都认为是基于事务级的入侵检测,但他们基本都存在着诸多不足,比如利用数据读写关系的,由于数据库数据的复杂性,造成性能和效率问题;审计日志、审计信息的冗余和对审计信息分析能力不足的问题一直难以解决等。基于网络的入侵检测一直是研究的热点,也是现在比较成熟的入侵检测系统,其中代表的就是免费开源的snort。它利用预先定义好的特征码到网络数据包的每帧来鉴定可疑流量。如果它发现匹配特征码,就会马上通知管理控制台,从而做出相应的反应。网络级的入侵检测有着实时监测、快速反应的优点,通过对网络级入侵检测Snort的研究,本文提出利用Snort来弥补事务级数据库入侵检测的不足,形成联动的入侵检测系统。
SQL注入是利用WEB应用程序中所输入的SQL语句从对数据库获得未经授权的访问和直接检索,这是针对 WEB程序开发者在编程过程未对 SQL语句传入的参数做出严格的检查和处理所造成的。事务级数据库入侵检测对这种常见的SQL攻击的检测是通过合法事务SQL的正则表达式(“指印”)来代表用户的正常行为从而进行检测,通过将数据库查询描述为查询结果集中元组标识符集和属性集的集合,提出查询的相似度计算及其聚类方法,例如,对用户输入的用户名和密码值看作是查询结果中的元组标示值,用户属性和密码属性作为查询结果的两个属性,通过对阀值的控制来控制检测率。但对阀值的控制是个问题,容易造成误检率偏大的问题。
相反,Snort在防范SQL注入的攻击方面通过编写规则库对网络数据包进行检测,设置方便,配置灵活,由于很多文献上都已经提出过Snort在这方面的检测,本文只略做介绍下。正则表达式:
/ w * (( %27)|(‘))((\%6F) |o|( %4F))(( %72) |r|(\%52))/ix
其中, w * :零个或多个字符或者下划线,( %27) | ’:单引号或它的十六进制形式,(\%6 F|o|( %4 F))((\%72|r|-(\%52):or’的大小写以及它的十六进制形式。
编写snort规则
alert tcp $EXTERNAL_NET any - > $HTTP_SERVERS$HTTP_PORTS (msg:“SQL Injection - Paranoid”; flow:to_server, established;uricontent:”.pl”;pcre
:” / w * (( %27)|(‘))((\%6F) |o|( %4F))(( %72)|r|(\%52))/ix”;classtype:Web-
Application-attack;sid:9099;rev:5;)
这样通过对Snort规则的编写,对关键词单引号,分号和双重破折号重点检查,精确的检测出SQL注入攻击,这样事务级数据库入侵检测不需要对基本的用户登录信息进行数据的聚类分析,可以集中分析审计日志等数据库的特有数据和数据结构,提高了入侵检测效率。
数据库审计是数据库系统中用来监视、记录和控制用户行为的一种机制,它使影响系统安全的访问或访问企图留下线索,以备事后分析和追查。大多数据库安全体制采取对数据库中所发生的事件全部进行审计的方法,这样虽然可以实现零信息丢失,满足安全分析和责任追踪的需要,然而却大大降低系统的时间效率和空间效率,记录了大量无用的事件信息。所以说,对数据库所有事务进行审计是不必要的,很多文献也提出了动态审计的概念,即审计系统要具备灵活配置审计策略的能力,通过灵活、有效地审计配置,在少占用时间和空间的前提下,又能够为安全事件分析和责任追究提供足够必要的信息。
Snort作为外围的入侵检测系统,能够检测出绝大部分网络攻击,对于可疑活动也能够给出相应的报警。对于数据库的审计恰恰需要这样一个阀门来控制数据库审计系统(图1),审计策略要求在 Snort的报警下进行更全面和详细的审计,这样,通过报警后加强审计策略的能力,还能够对危及主机数据库的行为进行实时的报警,甚至采取相应的措施。
图1 数据库审计
数据库的容忍入侵技术主要考虑在入侵存在的情况下系统的生存能力,保证系统关键功能的安全性和健壮性。由于新的攻击手段形式不断出现,现有大多数防火墙和入侵检测对已知的和定好的入侵行为监测比较高,但对这些未知攻击手段误报率高,为此入侵是不可避免的,所以,研究入侵的情况下系统具有自诊断、修复和重构的能力是很有必要的。
现阶段,数据库入侵容忍首先要确定恶意事务和受感染的事务,由于数据库具有特有的数据结构,可以通过基于事务依赖和基于数据依赖来实现;其次,就是撤销恶意事务和受感染事务,常用的方法是回滚和补偿。回滚是一种后向恢复的方法,将数据库所有的活动回滚到不存在损坏的检测点,但是由于经常需要保存且在前一监测点到回滚阶段的操作都要撤消导致系统开销较大。
补偿方法通过执行补偿事务来撤消提交的事务或操作步骤,补偿法并不一定将数据状态恢复到恶意事务或步骤未发生前的状态。补偿方法分为面向动作的或面向效果的,面向动作的补偿方法只补偿事务或相关步骤的操作,面向效果的补偿方法不仅补偿事务或相关步骤的操作同时也补偿被相关步骤的操作所影响的其它操作。补偿方法需要数据库能够辨识应用的语义信息,所以在应用上存在一定的限制。
在回滚过程中,全部回滚是对于系统安全的考虑,入侵检测不能保证检测出全部的恶意事务和受感染事务,但对于这种普遍采用的回滚技术,我们可以通过与Snort的联动来全部捕捉恶意事务,提高回滚效率。在第一阶段确定恶意事务和受感染的事务中,我们已经通过数据库事务级的入侵检测确定了恶意事务,这是网络级入侵检测Snort所办不到的,但是事务级入侵检测对于检测用户真正身份和地址无能为力,我们可以通过Snort来办到。
在回滚前,我们分为三步来确定回滚事务。
(1)在检测确定恶意事务后,与 Snort进行联动通讯,分析恶意事务和受感染事务的来源。
(2)Snort对提出的这些恶意事务的地址和主机进行分析,记录这些攻击者身份和主机,查询攻击者之前除了这些以外提交的数据包,分析攻击者的其他行为。
(3)Snort通过查询以外数据包后,提取攻击者提交的未察觉的受感染事务,向数据库备份与恢复提供事务信息,这样在回滚中不仅要回滚已经确定的恶意事务,同时也要回滚那些攻击者提交的未察觉的可疑事务,如图2所示。
这样,在 Snort的帮助下,数据库最大限度保证回滚数据中不含有恶意事务和受感染的事务,同时也提高了系统效率,降低了系统开销。
图2 数据库入侵容忍
Snort输出引用了灵活的插件形式,它允许Snort将报警和日志送到各种目标,使得管理员可以按照单位内部环境来配置容易理解、使用和查看的报警和日志方法。输出插件用来控制Snort探测引擎的输出,在Snort中配置输出模块的命令如下:
Output<插件名>:<配置选项>
我们采用ruletype来定义动作,将报警同时发送到Syslog和数据库:
用以下规则应用这个自定义动作:
redalert tcp $HOME_NET any->$ EXTERNAL_NET 3306 (msg:”someone is sending”;flags:A+;)
这样我们可以通过对日志和数据库的检索,得到报警结果,向目标数据库事务级入侵检测返回相应操作,从而实现我们增强数据库安全的目的。
现阶段数据库的安全仅以预防为主,事务级入侵检测仍存在于理论上,数据库安全依然任重而道远,网络级入侵检测在一段时间内仍然是网络安全防范的主要手段,单纯的研究网络级或者事务级都有不可避免的缺点,两者有机的结合的确可以在一定程度上提高整体的安全,对两者的联动问题还有待深入研究。
[1] Y.Hu,B.Panda.A data mining approach for database intrusion detection.In: Procof the 2004 ACM symposium on Applied Computing.Nicosia.Cyprus.2004.
[2] W.L.Low,J.Lee,P.Teoh.DIDAFIT: Detecting Intrusions in Databases through Fingerprinting Transactions.In:Proc.of the 4th International Conference on Enterprise Information Systems(ICEIS).Paphos.Cyprus.2002.
[3] 李振胜,鞠时光.安全空间数据库动态审计策略的研究与应用.计算机应用.2006.
[4] 钟勇,林冬梅,秦小麟.一种基于 DBMS的无监督异常检测算法及其应用.计算机科学.2007.
[5] 张楠,张振国.基于规则的检测 SQL注入攻击方法的研究.陕西科技大学学报.2007.