医疗信息系统中数据库安全检测模型的建立

2015-01-24 12:24炜,黄
电子设计工程 2015年21期
关键词:子句用户名语句

李 炜,黄 倩

(1.武汉大学人民医院 信息中心,湖北 武汉 430060;2.武昌职业学院 招生就业与校企合作处,湖北 武汉 430202)

现代社会计算机技术及网络技术的发展飞速,伴随着这些技术的发展,数据库也在各行各业中得到了广泛,几乎所有的企事业单位,尤其是医院等都把自己的数据库连接到Internet上。但由这些技术而带来的数据库安全问题却是不容忽视的,如对敏感数据的篡改和防窃取的问题等[1]。所以当前网络对安全防护措施的要求越来越高,传统的防火墙已达不到某些领域较高的要求,对于一些入侵如SQL注入、未经授权的访问、跨脚本攻击等这些入侵都有些力不从心,所以后台数据库应用级的保护也变得非常迫切。

当代的医疗系统基本上都建立用来存储和管理各种业务数据的核心数据库。数据库的建立从根本上改变着医疗体系运行的规则,保存着几乎所有病人病例门诊资料等,这些数据相比其他行业系统更加敏感和隐私,一旦被恶意攻击,将会造成无法弥补的损失,对于大多数的合法用户,从攻击者的角度看,直接损害到数据库比探索网络中的数据所带来的好处,以带来多大的兴趣[2-3]。从数据库中,我们使用了通用的初始模型的原则,建立一个数据库的安全测试进行了讨论。在文中,基于用户行为和SQL语句的数据库安全检测策略相结合的规则为基础的结构。

1 基于用户行为规则的安全检测

基于用户行为规则的安全检测是在数据库用户行为模型的基础上,利用关联分析的方法生成用户行为规则,结合异常检测的思想对数据库用户行为进行安全检测的一种方法。

1.1 数据库用户行为模型

分析适用于医疗信息数据库用户行为,需要收集用户对数据库的操作信息[4]。用户登录数据库的起始时间、用户执行操作的时间、客户端IP地址和端口号、登录数据库服务器IP地址和端口号、用户向数据库提交的SQL语句、数据库登录用户名等信息从不同方面描述了数据库用户的行为。

每一条SQL语句由命令动词、子句、和表达式等构成。其中,命令动词规定了 SQL语句的操作类型,如SELECT、INSERT、UPDATE、DELETE;表达式是SQL语句中的一些值,可能是变量、常量、查询字段等,其中所涉及的数据库关系表和查询字段等规定了SQL语句的操作目标。

一个用户行为向量组对应一条SQL语句,其由若干用户行为向量组成,用来表示此SQL语句的操作行为。每个用户行为向量包含用户名、操作类型和操作目标3种类型元素,如下所示。

1:<用户名A,操作类型1,操作目标1>

2:<用户名A,操作类型2,操作目标2>

3:<用户名B,操作类型3,操作目标3>

4:<用户名B,操作类型4,操作目标4>

5;<用户名B,操作类型5,操作目标5>....

n;<用户名Z,操作类型n,操作目标n>

由向量1、2、3组成的用户行为向量组表示一条SQL语句,向量4、5表示另一条SQL语句。用户名是指提交SQL语句的用户,同一条SQL语句的用户名是相同的;操作类型是指用户SQL语句的操作类型,为SELECT,INSERT,UPDATE,DELETE,CREATETABLE中之一;操作目标是指用户每个操作类型所对应操作的表或列。每个用户行为向量组的向量个数由所对应的SQL语句决定[5],如“用户名A”就有两个用户行为向量。“用户名B”有3个用户行为向量。

一条SQL语句转化为一个用户行为向量组有如下原则:

1)一值性:行为向量中的元素都是单值;

2)对应性:用户名、操作类型和操作目标之间必须是一一对应的;

3)重复表达性:一条SQL语句中可能包含多种操作类型,无论操作类型是否相同都必须用新的向量表示。

用户行为向量中的元素类型还可不断扩展,以增加用户行为向量组对SQL语句的描述精度,增加向量维度虽可提高对SQL语句的描述精度,但也会大量增加用户行为向量的个数,从而增加了系统处理的数据量[6]。

使用用户行为向量组表示SQL语句的操作行为,不仅分析了 SQL语句的操作类型与操作目标。同时,也能提取操作条件或嵌套查询中的操作内容,可较全面的描述数据库用户的操作行为,从而为下文对户行为的分析奠定了模型基础。

1.2 关联规则与用户行为规则

数据库用户行为规则是用户在长期操作数据库的过程中,从大量用户的操作记录中挖掘出来的、能典型代表用户对数据库操作行为的一种表示形式,其含义可表达为用户经常操作的数据库对象或用户经常使用的操作类型。根据上节的分析可发现用户行为向量元素之间有着较强的相关性。

上述用户行为的相关性可较好的用关联规则形式表示:

用户名U操作类型=>操作目标

用户名U操作目标=>操作类型

用户名=>操作目标U操作类型

因此,本文使用关联规则算法从用户行为数据中生成数据库用户行为规则。

1.3 预处理用户行为数据

将用户历史操作记录中的操作语句均转化为用户行为向量组后,基于用户行为规则的安全检测采用关联规则算法处理用户行为向量,将每个向量作为一条事务项。为提高关联规则算法在系统中的执行效率,减少算法甄别数据的过程,需数值化处理每个向量的元素[7]。

向量数值化前需统计这段时间内所有不同的用户名和操作目标的数目,然后对每个元素做数值映射,避免出现向量元素的数值重叠。例如,对于用户行为向量“、〈SCOTT,INSERT,OPTION〉、 〈SCOTT,UPDATE,EMP〉、 ”的数值化过程为:

先规定操作类型的映射为(SELECT=1,CREATETABLE=2,DELETE=3,INSERT=4,UPDATE=5,ALTERTABLE=6,DR0PTABLE=7);其次根据不同用户名的数量将用户名映射为(WANGH0NG=8,SC0TT=9);再次根据操作类型和用户名的数值映射结果,将操作目标映射为 (DUAL=10,PRIVS=11,0PTI0N=12,EMP=13,DEPT=14),如此即完成了向量的数值化处理,如表1所示。

表1 数值化用户行为向量Tab.1 Num erical user behavior vector

1.4 相关性度量标准的选择

用关联规则算法生成数据库用户行为规则,要根据用户行为数据的特点和用户行为规则的意义选择合适的相关性度量标准[8]。

本文选用最大置信度作为用户行为规则的度量标准,总结理由如下:

1)数据库用户行为规则描述的是用户的典型行为,规则前后两项必然满足强相关关系。最大置信度对强相关规则的识别和区分能力最强,相同条件下更容易过滤出强相关规则。

2)从实际意义上讲,对规则前项和后项不平衡的情况,数据库用户行为规则应当判定是正相关的。例如,权限受限用户A只能执行SELECT操作,规则A=>SELECT是强相关的,而执行SELECT操作类型的还有较多其他用户,这就导致用户A在事务集的出现概率和操作类型SELECT出现概率的不平衡。最大置信度恰好满足数据库用户行为规则在以上不平衡情况下判定为正相关的要求。

3)最大置信度满足零不变性、对称性和正反不变性,对大量用户行为数据有较好的适用性。

1.5 生成正常行为规则

用户正常行为规则需要从正常的历史操作记录中获得,因而保证记录内容的安全性是规则生成的关键。但需保证历史操作中的每一条记录均是绝对安全的行为却不容易实现,即使实现也需大量的人工鉴别且耗费资源。为提高系统安全检测的灵活性,降低系统运行所需的人工工作量,系统针对不同安全性的训练集提供了不同的规则生成算法。

1.6 安全检测算法

基于用户行为规则的安全检测駣用了异常检测思想。异常检测根据用户操作行为建立用户正常行为规则库,凡是不符合规则库中用户正常行为规则的操作行为均认定是异常操作。

基于用户行为规则的安全检测描述如下:

1)系统从用户历史某一段时间的操作日志中生成用户正常行为规则,根据历史操作日志内容的安全性不同选择不同的规则生成算法。

2)分析生成的用户行为规则。当历史操作日志内容是绝对安全吋,用户典型正常行为规则库和用户非典型正常行为规则库中的规则组成用户正常行为规则库,作为异常检测的规则;当历史操作日志内容不是绝对安全吋,只有用户正常行为规则库中的规则作为异常检测规则。

3)将待检测的用户操作语句解析成用户行为向量组,并将每个向量与用户正常行为规则库中的规则匹配。若一用户行为量组的所有向量均匹配正常行为规则,则此条操作语句是正常行为;若一个用户行为向量组中有一个向量不能匹配用户正常行为规则,则说明此操作行为是异常的。

4)若检测出的操作是正常操作,则输出显示;若检测出的操作是异常操作,在显示输出的同时保存到系统自身数据库中,之后可由安全人员进行主观甄别,并将甄别出的正常行为转化为正常行为规则加入到正常行为规则库中。这样便实现了规则库的不断更新。

2 基于SQL语句结构的安全检测

使用基于最大置信度度量标准的关联规则算法从用户行为向量组中生成用户行为规则,充分发挥了关联规则发现数据潜在联系的能力。但应当注意的是,由于用户行为向量组只是表征了用户SQL语句的操作行为和操作目标,并未关注语句中的条件表达式等细节信息,这就导致了用户行为规则对用户行为描述的粗糙性。

为弥补上述问题,同时提高安全检测的正确性,本文系统增加从语句结构和内容上分析SQL语句的功能,即基于SQL语句结构的安全检测。

2.1 异常SQL语句结构

SQL语句承载着数据库用户行为信息的核心内容,也是用户操作数据库的执行工具。因此,数据库违规行为与SQL语句的语句结构有较大关系。

SQL注入就是典型的通过修改SQL语句结构和内容的一种违规行为,其主要表现形式如下:

1)条件恒真/假。恶意用户在带有条件子句的SQL语句中构造条件永远为真/假的逻辑表达式,使SQL语句的条件子句不再发挥条件选择作用,恶意用户就可绕过数据库验证或取得非权限范围的数据内容。例如,“SELECT SNO FROMSTUDENTSWHERE SNO>3 OR 1=1 ”语句 中“OR 1=1 ”导致査询条件永远为真,"SN0>3"的条件不再发挥作用,语句返回了额外数据。

2)SQL语句加注释符。恶意用户可利用注释符“_”中断SQL查询语句,绕过系统的的安全验证。例如,“SELECT*FROM USERS WHERE USERNAME=ADMIN AND PASSWORD=PSW"语句中加入注释符 “_”, 语句变为“SELECT*FROMUSERS WHERE USERNAME=ADMIN--ANDPASSWORD=”,这样使得恶意用户只需用户名而不用密码即可通过数据库验证。

3)UNION查询攻击。恶意用户可在SQL语句后添加UNION SELECT查询语句获取非权限范围数据。

4)附带语句攻击。恶意用户可在一条SQL语句结束后通过语句结束符“;”在原有SQL语句后面构造新的SQL语句,这样便可额外执行多个非法语句。例如,在正常SQL语句后添加“,DROP TABLE USERS",恶意用户就可非法删除数据库中的USERS表。

5)SQL注入方式还有其他如存储过程攻击、注入推断和替换编码等,这些方式仍需利用上述提到的基本SQL注入类型。

基于SQL语句结构的安全检测,除了识别SQL注入这种改变SQL语句结构内容的恶意行为外,还能发现系统的限制级操作。例如,数据库管理员通过系统设置只允许用户进行某一类型的SQL操作,如限制用户执行除SELECT操作之外的任何操作。当恶意用户对数据库执行DELETE操作时,系统需检测出DELETE这种限制级操作。

2.2 检测原理

根据上文描述的若干SQL语句恶意行为,下面介绍基于SQL语句结构的安全检测原理。

系统解析用户提交的SQL语句,得到语句的语法解析树,分析识别SQL语句的各部分内容,通过与上文中提到的已知恶意模式对比判断是否存在恶意行为。对于限制性操作、SQL语句加注释符、UNION查询攻击和附带语句攻击等恶意行为的检测,只需识别语句中存在相关关键字或关键符号即可。对于条件恒真/假的检测,还需判断条件子句中的不同条件子式,进而判断条件子句的逻辑值是否为恒值。

1)条件子式是指具有“operandL operator operand”形式的逻辑结构,其中operator为操作符,operandL和operandR为运算式,通常是表达式、常量、函数或子查询。下面是几种常见的条件子式:

2)比较条件子式,是通过“=、>、<、≠、ANY、ALL”等操作符比较两个运算式的大小,如salary≥ALL(1400,3000);

3)范围条件子式,是通过[NOT]BETWEEN x AND y结构判断条件是否在所定范围内,如 salary BETWEEN 2000 AND 3000;

4)带有关键字 EXISTS、IN、LIKE的条件子式,如 EXISTS(SELECT*FROMemployees e WHERE d.department_id=e.department_id);

条件子句分为简单条件子句和复合条件子句。简单条件子句只由一个条件子式构成,复合条件子句则由多个条件子式通过AND和OR连接而成,如下所示:

NOT+条件子式

条件子式+AND+条件子式

条件子式+0R+条件子式

…条件子式+OR+条件子式+AND+条件子式…将条件子句转换为后缀表达式的步骤如下:

1)在SQL语法解析的基础上识别SQL语句条件子句中操作数和运算符,设置堆栈Z和集合C。

2)从左到右读入以上操作数和运算符,注意子句中的列名、列名值和嵌套查询都作为操作数。

3)若读到的是操作数,则直接加入集合C。

4)若读到的是运算符且Z为空,将运算符加入到栈中;若读到的是运算符且Z不为空,取出所有优先级不小于该运算符的栈顶元素(各运算符的运算优先顺序如表2所示),然后将该运算符入栈。

表2 运算符优先顺序Tab.2 Operator precedence

5)若读到的是左括号,将其加入到栈中;若读到的是右括号,进行出栈操作,并将出栈的元素输入集合C,直到弹出栈的是左括号并将其删除。

6)最终将堆桟Z中元素输入到集合C中,则集合C中元素构成的表达式即为后缀表达式。

计算后缀表达式值的步骤如下:

1)设置堆栈Y,从左到右读取集合C中后缀表达式的各元素。

2)若读到的元素是一个操作数,入栈Y。

3)若读到的元素是个操作符,从堆栈Y中取出两个元素并执行这一操作符的运算,并将运算结果加入堆找Z(注意把“<”、“>"和“=”作为运算符做逻辑运算,同时注意如果出现运算数为据库列名、列名值或嵌套查询等无法计算结果的现象时,统一设置运算结果为“#”)。

4)读取集合C完毕后从堆栈Y中弹出数值,即为后缀表达式的结果。

后缀表达式的值为1或常数,说明条件句子恒为真;后缀表达式的值为0,说明条件子句恒为假;后缀表达式的值为#,说明条件子句不存在恒真/假的现象。

3 安全检测策略

本文系统采用甚于SQL语句结构的安全检测和基于用户行为规则的安全检测相结合的安全检测策略,发现和识别用户对数据库操作过程中的异常行为。其中,基于SQL语句的安全检测从SQL语句本身的安全角度进行检测是细颗粒度的检测,但其只能检测已知类型的异常操作行为基于用户行为规则的安全检测从用户操作行为的角度进行检测,是粗颗粒度的检测,但可检测未知的异常操作行为。

根据系统设计原理,目前医疗信息系统能检测的用户异常操作主要有以下3类:

1)合法用户越权操作。指合法用户对数据库的操作超越了自身权限范围,不同于自身权限的操作行为。

2)入侵者操作。指入侵者通过非法手段登录数掘库系统后对数据库的操作行为,其操作不同于正常数据库用户的操作行为。

3)SQL注入攻击。

系统安全检测结果保存在数据库安全审计日志所在的数据库中,在原安全审计日志的基础上增加操作安全性属性,如表3所示。

表3 安全检测结果属性Tab.3 Attributes of security detection result

4 结束语

文中详细介绍了安全审计检测模块和规则生成模块的设计方法与原理。医疗信息系统安全检测駣用基于用户行为规则的安全检测和基于SQL语句结构的安全检测相结合的方式。基于用户行为规则的安全检测是在建立数据库用户行为模型的基础上生成用户行为规则,从而实现异常检测,并考虑了训练集的安全性因素。基于SQL语句结构的安全检测是在分析SQL语法结构的基础上实现的,其弥补了基于用户规则检测颗粒度粗的缺点。随着医疗卫生信息事业的发展和信息安全技术手段的更新,医疗信息安全也会暴露并提出新的问题和需求。对于当前的医疗信息安全,需要在医疗信息标准下更深入、广泛地结合医疗流程和医疗行业的实际进行研究,且还需关注信息安全新技术的发展以便与医疗信息安全相结合,使医疗设备和医疗信息安全充分共享,以至于更好地提高医疗服务质量。

[1]姚晔弘,张建国.基于IHE ITI-ATNA技术规范的区域医疗信息共享安全问题的解决方案[J].中国医疗器械杂志,2008,32(5):332-333.YAO Ye-hong,ZHANG Jian-guo.Solution based on IHE ITIATNA technical specifications regional health information sharing security issues[J].Chinese Journal of Medical Instrumentation,2008,32 (5):332-333.

[2]刘建勋.基于Windows的DICOM标准的研究与应用[D].包头:内蒙古科技大学,2004.

[3]张凯,吕扬生.DICOM标准及应用[J].世界医疗机械,2001,7(5):58-61.ZHANG Kai,LV Yang-sheng.DICOMstandard and application[J]World Medical Equipment,2001,7(5):58-61.

[4]谷宇.HL7消息解析及传输技术的研究与实现[D].包头:内蒙古科技大学,2010.

[5]邱峰,田捷,曹勇,等.PACS系统综述[J].中国医学影像技术,2000,16(1):73-75.QIU Feng,TIAN Jie,CAO Yong,et al.PACS systematic review[J].China Medical Imaging Technology,2000,16(1):73-75.

[6]高岚.医学信息学[M].北京:科学出版社,2007.

[7]National electrical manufacturers association.Digital Imaging and Communications inMedicine[S].(Part1~Part8, Part 15),2007.

[8]Coquand R,Casse M,Barraud S,et al.IEEE Trans[C].Electron Devices 60,2013:727.

猜你喜欢
子句用户名语句
命题逻辑中一类扩展子句消去方法
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
命题逻辑可满足性问题求解器的新型预处理子句消去方法
重点:语句衔接
《护士进修杂志》投稿程序
西夏语的副词子句
机智的快递员
命题逻辑的子句集中文字的分类
如何搞定语句衔接题