目前, DBMS已有多种保护封闭环境下数据安全的机制, 如身份认证、权限管理、加密、审计等。但随着数据库入侵手段的多元化和智能化, 这些数据库安全机制逐渐体现出不足[1-2]:1)合法用户滥用或误用权限, 使得身份认证和权限管理机制无法发挥相应作用; 2) DBMS本身的漏洞被黑客发掘, 安全机制难以应对新形式的攻击; 3)现有的数据库安全机制往往依赖于系统管理员(DBA)的专业性才能在正确的配置下运作; 4)目前的数据库安全审计机制并没有很好地提高数据库的安全性。
针对上述缺陷, 深度防御(defense-in-depth)被证明是保障数据库系统安全最有效的机制。深度防御要求数据库系统不仅要提高本身的安全机制, 还要采取额外的综合性措施以达到安全目标, 如数据库漏洞评估和数据库活动监控[2]。
作为独立于DBMS的安全机制, 数据库活动监控器实时捕获和记录用户对数据库各种请求, 对违反安全策略的用户操作发出警报。用户行为模型是数据库活动监控基础, 监控器依据模型对用户实时请求进行行为建模, 并依据监控器的用户行为规则库进行模式匹配, 以判断其是否存在安全隐患。
本文分析了数据库入侵检测相关技术, 提出了一个多角度数据库活动监控器体系结构, 描述了应用于入侵检测系统的用户请求行为模型、行为模式规则库生成方法和入侵检测的模式匹配方法, 并对设计入侵检测效果进行了实验验证。
1 数据库入侵检测技术基于模式匹配入侵检测是安全监控的一种有效技术[3], 采用该技术的数据库活动监控器对异常攻击的检测可分为两个步骤。
1) 行为模式库建立:手工或通过机器学习的方法自动建立合法或异常的用户行为轮廓(profile)。
2) 异常攻击检测:使用合法或异常的用户行为轮廓来对实时监控的用户行为进行潜在数据库攻击判定。
检测引擎使用的正常或异常行为模式规则库可使用关联规则、频繁项挖掘、聚类分析等机器学习技术自动构建。其优点是:具有自学习、自适应的能力, 可挖掘已有数据中的隐藏规律; 在缺少人工干预的情况下对异常攻击进行检测, 不仅能降低系统管理员的负担, 还能在学习的过程中不断适应新条件, 有效检测出新形式的攻击[1]。
采用机器学习的方法建立用户行为模式需要对大量数据对象、不同的命令类型以及复杂的操作流程进行处理。对用户行为进行合理的建模是实现模式匹配的基础, 也是自动化模式挖掘可行性的重要保证。文献[4]提出了SQL操作依赖关系模型, 通过检查关键操作之间的依赖关系是否被满足来进行异常攻击判定。文献[5-6]提出了SQL指印技术, 针对数据对象进行归纳处理。而关联规则挖掘算法在自动化模式挖掘中得到广泛运用, 如Apriori算法和FP-Growth算法[7-8]等。
2 数据库入侵检测系统数据库活动监控器需要实时抓取用户提交的数据库SQL请求, 并对这些用户请求行为语义进行解析, 以即时判定用户操作是否存在安全攻击。图 1是基于网络协议抓取的数据库活动监控器体系结构图, 分为用户行为获取和用户行为检测2个阶段。
1) 用户行为获取。先通过网络嗅探器在所监控的数据库通讯网络上实时侦听数据库网络包。此过程独立于DBMS运行环境, 不会对数据库服务器的正常工作和性能构成影响。在获取到数据库网络包后, 通过协议分析器过滤掉无关信息, 并从包中获取完整的数据库活动信息。这些信息包括SQL语句、SQL请求来源、用户名及请求的时间点等。
2) 用户行为检测。可从不同角度(如检测对象、操作类型、操作序列等)对抓取的用户操作进行多角度的分析, 以确定用户请求是否合法。针对规则库(detection knowledge)中的模型结构, 检测引擎对原始SQL请求信息进行预处理, 并将处理后的用户行为与规则库进行匹配, 将检测结果即时输出。检测规则库可由组织管理员手工建立, 也可以通过有效的数据挖掘等技术自动建立。
数据库的安全威胁有多种, 主要的威胁如图 2所示。针对这些威胁, 数据库入侵能够检测的异常用户行为包括SQL注入攻击、不健全的认证/审计、数据库漏洞利用和过度与合法特权滥用等[1-2]。
在上述异常用户行为中, 前3条描述的攻击模式, 其SQL请求通常在语句结构上与正常的请求SQL语句有较大差异。如SQL注入攻击的一种常见形式是在where子句中出现恒等式, 造成缓冲区溢出漏洞的攻击语句一般具有超长的变量或对象名等。因此, 可通过检查单条SQL语句本身的结构与规则库中正常SQL模式距离来确定是否存在这些类型的攻击。而过度与合法特权滥用的攻击通常通过一系列组合操作来完成, 其特点是在一系列操作中的单一语句都具有正常的结构, 威胁在于企业的实际信息资产, 而不是DBMS产品本身。应对此类型的攻击必须将多条语句进行组合分析才能判断[1]。图 3是基于模式匹配的数据库活动监控器入侵检测的示意图, 分为训练和检测两个阶段。
1) 训练阶段。针对独立的SQL请求, 通过解析训练集中的SQL语法结构建立SQL操作结构规则库; 针对多语句的组合攻击, 从训练集中挖掘合法的用户行为轮廓; 对训练集中的其他信息进行聚类分析, 以建立额外的监控规则库。
2) 检测阶段。由网络抓取而来的用户实时请求将以SQL语句集的形式作为入侵检测引擎的输入。入侵检测引擎将包含多个检测算法, 从不同的角度进行检测。如将每一条SQL语句与结构规则库进行比对, 以确定其结构是否存在异常; 将连续的SQL序列与用户行为轮廓进行匹配, 以检查其是否符合合法的业务逻辑; 将额外的统计信息用于时序检测等额外的异常检测, 以提高用户异常行为检测的正确率。
网络抓取器的设计是依据各DBMS网络通讯协议, 采用镜像端口方式并行的捕获各种数据库通讯内容, 以进行用户行为模型的解析, 满足多数据库、高并发用户请求的高效处理。
3 数据库入侵检测引擎针对单条SQL结构异常的检测和多语句组合攻击的检测监控目的不同, 需要使用不同的模型来分别建立其规则库, 检测引擎也需要使用不同的模式匹配方法来判定用户请求是否存在安全隐患。
3.1 规则库模型单条SQL结构异常检测主要针对非法用户通过SQL注入、缓冲区溢出等方式对数据库进行攻击。
按照SQL的语法标准[9]以及不同数据库独有的语法特性得到SQL的语句结构, 将每一条SQL的结构表示成图 4所示的SQL语句模式。SqlSchema是对SQL语句解析结果的存储结构封装; SqlStmt用来表示SQL语句中一个独立子句的结构, 成员域包含了SQL语句中可能出现的所有信息, 如语句类型、数据表列表、属性列表等; 每一个独立子句的where条件结构使用具有二叉树类似结构的CondTreeNode表示。
而多语句组合攻击检测的目的是检测出具有异常企图的语句序列。其模型需要能反映事务的操作流程信息。根据上述需求, 采用操作序列来描述一组连续的数据库事务(操作语句), 序列中的每一项表示事务中的一条SQL语句。根据SQL语句的语义特点, 可将序列中的项(SQL语句)抽象为(O, T, F)的三元组, 其中, O表示操作类型, T表示操作表或视图的集合, F表示相关属性集合。如将语句“update ORDER set PRICE = 2000”表示为(update, {ORDER}, {PRICE})。
3.2 规则库生成在单条SQL结构异常检测中, 首先需要获取足够的覆盖用户行为的正常SQL语句作为训练集。这些语句来源可以是审计库, 也可以是数据库活动监控器的监控记录。对训练集中的语句进行语句结构解析得到SQL语句模式, 然后按照模式库的存储设计将解析结果存储到行为模式库中。存储时针对语句模式中的sql_stmt_type, table_list, operation_list等建立索引, 以提高检测阶段的效率。
数据存储结构中会对具有二叉树结构的CondTreeNode进行特殊处理:首先中序遍历整棵树, 同时运用SQL指印技术[3-4]对条件树中的常量、变量进行抽象, 将二叉树形式的表示结构压缩成为一个字符串形式的结构, 然后利用此字符串结构进行存储。如语句“select A from T where C=D and E > 3”的条件树表示如图 5所示, 表 1显示了针对每一个子树的压缩结果。
针对特殊形式的单条SQL攻击, 应在规则库中建立辅助规则用于后续检测, 其检测目标是:语句中出现“; create table cmd(str image); ”这一类使用分号注入的手段和具有长度异常变量、长度异常语句的缓冲区溢出等攻击等。
在面向多语句组合攻击的检测过程中, 建立合法规则库的过程即是从训练数据中找出出现次数较多的用户数据库操作流程, 作为合法的行为轮廓。数据挖掘中的频繁闭序列挖掘相关算法能有效地发现复杂的用户行为模型。
对训练集进行频繁闭序列挖掘的过程中, 由于某些具有相同或相似语义的SQL之间可能存在细微的属性差异, 如果将序列中每一项都细化到三元组的属性层次, 可能导致挖掘结果过于稀疏, 也会导致检测阶段不能对待测SQL与合法轮廓的SQL中的属性差异进行合理的界定, 产生较多的误报。因此在应用传统的频繁闭序列挖掘中应进行多层挖掘拓展, 对支持度不够的项, 尝试将其转换为更粗粒度的层次做进一步挖掘, 目的是从训练集中挖掘出更多的隐藏轮廓。如项(select, {ORDER}, {PRICE})和(select, {ORDER}, {NAME, PRICE})在挖掘过程中如支持度均不够, 将被转换为更高层次的新项(select, {ORDER}, )进行处理。
BIDE算法[10]由于不需要在挖掘过程中存储候选频繁序列, 仅对训练集扫描就可进行频繁序列的闭合验证, 因此具有良好的空间和时间性能。在保持原算法性能的优势下, 对BIDE算法进行多层挖掘拓展, 提出了多层挖掘拓展的频繁闭序列挖掘算法。其过程是在给定的频繁支持度阈值下, 以所有的频繁1-序列为起始, 深度优先地进行频繁模式增长, 查找支持度大于阈值的所有频繁序列。在获取频繁1-序列和对频繁模式基进行增长的过程中, 如果某项的支持度不够, 将尝试将其转换为高层次的新项。得到每个频繁序列后, 采用位置拓展检验对训练集进行扫描, 验证频繁序列是否闭合。同时, 算法将判断新发现的频繁模式基是否可能产生更多的频繁闭序列, 对不可能的节点及时进行剪枝, 停止对该频繁模式基的增长。
3.3 行为模式匹配在语句级用户异常行为检测中, 针对每一条待测SQL语句, 首先解析获得其语句模式, 与合法模式库中的合法语句进行距离计算(如采用编辑距离[11])。两条SQL语句模式间的距离计算公式为:
$ \begin{array}{c} {\rm{distance}}({\rm{SqlSchema1}}, {\rm{SqlSchema}}2) = \\ \sum\limits_{i = 1}^{\scriptstyle\max ({\rm{length}}({\rm{sql}}1), \atop \scriptstyle{\rm{length}}({\rm{sql}}2))} {{\rm{weight}}(i) * {\rm{distance}}({\rm{SqlStmt1}}i, {\rm{SqlStmt}}2i)} \end{array} $ |
$ \begin{array}{c} {\rm{distance}}({\rm{SqlStmt}}1, {\rm{SqlStmt}}2) = \sum {{\rm{weight}}(j) * } \\ ({\rm{distance}\; \rm{of} \;\rm{element} }\;j\;{\rm{ between}\; \rm{SqlStmt1}, \;\rm{2}}) \end{array} $ |
合法的SQL语句与库中语句的距离应为0或接近0。当距离大于0时, 检测引擎将报告异常, 并找出与待检测SQL语句距离最为相近的一些合法语句, 供管理员进一步对比审核。如针对一条SQL注入语句“select A from T where C=D or 1=1”, 它的where子句语法解析树的最后一部分是“c_eq, v_num, v_num”, 表明其具有“数值=数值”的结构, 这种结构不会在合法的语句中出现, 所以计算出的距离结果会大于0, 表明该语句可能是攻击语句。
在多语句组合攻击检测引擎中, 采用事务间距离检验算法计算待测事务轮廓与规则库中合法轮廓集的最近距离, 并与最大距离阈值比较, 将超出距离阈值的事务标识为异常事务。事务间的距离计算采用编辑距离:
$ \begin{array}{c} {\rm{distance}}({\rm{seq}}1, {\rm{seq}}2) = \\ \frac{{{\text{Levenshtein Distance fo seq1 and seq2}}}}{{\max ({\rm{length}}({\rm{seq}}1), {\rm{length}}({\rm{seq}}2))}} \end{array} $ |
在计算距离时, 不同类型的语句将对距离的增量产生不同影响。如一条update操作带来的距离差异将大于一条select操作。在得到事务间的绝对距离后, 将进行归一化处理以得到相对距离, 用以标识待测事务与合法事务间的序列相似程度。
4 实验 4.1 实验数据集以实际应用中的合法操作语句集作为入侵检测特征库的训练集。测试数据库中共有6张表, 每张表具有3个属性。训练集共包含2 000个事务, 事务的平均长度为8(取整后), 事务中所有的语句均为面向测试数据库的管理命令(DDL/DCL)以及在6张表上的select、update、insert、delete等操作(DML)。
实验测试集为1 100个待测事务, 事务的平均长度为8。所有待测事务分为两类:1) 100个包含结构异常语句的事务, 总共含有200条异常语句。2) 1 000个由结构完全正常的语句组成的事务, 其中, 正常事务和异常事务(不符合操作流程)各500个。
检验结果以查准率(precision)和查全率(recall)进行度量。令TP(true positive)为被正确标识的异常语句或事务数, FN(false negative)为被错误标识的正常语句或事务数, FP(false positive)为被错误标识的异常语句或事务数, TN(true negative)为被正确表示的正常语句或事务数。有:
$ {\rm{Precision}} = \frac{{{\rm{TP}}}}{{{\rm{TP}} + {\rm{FP}}}} $ |
$ {\rm{Recall}} = \frac{{{\rm{TP}}}}{{{\rm{TP}} + {\rm{FN}}}} $ |
上述测试集的1 100个事务中共包含10 678条语句, 其中, SQL注入语句100条, 缓冲区溢出攻击语句100条, 正常语句10 478条。检测引擎对语句结构异常的检测结果如表 2所示(括号内数字为实际的语句树目, 也即理想的结果)。
对表 2所示的实验结果进行重现和跟踪可得如下结论:1)系统对于以异常变量为攻击特点的缓冲区溢出攻击有很好的判定结果; 2)对SQL注入攻击的漏检主要集中在某些智能化的SQL注入和组合式的SQL注入, 如在where子句中加入类似“user > 1”的两端类型不同的表达式来获取数据库异常返回的攻击语句将难以被引擎发现; 3)对正常语句误报的原因是, 某些语句结构过于复杂, 与规则库中的语句结构差异过大, 或其中含有用户误操作的表名或对象名, 导致引擎将其识别为异常语句。
在多语句组合攻击检测模块下, 调整行为轮廓挖掘的相对频繁支持度阈值(min_sup)和事务匹配算法的距离阈值将对多语句组合攻击检测造成影响。提高行为轮廓挖掘的频繁支持度阈值将导致合法行为轮廓数目的减少, 使得引擎检测出更多的异常事务, 可提高查全率, 但会使查准率有所下降。图 6显示了在事务匹配算法的距离阈值(max_distance)取值固定为0.7时, 不同的挖掘频繁支持度阈值(min_sup)对查准率和查全率的影响。
提高事务匹配算法的距离阈值将更加严格地判定异常事务, 可提高查准率, 但会使查准率降低。图 7显示了在挖掘频繁支持度阈值取值固定为0.1%时, 不同的事务匹配算法的距离阈值对查准率和查全率的影响。
在不同的实验环境下, 合理的选择参数可使检验效果达到理想的指标。如在当前实验环境下, 挖掘频繁支持度阈值取值为0.1%, 事务匹配算法的距离阈值取值为0.7时, 查准率和查全率分别为98.4%和93.5%, 能有效检测出多语句的组合攻击。
5 总结本文设计了一个基于网络协议的多角度数据库活动监控器。在分别提出SQL结构异常检测模型和多语句组合攻击检测的SQL语义模型后, 根据入侵检测系统的需求特性, 分别给出了不同模块下相应的特征库建立方法与模式匹配方法。后续工作包括完善各DBMS特有SQL结构的语义解析细节、增加对智能化SQL攻击的检测能力、提升多层频繁模式挖掘的效果和性能等。
[1] |
VIEIRA M, MADEIRA H. Detection of malicious transactions in DBMS[C]//11th Pacific Rim International Symposium on Dependable Computing. [S. l. ]: IEEE, 2005.
|
[2] |
NEWMAN A, BERENBAUM E. System for protecting database applications from unauthorized activity: U. S., Patent Application 10/798, 079[P]. 2004-03-11.
|
[3] |
KUMAR S, SPAFFORD E H. A software architecture to support misuse intrusion detection[C]//Proceedings of the 18th National Information Security Conference. [S. l. ]: [s. n. ], 1995: 194-204.
|
[4] |
NOEL S, WIJESEKERA D, YOUMAN C. Modern intrusion detection, data mining, and degrees of attack guilt[M]// BARBARA D, JAJODIA S. Applications of Data Mining in Computer Security. New York: Springer-Verlag, 2002: 1-31.
|
[5] |
LEE S Y, LOW W L, WONG P Y. Learning fingerprints for a database intrusion detection system[C]//Computer Security: ESORICS 2002. Berlin Heidelberg: Springer, 2002: 264- 279.
|
[6] |
LOW W L, LEE J, TEOH P. DIDAFIT: Detecting intrusions in databases through fingerprinting transactions[C]//ICEIS. Spain: [s. n. ], 2002: 121-128.
|
[7] |
HU Y, PANDA B. Identification of malicious transactions in database systems[C]//Seventh International Database Engineering and Applications Symposium. [S. l. ]: IEEE, 2003: 329-335.
|
[8] |
HAN J, KAMBER M.
Data mining, southeast asia edition:concepts and techniques[M]. San Francisco: Morgan kaufmann, 2006.
|
[9] |
International Organization for Standardization. ISO/ IEC-9075-1: 1999[EB/OL]. [2003-01-01]. http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26196.
|
[10] |
WANG J, HAN J. BIDE: efficient mining of frequent closed sequences[C]//20th International Conference on Data Engineering. [S. l. ]: IEEE, 2004: 79-90.
|
[11] |
WIKIPEDIA. Levenshtein distance[EB/OL]. [2013-12-10]. http://en.wikipedia.org/wiki/Levenshtein_distance.
|