刘达
摘 要:在网络信息安全体系中,数据库的安全保护最为关键,入侵检测系统(IDS)是目前较为理想的数据库安全工具。论文提出了一种数据库入侵检测方法,包含一种可反映同一个数据库事务中SQL语句的关联性的数据库日志数据结构,以及采用朴素贝叶斯分类算法(NBC)的机器学习算法与入侵检测算法。实验证明,论文提出的检测系统具备较高的准确率。
关键词:入侵检测;朴素贝叶斯分类算法;数据库
1 引言
数据库系统的安全保护机制有诸如用户认证、事务处理加密、数据水印与入侵检测等。用户认证可阻止未授权用户连接数据库。事务处理加密可防止攻击者破译数据库查询语句。入侵检测是在其他防护措施被绕过的情况下可尽早识别恶意入侵行为的技术。
数据库入侵检测有两种模型,异常检测与滥用检测。异常检测模型基于大量正常用户行为的数据档案,通过将用户行为比对正常的用户行为库,如果有较明显的差异,则将其定义为入侵行为。异常检测实现的难点在于,建立完整的正常用户行为库有一定难度,将正常行为定义得太严格易于导致误判,太宽松又将漏掉攻击行为。滥用检测则是比对用户行为与典型攻击行为库,滥用检测的不足在于仅能用于检测已知的攻击行为[1]。
本文在IDS系统的框架下提出了一种更有效率,适用于RBAC(基于角色的权限访问控制)数据库的异常检测系统。本文提出的系统基于数据库事务处理建立用户行为库,可以反映出同一事务处理中SQL语句之间的关系。
2 系统设计
本文提出一个为每个数据库角色建立档案,基于角色建立用户行为库,发现不符合该角色正常行为的即判断为入侵行为的检测方法。因为基于角色定义用户行为库,所以其数据规模将远小于基于用户定义的行为库,因此本系统将有较高的可用性。
本文提出的系统实现难点主要在于,如何构建一个可以反映正常用户行为的用户行为库,如何利用这个用户行为库进行基于角色的行为检测。第二个问题是,如何通过数据库日志文件构建用户行为库。
2.1 数据库日志文件处理
为了定义用户行为,本系统使用数据库日志做为分析用户行为的原始数据。在数据库日志文件中,每一个SQL查询语句都是一条独立的记录,这些记录必需被组合起来形成系统学习与分析所需的数据。本系统提出的方法是,将同一个数据库事务(Transaction)中的SQL语句组织在一起成了一条记录,代表基于特定角色的该用户的行为。
为了构建用户行为数据,系统必须将数据库日志数据转化为可以被分析的格式。因此,本文提出一种六个字段的数据结构R(CMD、REL、ATT、REL2、ATT2、REST),其中CMD代表数据库操纵语句,REL代表操纵语句涉及的字段,ATT代表操纵语句中涉及的属性,REL2代表SQL语句选取的字段,ATT2代表SQL语句选取的属性,REST代表SQL语句中可能存在的剩余部分。图1说明了这种数据结构和数据库日志文件之间的对应关系。
图2所示的数据库模式中包含两个关系集,G1 = {A1;B1; C1; D1} 和 G2 = {A2; B2; C2; D2}。用户数据结构的完整表达式为(CMD, REL[ ], ATT [ ][ ], REL2[ ], ATT2[ ][ ], REST[ ])。SCMD代表SQL语句中的第一个命令,REL[ ]是一个二进制数组,如果SQL查询语句对应对该关系,取值为1,否则为0。ATT[ ][ ]是二维数组,ATT[i][j]取值为1说明SQL语句对应了i字段的j属性,否则为0。REL2[ ]是一个二进制数组,果SQL查询语句对应对该关系,取值为1,否则为0。ATT2[ ][ ]是一个二进制数组,ATT2[i][j] 取值为1说明SQL语句对应了i字段的j属性,否则为0。REST[ ]等于剩余SQL语句的长度,无内容则值为NULL。
本文提出的这种数据结构可以将不同的事务处理SQL语句转化为同一格式的数据,便于分析和统计,使得分类算法可以更准确的识别异常行为。
2.2 分类算法
本文提出一种基于朴素贝叶斯分类的算法,贝叶斯算法采用的基于特征属性条件概率的估算使得其学习模式和工作模式所需的运算量都很小。
在学习模式下,首先必须提供一定量的数据库日志样本数据,并以上文提出的数据节构对日志文件进行预处理,将其输出为可以被算法分析的数据结构。
朴素贝叶斯分类算法的工作流程可以由图2表示。
根据朴素贝叶斯分类算法,将一个数据库事务处理实例定义为x,将分类器定义为f(x),f(x)从有限的数据库V中取值,训练样本数据为Dt,一个实例包含若干个属性(a1,…,an),目标是预测出x所属的类别[2]。
本文提出的算法为,计算出给定实例可能性最高的所属分类Vmap,对于给定特征属性(a1,…,an),算法公式为:
根据贝叶斯定理,可推导公式为:
因为分母是常量,与Vj的取值无关,所以可以从表达式中被忽略,仅需要对训练样本V中Vj的出现频率进行统计,在朴素贝叶斯分类算法中,因为每一个特征属性是条件独立的,所以可以有以下推导。
因为P(ai|vj)仅需要计算特征属性在样本数据中的频率,故上述推导可极大地降低运算量。
本算法的另一个问题是,当训练样本中的某一特征属性字段e的发生几率为nej,训练样本中的类别大小为Dvj,当nej的数值特别小,甚至为0时,将使得分类器的准确性大大降低。为解决这个问题,本系统引入Laplace校准,即对没类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的问题[3]。
以格式化的日志文件做为样本集,朴素贝叶斯算法可直接用于异常检测。如果R代表角色集,那么根据给定观察集(ci, PRi,PAi, SRi,SAi, RSQLi)所预测的角色为:
其中,N代表关系数据库中的关系数,Nc代表事务处理中SQL查询语句的数量。在系统的每笔事务中,分类器都会预测出一个Rclass,如果Rclass与实际的角色不同,则检测到异常。
3 结束语
本文提出了一种適用于RBAC数据库的基于数据库事务的异常检测系统。系统通过机器学习机制读取结构化的数据库日志文件以获取正常事务处理的模式,基于角色的特性使得入侵检测的易于实现。相较于基于单一查询语句的入侵检测系统,本系统的准确检测率有明显提高。
参考文献
[1] 李冰冰.数据库入侵检测系统设计与实现[D].上海:复旦大学,2009.8-9.
[2] 阿曼.朴素贝叶斯分类算法的研究与应用[D].大连:大连理工大学,2014.8-10.
[3] A.Kamra,E.Terzi,E.Bertino.Detecting anomalous access patterns in relational databases[J].Vldb Journal.2008 , 17 (5) :1063-1077.endprint