李 煒,黃 倩
(1.武漢大學(xué)人民醫(yī)院 信息中心,湖北 武漢 430060;2.武昌職業(yè)學(xué)院 招生就業(yè)與校企合作處,湖北 武漢 430202)
現(xiàn)代社會計算機技術(shù)及網(wǎng)絡(luò)技術(shù)的發(fā)展飛速,伴隨著這些技術(shù)的發(fā)展,數(shù)據(jù)庫也在各行各業(yè)中得到了廣泛,幾乎所有的企事業(yè)單位,尤其是醫(yī)院等都把自己的數(shù)據(jù)庫連接到Internet上。但由這些技術(shù)而帶來的數(shù)據(jù)庫安全問題卻是不容忽視的,如對敏感數(shù)據(jù)的篡改和防竊取的問題等[1]。所以當(dāng)前網(wǎng)絡(luò)對安全防護措施的要求越來越高,傳統(tǒng)的防火墻已達不到某些領(lǐng)域較高的要求,對于一些入侵如SQL注入、未經(jīng)授權(quán)的訪問、跨腳本攻擊等這些入侵都有些力不從心,所以后臺數(shù)據(jù)庫應(yīng)用級的保護也變得非常迫切。
當(dāng)代的醫(yī)療系統(tǒng)基本上都建立用來存儲和管理各種業(yè)務(wù)數(shù)據(jù)的核心數(shù)據(jù)庫。數(shù)據(jù)庫的建立從根本上改變著醫(yī)療體系運行的規(guī)則,保存著幾乎所有病人病例門診資料等,這些數(shù)據(jù)相比其他行業(yè)系統(tǒng)更加敏感和隱私,一旦被惡意攻擊,將會造成無法彌補的損失,對于大多數(shù)的合法用戶,從攻擊者的角度看,直接損害到數(shù)據(jù)庫比探索網(wǎng)絡(luò)中的數(shù)據(jù)所帶來的好處,以帶來多大的興趣[2-3]。從數(shù)據(jù)庫中,我們使用了通用的初始模型的原則,建立一個數(shù)據(jù)庫的安全測試進行了討論。在文中,基于用戶行為和SQL語句的數(shù)據(jù)庫安全檢測策略相結(jié)合的規(guī)則為基礎(chǔ)的結(jié)構(gòu)。
基于用戶行為規(guī)則的安全檢測是在數(shù)據(jù)庫用戶行為模型的基礎(chǔ)上,利用關(guān)聯(lián)分析的方法生成用戶行為規(guī)則,結(jié)合異常檢測的思想對數(shù)據(jù)庫用戶行為進行安全檢測的一種方法。
分析適用于醫(yī)療信息數(shù)據(jù)庫用戶行為,需要收集用戶對數(shù)據(jù)庫的操作信息[4]。用戶登錄數(shù)據(jù)庫的起始時間、用戶執(zhí)行操作的時間、客戶端IP地址和端口號、登錄數(shù)據(jù)庫服務(wù)器IP地址和端口號、用戶向數(shù)據(jù)庫提交的SQL語句、數(shù)據(jù)庫登錄用戶名等信息從不同方面描述了數(shù)據(jù)庫用戶的行為。
每一條SQL語句由命令動詞、子句、和表達式等構(gòu)成。其中,命令動詞規(guī)定了 SQL語句的操作類型,如SELECT、INSERT、UPDATE、DELETE;表達式是SQL語句中的一些值,可能是變量、常量、查詢字段等,其中所涉及的數(shù)據(jù)庫關(guān)系表和查詢字段等規(guī)定了SQL語句的操作目標(biāo)。
一個用戶行為向量組對應(yīng)一條SQL語句,其由若干用戶行為向量組成,用來表示此SQL語句的操作行為。每個用戶行為向量包含用戶名、操作類型和操作目標(biāo)3種類型元素,如下所示。
1:<用戶名A,操作類型1,操作目標(biāo)1>
2:<用戶名A,操作類型2,操作目標(biāo)2>
3:<用戶名B,操作類型3,操作目標(biāo)3>
4:<用戶名B,操作類型4,操作目標(biāo)4>
5;<用戶名B,操作類型5,操作目標(biāo)5>....
n;<用戶名Z,操作類型n,操作目標(biāo)n>
由向量1、2、3組成的用戶行為向量組表示一條SQL語句,向量4、5表示另一條SQL語句。用戶名是指提交SQL語句的用戶,同一條SQL語句的用戶名是相同的;操作類型是指用戶SQL語句的操作類型,為SELECT,INSERT,UPDATE,DELETE,CREATETABLE中之一;操作目標(biāo)是指用戶每個操作類型所對應(yīng)操作的表或列。每個用戶行為向量組的向量個數(shù)由所對應(yīng)的SQL語句決定[5],如“用戶名A”就有兩個用戶行為向量。“用戶名B”有3個用戶行為向量。
一條SQL語句轉(zhuǎn)化為一個用戶行為向量組有如下原則:
1)一值性:行為向量中的元素都是單值;
2)對應(yīng)性:用戶名、操作類型和操作目標(biāo)之間必須是一一對應(yīng)的;
3)重復(fù)表達性:一條SQL語句中可能包含多種操作類型,無論操作類型是否相同都必須用新的向量表示。
用戶行為向量中的元素類型還可不斷擴展,以增加用戶行為向量組對SQL語句的描述精度,增加向量維度雖可提高對SQL語句的描述精度,但也會大量增加用戶行為向量的個數(shù),從而增加了系統(tǒng)處理的數(shù)據(jù)量[6]。
使用用戶行為向量組表示SQL語句的操作行為,不僅分析了 SQL語句的操作類型與操作目標(biāo)。同時,也能提取操作條件或嵌套查詢中的操作內(nèi)容,可較全面的描述數(shù)據(jù)庫用戶的操作行為,從而為下文對戶行為的分析奠定了模型基礎(chǔ)。
數(shù)據(jù)庫用戶行為規(guī)則是用戶在長期操作數(shù)據(jù)庫的過程中,從大量用戶的操作記錄中挖掘出來的、能典型代表用戶對數(shù)據(jù)庫操作行為的一種表示形式,其含義可表達為用戶經(jīng)常操作的數(shù)據(jù)庫對象或用戶經(jīng)常使用的操作類型。根據(jù)上節(jié)的分析可發(fā)現(xiàn)用戶行為向量元素之間有著較強的相關(guān)性。
上述用戶行為的相關(guān)性可較好的用關(guān)聯(lián)規(guī)則形式表示:
用戶名U操作類型=>操作目標(biāo)
用戶名U操作目標(biāo)=>操作類型
用戶名=>操作目標(biāo)U操作類型
因此,本文使用關(guān)聯(lián)規(guī)則算法從用戶行為數(shù)據(jù)中生成數(shù)據(jù)庫用戶行為規(guī)則。
將用戶歷史操作記錄中的操作語句均轉(zhuǎn)化為用戶行為向量組后,基于用戶行為規(guī)則的安全檢測采用關(guān)聯(lián)規(guī)則算法處理用戶行為向量,將每個向量作為一條事務(wù)項。為提高關(guān)聯(lián)規(guī)則算法在系統(tǒng)中的執(zhí)行效率,減少算法甄別數(shù)據(jù)的過程,需數(shù)值化處理每個向量的元素[7]。
向量數(shù)值化前需統(tǒng)計這段時間內(nèi)所有不同的用戶名和操作目標(biāo)的數(shù)目,然后對每個元素做數(shù)值映射,避免出現(xiàn)向量元素的數(shù)值重疊。例如,對于用戶行為向量“
先規(guī)定操作類型的映射為(SELECT=1,CREATETABLE=2,DELETE=3,INSERT=4,UPDATE=5,ALTERTABLE=6,DR0PTABLE=7);其次根據(jù)不同用戶名的數(shù)量將用戶名映射為(WANGH0NG=8,SC0TT=9);再次根據(jù)操作類型和用戶名的數(shù)值映射結(jié)果,將操作目標(biāo)映射為 (DUAL=10,PRIVS=11,0PTI0N=12,EMP=13,DEPT=14),如此即完成了向量的數(shù)值化處理,如表1所示。
表1 數(shù)值化用戶行為向量Tab.1 Num erical user behavior vector
用關(guān)聯(lián)規(guī)則算法生成數(shù)據(jù)庫用戶行為規(guī)則,要根據(jù)用戶行為數(shù)據(jù)的特點和用戶行為規(guī)則的意義選擇合適的相關(guān)性度量標(biāo)準(zhǔn)[8]。
本文選用最大置信度作為用戶行為規(guī)則的度量標(biāo)準(zhǔn),總結(jié)理由如下:
1)數(shù)據(jù)庫用戶行為規(guī)則描述的是用戶的典型行為,規(guī)則前后兩項必然滿足強相關(guān)關(guān)系。最大置信度對強相關(guān)規(guī)則的識別和區(qū)分能力最強,相同條件下更容易過濾出強相關(guān)規(guī)則。
2)從實際意義上講,對規(guī)則前項和后項不平衡的情況,數(shù)據(jù)庫用戶行為規(guī)則應(yīng)當(dāng)判定是正相關(guān)的。例如,權(quán)限受限用戶A只能執(zhí)行SELECT操作,規(guī)則A=>SELECT是強相關(guān)的,而執(zhí)行SELECT操作類型的還有較多其他用戶,這就導(dǎo)致用戶A在事務(wù)集的出現(xiàn)概率和操作類型SELECT出現(xiàn)概率的不平衡。最大置信度恰好滿足數(shù)據(jù)庫用戶行為規(guī)則在以上不平衡情況下判定為正相關(guān)的要求。
3)最大置信度滿足零不變性、對稱性和正反不變性,對大量用戶行為數(shù)據(jù)有較好的適用性。
用戶正常行為規(guī)則需要從正常的歷史操作記錄中獲得,因而保證記錄內(nèi)容的安全性是規(guī)則生成的關(guān)鍵。但需保證歷史操作中的每一條記錄均是絕對安全的行為卻不容易實現(xiàn),即使實現(xiàn)也需大量的人工鑒別且耗費資源。為提高系統(tǒng)安全檢測的靈活性,降低系統(tǒng)運行所需的人工工作量,系統(tǒng)針對不同安全性的訓(xùn)練集提供了不同的規(guī)則生成算法。
基于用戶行為規(guī)則的安全檢測駣用了異常檢測思想。異常檢測根據(jù)用戶操作行為建立用戶正常行為規(guī)則庫,凡是不符合規(guī)則庫中用戶正常行為規(guī)則的操作行為均認定是異常操作。
基于用戶行為規(guī)則的安全檢測描述如下:
1)系統(tǒng)從用戶歷史某一段時間的操作日志中生成用戶正常行為規(guī)則,根據(jù)歷史操作日志內(nèi)容的安全性不同選擇不同的規(guī)則生成算法。
2)分析生成的用戶行為規(guī)則。當(dāng)歷史操作日志內(nèi)容是絕對安全吋,用戶典型正常行為規(guī)則庫和用戶非典型正常行為規(guī)則庫中的規(guī)則組成用戶正常行為規(guī)則庫,作為異常檢測的規(guī)則;當(dāng)歷史操作日志內(nèi)容不是絕對安全吋,只有用戶正常行為規(guī)則庫中的規(guī)則作為異常檢測規(guī)則。
3)將待檢測的用戶操作語句解析成用戶行為向量組,并將每個向量與用戶正常行為規(guī)則庫中的規(guī)則匹配。若一用戶行為量組的所有向量均匹配正常行為規(guī)則,則此條操作語句是正常行為;若一個用戶行為向量組中有一個向量不能匹配用戶正常行為規(guī)則,則說明此操作行為是異常的。
4)若檢測出的操作是正常操作,則輸出顯示;若檢測出的操作是異常操作,在顯示輸出的同時保存到系統(tǒng)自身數(shù)據(jù)庫中,之后可由安全人員進行主觀甄別,并將甄別出的正常行為轉(zhuǎn)化為正常行為規(guī)則加入到正常行為規(guī)則庫中。這樣便實現(xiàn)了規(guī)則庫的不斷更新。
使用基于最大置信度度量標(biāo)準(zhǔn)的關(guān)聯(lián)規(guī)則算法從用戶行為向量組中生成用戶行為規(guī)則,充分發(fā)揮了關(guān)聯(lián)規(guī)則發(fā)現(xiàn)數(shù)據(jù)潛在聯(lián)系的能力。但應(yīng)當(dāng)注意的是,由于用戶行為向量組只是表征了用戶SQL語句的操作行為和操作目標(biāo),并未關(guān)注語句中的條件表達式等細節(jié)信息,這就導(dǎo)致了用戶行為規(guī)則對用戶行為描述的粗糙性。
為彌補上述問題,同時提高安全檢測的正確性,本文系統(tǒng)增加從語句結(jié)構(gòu)和內(nèi)容上分析SQL語句的功能,即基于SQL語句結(jié)構(gòu)的安全檢測。
SQL語句承載著數(shù)據(jù)庫用戶行為信息的核心內(nèi)容,也是用戶操作數(shù)據(jù)庫的執(zhí)行工具。因此,數(shù)據(jù)庫違規(guī)行為與SQL語句的語句結(jié)構(gòu)有較大關(guān)系。
SQL注入就是典型的通過修改SQL語句結(jié)構(gòu)和內(nèi)容的一種違規(guī)行為,其主要表現(xiàn)形式如下:
1)條件恒真/假。惡意用戶在帶有條件子句的SQL語句中構(gòu)造條件永遠為真/假的邏輯表達式,使SQL語句的條件子句不再發(fā)揮條件選擇作用,惡意用戶就可繞過數(shù)據(jù)庫驗證或取得非權(quán)限范圍的數(shù)據(jù)內(nèi)容。例如,“SELECT SNO FROMSTUDENTSWHERE SNO>3 OR 1=1 ”語句 中“OR 1=1 ”導(dǎo)致査詢條件永遠為真,"SN0>3"的條件不再發(fā)揮作用,語句返回了額外數(shù)據(jù)。
2)SQL語句加注釋符。惡意用戶可利用注釋符“_”中斷SQL查詢語句,繞過系統(tǒng)的的安全驗證。例如,“SELECT*FROM USERS WHERE USERNAME=ADMIN AND PASSWORD=PSW"語句中加入注釋符 “_”, 語句變?yōu)椤癝ELECT*FROMUSERS WHERE USERNAME=ADMIN--ANDPASSWORD=”,這樣使得惡意用戶只需用戶名而不用密碼即可通過數(shù)據(jù)庫驗證。
3)UNION查詢攻擊。惡意用戶可在SQL語句后添加UNION SELECT查詢語句獲取非權(quán)限范圍數(shù)據(jù)。
4)附帶語句攻擊。惡意用戶可在一條SQL語句結(jié)束后通過語句結(jié)束符“;”在原有SQL語句后面構(gòu)造新的SQL語句,這樣便可額外執(zhí)行多個非法語句。例如,在正常SQL語句后添加“,DROP TABLE USERS",惡意用戶就可非法刪除數(shù)據(jù)庫中的USERS表。
5)SQL注入方式還有其他如存儲過程攻擊、注入推斷和替換編碼等,這些方式仍需利用上述提到的基本SQL注入類型。
基于SQL語句結(jié)構(gòu)的安全檢測,除了識別SQL注入這種改變SQL語句結(jié)構(gòu)內(nèi)容的惡意行為外,還能發(fā)現(xiàn)系統(tǒng)的限制級操作。例如,數(shù)據(jù)庫管理員通過系統(tǒng)設(shè)置只允許用戶進行某一類型的SQL操作,如限制用戶執(zhí)行除SELECT操作之外的任何操作。當(dāng)惡意用戶對數(shù)據(jù)庫執(zhí)行DELETE操作時,系統(tǒng)需檢測出DELETE這種限制級操作。
根據(jù)上文描述的若干SQL語句惡意行為,下面介紹基于SQL語句結(jié)構(gòu)的安全檢測原理。
系統(tǒng)解析用戶提交的SQL語句,得到語句的語法解析樹,分析識別SQL語句的各部分內(nèi)容,通過與上文中提到的已知惡意模式對比判斷是否存在惡意行為。對于限制性操作、SQL語句加注釋符、UNION查詢攻擊和附帶語句攻擊等惡意行為的檢測,只需識別語句中存在相關(guān)關(guān)鍵字或關(guān)鍵符號即可。對于條件恒真/假的檢測,還需判斷條件子句中的不同條件子式,進而判斷條件子句的邏輯值是否為恒值。
1)條件子式是指具有“operandL operator operand”形式的邏輯結(jié)構(gòu),其中operator為操作符,operandL和operandR為運算式,通常是表達式、常量、函數(shù)或子查詢。下面是幾種常見的條件子式:
2)比較條件子式,是通過“=、>、<、≠、ANY、ALL”等操作符比較兩個運算式的大小,如salary≥ALL(1400,3000);
3)范圍條件子式,是通過[NOT]BETWEEN x AND y結(jié)構(gòu)判斷條件是否在所定范圍內(nèi),如 salary BETWEEN 2000 AND 3000;
4)帶有關(guān)鍵字 EXISTS、IN、LIKE的條件子式,如 EXISTS(SELECT*FROMemployees e WHERE d.department_id=e.department_id);
條件子句分為簡單條件子句和復(fù)合條件子句。簡單條件子句只由一個條件子式構(gòu)成,復(fù)合條件子句則由多個條件子式通過AND和OR連接而成,如下所示:
NOT+條件子式
條件子式+AND+條件子式
條件子式+0R+條件子式
…條件子式+OR+條件子式+AND+條件子式…將條件子句轉(zhuǎn)換為后綴表達式的步驟如下:
1)在SQL語法解析的基礎(chǔ)上識別SQL語句條件子句中操作數(shù)和運算符,設(shè)置堆棧Z和集合C。
2)從左到右讀入以上操作數(shù)和運算符,注意子句中的列名、列名值和嵌套查詢都作為操作數(shù)。
3)若讀到的是操作數(shù),則直接加入集合C。
4)若讀到的是運算符且Z為空,將運算符加入到棧中;若讀到的是運算符且Z不為空,取出所有優(yōu)先級不小于該運算符的棧頂元素(各運算符的運算優(yōu)先順序如表2所示),然后將該運算符入棧。
表2 運算符優(yōu)先順序Tab.2 Operator precedence
5)若讀到的是左括號,將其加入到棧中;若讀到的是右括號,進行出棧操作,并將出棧的元素輸入集合C,直到彈出棧的是左括號并將其刪除。
6)最終將堆桟Z中元素輸入到集合C中,則集合C中元素構(gòu)成的表達式即為后綴表達式。
計算后綴表達式值的步驟如下:
1)設(shè)置堆棧Y,從左到右讀取集合C中后綴表達式的各元素。
2)若讀到的元素是一個操作數(shù),入棧Y。
3)若讀到的元素是個操作符,從堆棧Y中取出兩個元素并執(zhí)行這一操作符的運算,并將運算結(jié)果加入堆找Z(注意把“<”、“>"和“=”作為運算符做邏輯運算,同時注意如果出現(xiàn)運算數(shù)為據(jù)庫列名、列名值或嵌套查詢等無法計算結(jié)果的現(xiàn)象時,統(tǒng)一設(shè)置運算結(jié)果為“#”)。
4)讀取集合C完畢后從堆棧Y中彈出數(shù)值,即為后綴表達式的結(jié)果。
后綴表達式的值為1或常數(shù),說明條件句子恒為真;后綴表達式的值為0,說明條件子句恒為假;后綴表達式的值為#,說明條件子句不存在恒真/假的現(xiàn)象。
本文系統(tǒng)采用甚于SQL語句結(jié)構(gòu)的安全檢測和基于用戶行為規(guī)則的安全檢測相結(jié)合的安全檢測策略,發(fā)現(xiàn)和識別用戶對數(shù)據(jù)庫操作過程中的異常行為。其中,基于SQL語句的安全檢測從SQL語句本身的安全角度進行檢測是細顆粒度的檢測,但其只能檢測已知類型的異常操作行為基于用戶行為規(guī)則的安全檢測從用戶操作行為的角度進行檢測,是粗顆粒度的檢測,但可檢測未知的異常操作行為。
根據(jù)系統(tǒng)設(shè)計原理,目前醫(yī)療信息系統(tǒng)能檢測的用戶異常操作主要有以下3類:
1)合法用戶越權(quán)操作。指合法用戶對數(shù)據(jù)庫的操作超越了自身權(quán)限范圍,不同于自身權(quán)限的操作行為。
2)入侵者操作。指入侵者通過非法手段登錄數(shù)掘庫系統(tǒng)后對數(shù)據(jù)庫的操作行為,其操作不同于正常數(shù)據(jù)庫用戶的操作行為。
3)SQL注入攻擊。
系統(tǒng)安全檢測結(jié)果保存在數(shù)據(jù)庫安全審計日志所在的數(shù)據(jù)庫中,在原安全審計日志的基礎(chǔ)上增加操作安全性屬性,如表3所示。
表3 安全檢測結(jié)果屬性Tab.3 Attributes of security detection result
文中詳細介紹了安全審計檢測模塊和規(guī)則生成模塊的設(shè)計方法與原理。醫(yī)療信息系統(tǒng)安全檢測駣用基于用戶行為規(guī)則的安全檢測和基于SQL語句結(jié)構(gòu)的安全檢測相結(jié)合的方式?;谟脩粜袨橐?guī)則的安全檢測是在建立數(shù)據(jù)庫用戶行為模型的基礎(chǔ)上生成用戶行為規(guī)則,從而實現(xiàn)異常檢測,并考慮了訓(xùn)練集的安全性因素?;赟QL語句結(jié)構(gòu)的安全檢測是在分析SQL語法結(jié)構(gòu)的基礎(chǔ)上實現(xiàn)的,其彌補了基于用戶規(guī)則檢測顆粒度粗的缺點。隨著醫(yī)療衛(wèi)生信息事業(yè)的發(fā)展和信息安全技術(shù)手段的更新,醫(yī)療信息安全也會暴露并提出新的問題和需求。對于當(dāng)前的醫(yī)療信息安全,需要在醫(yī)療信息標(biāo)準(zhǔn)下更深入、廣泛地結(jié)合醫(yī)療流程和醫(yī)療行業(yè)的實際進行研究,且還需關(guān)注信息安全新技術(shù)的發(fā)展以便與醫(yī)療信息安全相結(jié)合,使醫(yī)療設(shè)備和醫(yī)療信息安全充分共享,以至于更好地提高醫(yī)療服務(wù)質(zhì)量。
[1]姚曄弘,張建國.基于IHE ITI-ATNA技術(shù)規(guī)范的區(qū)域醫(yī)療信息共享安全問題的解決方案[J].中國醫(yī)療器械雜志,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標(biāo)準(zhǔn)的研究與應(yīng)用[D].包頭:內(nèi)蒙古科技大學(xué),2004.
[3]張凱,呂揚生.DICOM標(biāo)準(zhǔn)及應(yīng)用[J].世界醫(yī)療機械,2001,7(5):58-61.ZHANG Kai,LV Yang-sheng.DICOMstandard and application[J]World Medical Equipment,2001,7(5):58-61.
[4]谷宇.HL7消息解析及傳輸技術(shù)的研究與實現(xiàn)[D].包頭:內(nèi)蒙古科技大學(xué),2010.
[5]邱峰,田捷,曹勇,等.PACS系統(tǒng)綜述[J].中國醫(yī)學(xué)影像技術(shù),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]高嵐.醫(yī)學(xué)信息學(xué)[M].北京:科學(xué)出版社,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.