李曄鋒 公 備 徐達文 樂嘉錦
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 結 語