李晔锋 公 备 徐达文 乐嘉锦
1(北京工业大学计算机科学与技术学院 北京 100124)2(宁波工程学院电子与信息工程学院 浙江 宁波 315211)3(东华大学计算机科学与技术学院 上海 201620)
访问控制是数据库安全领域的重点[1],它根据主体和客体的属性进行授权操作[2],用于限制未授权用户对敏感数据的访问。然而,这种以权限、授权、身份作为基础的控制方式存在较大的安全隐患,如:攻击者利用密码嗅探可能获得用户账号和密码;利用缓冲区溢出和代码漏洞可能窃取敏感数据;利用SQL注入[3]可能绕过访问控制执行非法的操作。更重要的是,很多的犯罪行为是由拥有权限的内部人员所为[4],如银行的财务人员可以利用INSERT和UPDATE权限向非法的信用卡账号执行转账操作[5]。由此可见,存储着敏感信息的数据库不但需要运行在一个可信的环境中,更需要对内部用户的行为进行主动控制,防止权限滥用现象的发生。
可信计算是指计算机运算的同时进行安全防护,使操作和过程行为在任意条件下的结果总是与预期一样,计算全程可测可控,不被干扰,是一种运算和防护并存,自我免疫的新计算模式[6]。在TCG制订的国际标准中,可信平台模块(TPM)依赖于上层应用的调用,只能对数据完整性进行度量,无法对系统的运行情况进行实时监控[7]。我国自主创新的可信平台控制模块(TPCM)[8]除了拥有TPM的所有功能外,还能支持信任链的扩展,实现对软件的运行状态和API调用行为进行主动度量[9]。但这些行为由指令和编码组成,在不同的软件中可能代表不同的含义,导致语义断层的出现。
根据目前的研究成果,可信计算能够为DBMS的运行提供安全的环境,免疫一些外部攻击如密码嗅探、代码注入和缓冲区溢出等非法操作。另外,尽管各大DBMS厂商提供的参数化查询[10]方案有效地杜绝了从Web端进行SQL注入的可能。但是对于存储过程中的SQL注入攻击[11]以及内部人员的权限滥用行为却仍然无法避免。针对此类行为,目前大多采用机器学习相关的方法进行被动地检测[12-14],然而检测结果存在误报率,且通用性较差。
基于当前的研究现状,本文提出了一种数据库强制行为控制模型,为单独查询语句和事务中的查询序列制定运行规则,充分体现了“强制”的特点。在可信计算的基础上,提出可信数据库控制基(TDCB)结构,提供行为策略控制者的可信认证和行为策略调用过程中的完整性度量。此外,模型还具有以下的特点:行为控制策略使用白名单机制[15],免疫任何未通过策略定义的行为;行为匹配过程基于优化后的语法树,拼接查询语句无法达到非常访问的目的;通过可信软件基(TSB)[16]调用TPCM的度量机制对行为策略进行主动度量,充分保证行为策略在存储和执行过程中不被非法篡改。
本文贡献主要存在于两个方面:
(1) 强制行为控制模型中的相关定义约束了授权用户的操作行为,严格限制非法访问现象的发生。
(2) TDCB连接DBMS和TSB,对强制行为策略进行完整性度量,实现可信计算技术对数据库内部行为的保护。
传统的访问控制技术只关心权限使用的“能”与“否”,用户一旦获取权限后就可以为所欲为,在用户名和密码被盗用的情况下数据库将遭受巨大的损失。在不丢失用户账号的情况下,使用SQL注入也可以绕过访问控制达到非法访问的目的,在下面的SQL语句中表述了登录判断行为:
SELECT * FROM USERS
WHERE username=’mike’ and password=’123’
即使数据库部署在可信计算环境保护的服务器上,但如果连接数据库的Web应用程序健壮性比较差,恶意访问者可以通过在表单或者浏览器的地址栏中填入形如“’or ’1’=‘ 1--”的字符达到SQL注入的效果。究其本质,是因为写在应用程序连接字符串中的数据库用户对USERS表具有SELECT操作的权限。
通过构建上述查询的语法树,不难发现该查询拥有三个节点:一个投影操作π(USERS.*)、两个选择操作σ(USERS.username)和σ(USERS.password)。如果规定在此登录判断行为对应的查询中必须包含对username和password字段的选择操作,并且必须使用等号作为操作符,则上面的SQL注入攻击失效。
为了达到上述效果,需要引入“必须”作为修饰词,对用户的操作行为进行约束,并体现其强制性。这种方法除了能够抵御SQL注入攻击外,还具备以下两个优点:
(1) 授权用户必须了解某条记录中username或者password字段的内容,才能获取该记录中其他字段的信息。
(2) 授权用户的每次操作只能获取有限条记录,使得信息泄露和篡改造成的损失降低到最小。
但是,目前没有行为控制与数据库层次上的研究,下面简要介绍行为控制的研究。
“行为控制”(Behavior Control)这个概念最早由Bondi提出[17],它本身就是为可信计算服务,后来在《软件行为学》中被形式化定义[4]:“主体S对行为A是否被执行由其主体行为踪迹A1A2…An针对某个条件的满足性决定”。与传统的访问控制相比,它具有两个改进:
(1) 安全控制概念从个体概念向群体概念升级。
(2) 把行为的完整性添加到完整性概念范畴中。
《软件行为学》通过建立被访问客体和系统状态之间的关联,使得行为控制具有“强制性”,即行为必须包括历史行为序列的条件满足性检查。它的另一贡献是阐述了强制行为控制(MBC)与传统访问控制(DAC和MAC)之间的结构关系(图1),即行为控制必须建立在访问控制的基础上。一旦脱离了访问控制,行为控制将变得毫无意义。
图1 具有MBC的访问控制
(1) 客体关联系统状态只是增强了行为控制能力,并没有真正体现出“强制”的特点。
(2) 尽管行为控制以访问控制为基础,但它应当具有一定的独立性,即行为控制策略与访问控制策略之间不是整体与部分的关系,而是低耦合的调用关系。
(3) 行为控制过程开销巨大,采用分布式主动控制和伴侣代理的方法并不适用于数据库环境。
目前,我国的可信计算已经形成了“以密码学为基础、可信芯片为信任根、主板为平台、软件为核心、网络为纽带、应用成体系”的自主创新技术框架[19],几乎覆盖了整个计算机的体系结构,但是在数据库方面仍然缺乏可信机制的配套。
作为一种系统软件,DBMS具有它的特殊性。一方面,它位于OS之上,在运行时受到OS访问控制策略的制约;另一方面,它自身拥有的访问控制体系不依赖于OS,具有较强的独立性。现有的可信计算技术能够为DBMS提供可信的运行环境,包括硬件、OS和网络环境,并且对构成DBMS的可执行文件进行度量,但无法深入DBMS内部对其客体进行更细粒度的可信度量。例如,假设DBMS存在一个拥有修改元数据权限的后门用户,它可以修改任何访问控制策略。由于该后门只针对DBMS本身,在操作系统层次不产生任何安全威胁,故当策略发生修改时,可信计算技术无法对其进行实时度量。
2.1.1 模型定义
下面给出了数据库强制行为控制(MBC)模型的相关定义。目前,模型中只包含数据库中最主要的DML行为,即含有SELECT、INSERT、DELETE和UPDATE操作的行为,因为它们会生成不同的查询语法树和执行计划,进而产生不同的语义。其他类型的操作都是立即执行的,可以通过配置访问控制策略进行管理。
定义1主体主体即操作者实体,通常表示数据库用户,每个主体在元数据中有唯一的id与之对应。主体的集合用S表示。
定义2客体客体即被操作者实体,可以表示粗粒度的表、视图等,也可以表示细粒度的属性,每个客体在元数据中有唯一的id与之对应。客体的集合用O表示。
定义3原子操作行为该定义表示不可分割的操作行为,用f(OB,op)表示,其中f∈{prj,sel,join}分别对应投影、选择和连接操作,OB⊂O表示客体集合,op为一个短整数对应一个操作符(如“=”、“>”、“<”等)或一个操作谓词(如LIKE、BETWEEN、IN等)。针对不同的原子操作行为,有如下的约定:
对于投影操作,有op=0(即不需要操作符)且|OB|=1;对于选择操作,有|OB|=1;对于连接操作,有|OB|=2。
定义4操作行为操作行为的一般形式化描述为:A=F(OBJ):{f(OB,op)|OB⊆OBJ},其中OBJ⊂O表示客体集合(通常来自于FROM子句),意味着每种操作行为都由原子操作行为组成,而F={SELECT,INSERT,DELETE,UPDATE}表示对应的DML操作,每种操作对应一个短整数。
操作行为的另一种形式化描述为A=F(OBJ):{∪(PRJ,SEL,JOIN)},其中PRJ、SEL和JOIN分别表示执行投影、选择和连接原子操作行为的集合。针对不同的操作行为,有如下的约定:
(1) 对于DELETE操作,PRJ=∅;对于UPDATE操作,使用投影操作对应SET语句;对于INSERT操作则没有任何原子操作行为。以上三种操作中的|OBJ|=1,即只有一个客体参与(本文忽略INSERT INTO … SELECT和UPDATE … SET… FROM等在个别数据库中出现的特殊情况)。
(2) 使用符号t(F(OBJ))或t(A)表示操作行为A发生的时刻,同理t(f(OBJ))表示原子操作行为发生的时间,规定同一个操作行为中所有的原子操作行为发生的时刻都是相同的。
定义5事务数据库的事务可由一组DML操作行为序列表示:T={A1,A2,…,An|t(A1) 定义6强制行为约束强制行为约束的形式化描述为M=F(OBJ):{(INC,EXC)|INC∩EXC=∅},其中INC={∪(PRJ1,SEL1,JOIN1)}⊆OBJ表示必须出现的原子操作行为集合,EXC={∪(PRJ2,SEL2,JOIN2)} ⊆OBJ表示必须不能出现的原子操作行为集合,并且EXC中各原子行为的op=0。一旦不允许某个原子行为出现,无论它使用哪种操作符都没有任何意义。 定义7操作行为匹配给定操作行为A=F(OBJ):{f(OB,op)} 以及强制行为约束M=F′(OBJ′):{(INC,EXC)},如果满足以下的条件: (1)F=F′且OBJ⊆OBJ′; (2)INC⊆{f(OB,op)}; (3)EXC∩{f(OB,op)}=∅。 则称操作行为A匹配行为约束M,记为A∝M。 定义7通过约束M明确规定了操作行为A的类型、被操作客体的范围、必须出现和不能出现的原子操作行为。以1.1节所述的登录判断为例,可定义约束 M=SELECT(USERS):INC={sel(USERS.username,=), sel(USERS.password,=)},EXC=∅,表示必须对用户名和密码两个字段执行选择操作,使用的操作符必须皆为等号,没有不能出现的原子操作行为。当本节开始的例子中的查询语句到来后,它会在优化语法树的过程中被自动转换为A=SELECT(USERS):{prj(USERS. *),sel(USERS.username,=),sel(USERS.password,=)},根据定义易知A匹配M。 定义8行为约束序列行为约束序列可由一组强制行为约束的序列表示:L={M1,M2,…,Mn}。 定义9事务匹配对于任意事务T和行为约束序列L,如果满足以下条件: (1) |T|=|L|=n; (2)Ai∝Mi,i=1,2,…,n。 则称事务T匹配行为约束序列L,记为T∝L。 定义9表示事务T中的各个操作行为必须与策略P中的强制行为约束匹配,并且连执行顺序都需要与P一致,不能额外增加和删减操作,这一点足以证明MBP能够保证事务的ACID属性。 定义10强制行为策略(MBP) 强制行为策略由二元组(SUB,L)构成,其中SUB∈S表示允许使用行为约束列表L的主体集合。 强制行为策略构成强制行为列表(MBL),即MBL={(SUB,L)|SUB∈S}。MBL在数据库内以白名单的形式存储,若MBL=∅,即使主体通过了访问控制验证,也不能执行任何DML操作。 定义11可信事务假设主体s对事务T中的每一条语句都具有相应的访问控制权限,并且存在策略P=(SUB,L)∈MBL满足s∈SUB及T∝L,则称T为可信事务。 2.1.2 模型实现 实现MBC模型的关键是行为策略的实现,主要包含两个方面:行为编码和MBP描述。其中行为编码分为行为约束编码和操作行为编码,前者的目的是让MBP能够存储到数据库的元数据中,后者的目的是使用户输入的DML语句能够与已编码的行为约束进行匹配。策略描述的目的是让MBP能够以一种形式化的方式供外部可信模块使用。 文献[18]提出了一种用户行为编码方法,按照查询语句的结构把编码过程分为结构编码和条件编码。它的思想与定义4操作行为和定义6强制行为约束的描述都类似,但是文献[18]还需要考虑选择操作中属性取值的问题,因此本节对该方案进行了简化和改进,作为行为约束编码和操作行为编码的依据。 根据定义6,一个强制行为约束由以下几个部分组成:DML操作类型、被操作的客体集合、必须出现的三种原子操作集合、必须不能出现的三种原子操作集合。在编码过程中,本文对结构编码和条件编码进行整合,并约定如下的编码规则: (1) 使用从元数据中获取的id来描述客体,多个客体用逗号“,”分隔。 (2) 以单独的id表示单个投影操作;以(id, op)的形式表示单个选择操作;以(id, op, id)的形式表示单个连接操作;没有任何操作用0表示。每个原子操作行为之间使用逗号“,”分隔。 假设USERS表的id为10000,它的username和password属性的id分别为23000和23001,则对登录判断事务中的行为约束进行编码的结果如表1所示。 表1 强制行为约束的编码结果 每一条编码的结果被存入元数据中,完善相关属性(如主外键等)后形成行为约束表。此外还需要有一张行为策略表,包含主体信息和行为约束的数目等,其主键与行为约束表的外键构成关联。 用户输入的DML语句,从词法分析开始到物理执行计划的生成,包含多个阶段,其中的语法树优化是一个重要的阶段,它决定着执行计划的生成,包括使用SQL注入攻击时语句拼接的处理结果,因此强制行为控制必须以它为基础。定义3描述的原子操作行为伴随着语法树的生成被初始化,并且在语法树被优化后最终确定,因此大多数的DBMS会在这个阶段根据访问控制进行权限判断。一旦当前主体拥有该DML语句的操作权限,系统将对其进行操作行为编码,并把编码结果存储在缓冲区中。 操作行为的编码过程与行为约束编码类似,不同的是前者的编码结果只包含DML操作符F、参与操作的客体集合OBJ以及PRJ、SEL和JOIN,如定义4所示。 这样,在事务提交前,其中的每条DML语句都通过了访问控制验证,并且执行了相应的行为编码,生成了最终的物理执行计划,此时需要判断该事务是否可信,算法描述如下: 输入:数据库用户主体s,事务T,MBL。 输出:True或者False。 1. begin 2. while (P=MBL.next)!=NULL 3. flag=true; 4. if s(P.SUB continue; 5. if |T|!=|P.L| continue; 6. for i=1 to |T| 7. if !(T.Ai(P.L.Mi) 8. flag=false; 9. break; 10. end if 11. end for 12. if flag return flag; 13. end while 14. return false; 15. end 根据定义11,算法遍历MBL中的所有MBP,首先判断主体s是否属于的SUB(第4行),然后根据定义9判断事务T是否根MBP中的行为序列L匹配,包括T和L长度的匹配(第5行)以及逐条进行操作行为匹配,只要有一条不匹配即退出内层循环(第7~10行)。其中操作行为匹配的过程(第7行)依据定义7的原则进行,按照操作行为和行为约束的编码结果进行匹配。如果所有的MBP均不能匹配,则返回false(第14行)。 假设MBL的长度为l,每条策略中SUB集合的平均长度为ls,策略中行为约束序列的平均长度为lc,每条行为约束和操作行为中OBJ和OBJ’集合的平均长度为lo,PRJ、SEL、JOIN集合的平均长度为la,据此计算算法的复杂度。 根据定义7,操作行为的匹配由三个条件组成,其中第一个条件的复杂度为la2+16;第二个条件和第三个条件的复杂度均为3la2,因此每一次行为匹配的复杂度为:6la2+lo2+16。它与行为序列平均长度lc的乘积即为事务匹配的复杂度,再加上主体的判断,算法的总复杂度为: l×(ls2+lc×(6la2+lo2+16)) (1) 式中:MBL的长度l是影响算法性能的最主要因素。多数事务在与强制行为序列比较长度阶段(第5行)时就不符合条件,不再执行后面的匹配过程,因此算法的实际影响要低于式(1)中的理论值。 本节提出了一种可信数据库控制基(TDCB)结构,如图2所示。其目标就是防止非可信用户(如1.3节中提到的“后门用户”)对已制定好的MBP进行非法篡改。它基于可信华泰的“白细胞”操作系统免疫教学平台,位于可信软件基(TSB)和DBMS之间,其中的认证模块和度量模块分别用于策略操作者的可信认证和MBP的完整性度量,通过调用可信华泰提供的API访问TSB获得度量结果。所有的MBP及其操作者的登录信息都将被存储到DBMS的元数据中,被自身的查询模块和安全模块调用。 图2 TDCB结构及所处的位置 TDCB为MBP创建独立的安全管理员用户,以区别DBMS自身的安全管理员。TDCB的安全管理员用户对数据库中的MBP拥有创建、修改和删除的权限,但是对其他实体(如表、视图等)只有查看的权限。 每个用户的登录密钥由两部分组成:一部分是用户自己设置的密码,另一部分由TPCM的可信密码模块生成的Pin码,以USBKey的形式分发给用户。因此,当安全管理员用户在登录DBMS前,首先必须以“双因子认证”的形式与TDCB建立连接,即用户自己的密码和存储在USB中的Pin码。然后TDCB的认证模块向TSB发出请求,由TSB调用TPCM中密码模块的相关接口完成用户身份的认证。 针对MBP的完整性度量,其主要步骤如下: (1) TDCB的安全管理员用户创建或修改一个MBP时,通过调用API函数向TSB发送请求,获取MBP对应行为约束编码的摘要值。 (2) TDCB把MBP和摘要值下发到DBMS,存储到元数据中。 (3) 在事务提交前,DBMS向TDCB发起通信,再次请求TSB计算当前MBP的摘要值,并与存储在元数据中的值进行比对,若成功则提交事务,否则不执行提交。 为了测试强制行为控制对事务执行性能的影响,在CentOS 7.3操作系统上修改MySQL 5.7.19的源码实现了MBC,并使用TPCC-MySQL工具生成测试数据。TPC-C是一个联机事务处理(OLTP)基准,它包含5个事务:New-Order、Payment、Order-Status、Delivery和Stock-Level。在TPCC-MySQL工具中已将这些事务用具体的SQL语句描述。 本实验共设置了5条MBP,分别对应这5个事务,并对它们进行编码。另外设置了一些不匹配策略的自定义事务测试MBC的有效性。表2显示了输入各组事务对应的DML语句获取执行的时间,其中“开启MBC”表示事务的执行需要经过强制行为控制验证,“关闭MBC”表示事务的执行不受强制行为控制约束。 表2 性能和有效性测试实验 续表2 测试结果显示了算法的性能和有效性两个方面。在行为控制策略数目较少的情况下,MBC对事务的运行性能影响差别均为数百毫秒,可见该影响与数据量的大小无关。 下面根据各事务的特性对算法的有效性进行分析: (1) 如果事务完全匹配MBP,则它可以执行,如表2的前五条事务所示。 (2) 自定义事务1到事务4分别对应单条的INSERT、DELETE、UPDATE和SELECT语句,由于5条MBP的长度都不等于1,事务匹配失败。 (3) 自定义事务5把New-Order事务的第4条语句和第5条语句的执行顺序进行了交换,这两条语句都是Insert,区别是前者向orders表执行插入操作,后者向new_orders表执行插入操作,由于被操作的客体不同,事务匹配失败。 (4) 自定义事务6把Payment事务的最后一条语句删除,该语句是向history表中插入了历史的支付信息。删除后事务的长度为9,与New-Order事务对应的MBP长度一致,但内部的操作行为不匹配,事务匹配失败。 (5) 自定义事务7在Order-Status事务的第3和第4条语句之间插入了一条SELECT语句,由于其长度不满足任何一条MBP,事务匹配失败。 (6) 自定义事务8删除了Delivery事务中第5条语句中对ol_w_id字段的选择操作,即在Where子句中去掉“AND ol_w_id=:w_id”,由于该操作是必须出现的,事务匹配失败。 综上所述,算法保证了事务的可信性,内部人员对事务的任何细小篡改如增减执行语句、交换执行顺序等都会导致事务匹配失败,其结果是无法执行。 本实验在MySQL中设置了一个后门用户injector,它具有修改元数据的权限。首先TDCB创建了上一个实验中指定的5个MBP,并下发到MySQL中;然后injector用户把Delivery事务修改成自定义事务8的形式;最后运行自定义事务8,观察是否能够执行。 实验结果显示,由于该MBP受到了非法篡改,其摘要值与元数据中保存的摘要值不相等,因此即使自定义事务8匹配被修改后的MBP,它仍然被拒绝执行。此时,如果TDCB重新执行下发MBP的操作,便可恢复到修改前的状态,保证正常事务的执行。 本文提出了一种可信计算环境下的数据库强制行为控制模型,能够阻止不可信事务的执行,并检测后门用户对控制策略的非法修改。尽管该模型解决了SQL注入和数据库内部用户权限滥用等问题,它仍然具有一些不足之处,主要表现在以下几个方面: (1) 只支持基础性的DML操作,不支持嵌套查询,也不支持存储过程、触发器内部的DML调用。 (2) 缺乏对逻辑操作(AND、OR和NOT)的约束,使得评判事务“可信”的标准未达到更高程度。 (3) 没有对并发事务的执行过程进行约束。 未来的工作将进一步完善模型,使其能够具备更高的可用性、通用性和安全性。2.2 基于可信计算的行为策略度量方案
3 实 验
3.1 MBC性能和可靠性测试实验
3.2 MBP完整性度量实验
4 结 语