韓 婷,董 默,宋 欣,劉 暢
(牡丹江醫(yī)學(xué)院,黑龍江 牡丹江 157011)
信息技術(shù)的快速發(fā)展和互聯(lián)網(wǎng)的廣泛普及,促進(jìn)了教育信息化的發(fā)展,使得越來越多的信息系統(tǒng)開始在教育的各個(gè)環(huán)節(jié)發(fā)揮重要作用。備課作為教學(xué)中的重要環(huán)節(jié),是影響學(xué)校教學(xué)質(zhì)量和學(xué)生學(xué)習(xí)效果的關(guān)鍵因素,在教學(xué)活動(dòng)中占據(jù)著十分重要的地位。信息技術(shù)的引入提高了備課效率。目前,很多學(xué)校根據(jù)自身情況設(shè)計(jì)了教師備課系統(tǒng)。教師利用該系統(tǒng)可以方便地查找備課資料,與其他教師共享教學(xué)資源,開展教學(xué)研討,達(dá)到了優(yōu)勢(shì)互補(bǔ)和集思廣益的效果。然而,備課系統(tǒng)在給教師教學(xué)帶來便利的同時(shí),其信息安全性問題也受到了教師們的廣泛關(guān)注。尤其對(duì)醫(yī)學(xué)院校來說,系統(tǒng)中存儲(chǔ)著大量醫(yī)學(xué)數(shù)據(jù)或醫(yī)學(xué)病例,一方面,醫(yī)學(xué)數(shù)據(jù)具有嚴(yán)謹(jǐn)性和重要性;另一方面,醫(yī)學(xué)病例很可能涉及患者隱私。一旦這些醫(yī)學(xué)相關(guān)數(shù)據(jù)被攻擊者惡意篡改或盜取,將給院校教學(xué)和患者隱私帶來嚴(yán)重影響[1]。信息的存儲(chǔ)安全是提高系統(tǒng)安全性的重要環(huán)節(jié)。MySQL數(shù)據(jù)庫是很多中小型系統(tǒng)平臺(tái)常用的后臺(tái)數(shù)據(jù)庫,也是教師備課系統(tǒng)常用的數(shù)據(jù)庫類型之一。但是MySQL數(shù)據(jù)庫在使用過程中,各種攻擊手段也蜂擁而至。據(jù)烏云漏洞平臺(tái)統(tǒng)計(jì),騰訊、中關(guān)村在線、鏈家等著名平臺(tái)近年來均受到不同程度的SQL注入攻擊,造成了一定影響,可見針對(duì)MySQL數(shù)據(jù)庫最主要的就是對(duì)SQL注入攻擊進(jìn)行防御。本文開展醫(yī)學(xué)院校教師備課系統(tǒng)的信息安全性研究,分析提高系統(tǒng)信息安全的有效措施,重點(diǎn)討論如何提高系統(tǒng)數(shù)據(jù)庫的安全性,尤其是SQL注入攻擊的防御方法,研究成果可為同類型數(shù)據(jù)存儲(chǔ)方案的設(shè)計(jì)提供參考,具有重要的現(xiàn)實(shí)意義和研究?jī)r(jià)值。
為了提高系統(tǒng)的安全性,需要考慮數(shù)據(jù)的安全存儲(chǔ)問題。因此,在設(shè)計(jì)醫(yī)學(xué)院教師備課系統(tǒng)時(shí),為保證信息安全存儲(chǔ),主要進(jìn)行了如下設(shè)計(jì)。
數(shù)據(jù)加密是信息安全存儲(chǔ)常用且有效的方式之一。加密數(shù)據(jù)時(shí),需要綜合考慮數(shù)據(jù)內(nèi)容和用戶的使用需求,不同的數(shù)據(jù)內(nèi)容需要采用不同的加密方式。若數(shù)據(jù)內(nèi)容需要對(duì)用戶明文顯示,而數(shù)據(jù)在存儲(chǔ)時(shí)需要以密文的形式進(jìn)行存儲(chǔ),則采用AES加密方式進(jìn)行加密。對(duì)登錄口令等極為敏感關(guān)鍵的信息,無論對(duì)用戶個(gè)人還是對(duì)其他用戶都應(yīng)當(dāng)不以明文顯示。即使用戶本人登錄自己的賬戶也應(yīng)當(dāng)無權(quán)查看當(dāng)前的登錄口令,僅能夠通過輸入正確口令后對(duì)其進(jìn)行修改或重置。這類數(shù)據(jù)可采用MD5加密方式進(jìn)行加密[2]。此外,部分?jǐn)?shù)據(jù)中的內(nèi)容在存儲(chǔ)后需要管理員利用數(shù)據(jù)的部分信息對(duì)其進(jìn)行管理,如統(tǒng)計(jì)檢索等。這些數(shù)據(jù)對(duì)用戶來說需要全部或部分顯示,而對(duì)其他用戶來說不能完全以明文形式顯示,則需要對(duì)這些數(shù)據(jù)的部分內(nèi)容進(jìn)行加密,此時(shí)采用隱藏處理,即對(duì)每組數(shù)據(jù)中的部分字段或部分內(nèi)容進(jìn)行加密或隱藏,使其僅有部分內(nèi)容以明文形式顯示。
控制存儲(chǔ)數(shù)據(jù)的訪問權(quán)限也是保障數(shù)據(jù)信息安全的重要措施之一。目前,較為常用的數(shù)據(jù)訪問控制方法包括用戶身份識(shí)別技術(shù)和訪問權(quán)限控制技術(shù)。其中,用戶身份識(shí)別技術(shù)主要通過口令驗(yàn)證、通行驗(yàn)證以及特征驗(yàn)證等技術(shù)來確定登錄用戶身份是否合法。訪問權(quán)限控制技術(shù)主要是對(duì)數(shù)據(jù)的操作行為進(jìn)行限制,如對(duì)保密性較高的數(shù)據(jù),其訪問權(quán)限控制可到具體的單個(gè)指定用戶等??紤]到實(shí)際應(yīng)用情況,本文的備課系統(tǒng)在用戶身份識(shí)別方面采用口令驗(yàn)證的方法;在數(shù)據(jù)訪問控制方面,通過設(shè)定用戶的類別并賦給相應(yīng)的權(quán)限來控制訪問權(quán)限;在口令驗(yàn)證方面,設(shè)置有效的登錄口令。簡(jiǎn)單的登錄口令極易成為黑客攻擊的突破口,導(dǎo)致數(shù)據(jù)信息泄露。為此,本備課系統(tǒng)以大小寫字母和特殊符號(hào)構(gòu)成登錄口令,同時(shí)要求數(shù)據(jù)庫管理員定期更改登錄口令。當(dāng)普通用戶注銷賬戶時(shí),管理員要收回其賬戶權(quán)限,而對(duì)新增加的用戶分配新的口令和密鑰。
在數(shù)據(jù)訪問控制方面,賦予不同用戶不同的權(quán)限。醫(yī)學(xué)院教師備課系統(tǒng)的用戶設(shè)計(jì)為數(shù)據(jù)庫超級(jí)管理員(user_su)、普通管理員(user_ad)和教師用戶(user_ord)3類。其中,數(shù)據(jù)庫超級(jí)管理員具有最高的數(shù)據(jù)庫操作權(quán)限,為其授予權(quán)限的語句為grant all on*.* to user_su@’localhost’;普通管理員的權(quán)限略小,僅能夠執(zhí)行建表和修改表等基本操作,為其授予權(quán)限的語句為grant select,insert temporary tables,index show view on ptlat.* to user ad@’localhost’;教師用戶是數(shù)量最多的用戶類別,具有的權(quán)限范圍更小,為其授予權(quán)限的語句為 grantselect,update,insert on ptplat.* to user_ord@’localhost’。不同類別的用戶僅能夠在其允許的權(quán)限范圍內(nèi)對(duì)數(shù)據(jù)庫進(jìn)行操作,沒有其他操作權(quán)限。
為了避免數(shù)據(jù)由于受到自然災(zāi)害或極端天氣等非人力因素影響,導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰或數(shù)據(jù)丟失現(xiàn)象的發(fā)生,需要定期備份數(shù)據(jù)。備份時(shí)通常將數(shù)據(jù)備份到不同物理位置的不同機(jī)器上。在選擇備份策略時(shí),應(yīng)當(dāng)根據(jù)完全、增量以及差異等備份特點(diǎn),以及系統(tǒng)的數(shù)據(jù)量、所需備份時(shí)間、數(shù)據(jù)恢復(fù)時(shí)間要求等綜合考慮實(shí)施組合設(shè)置,既可以節(jié)省存儲(chǔ)資源,還可以避免數(shù)據(jù)恢復(fù)時(shí)質(zhì)量下降。本文設(shè)計(jì)的系統(tǒng)數(shù)據(jù)設(shè)置為每天備份一次所有數(shù)據(jù),通過在服務(wù)器端設(shè)置定時(shí)的SQL腳本,將SQL語句導(dǎo)出到bak_my.sql。
數(shù)據(jù)庫日志中通常會(huì)記錄對(duì)數(shù)據(jù)庫執(zhí)行的一些修改操作。對(duì)MySQL數(shù)據(jù)庫而言,當(dāng)對(duì)MySQL進(jìn)行操作時(shí),它的二進(jìn)制日志會(huì)利用DDL和DML兩種語言對(duì)操作行為進(jìn)行記錄,并存放到binlog日志文件中。一旦發(fā)生數(shù)據(jù)丟失或需要回滾到指定時(shí)間的數(shù)據(jù),可以利用該日志實(shí)現(xiàn)恢復(fù)[3]。在實(shí)際使用時(shí),啟動(dòng)MySQL日志功能的方式為先打開my.ini文件,再去掉語句log-bin=mysql-bin前的注釋符號(hào),重新啟動(dòng)數(shù)據(jù)庫。bin-log的數(shù)據(jù)格式通常如表1所示。
表1 bin-log基本格式
MySQL數(shù)據(jù)庫是目前中小型機(jī)構(gòu)常用的后臺(tái)數(shù)據(jù)庫,也較為廣泛地應(yīng)用于院校備課系統(tǒng)。如何防止SQL注入攻擊是信息安全技術(shù)人員不可回避的問題,也是技術(shù)含量較高的數(shù)據(jù)安全保障措施。針對(duì)MySQL數(shù)據(jù)庫最常見的攻擊方式是SQL注入攻擊[4]。SQL注入利用Web應(yīng)用的漏洞,通過拼接非法SQL語句攻擊數(shù)據(jù)庫或服務(wù)器,從而獲取或破壞數(shù)據(jù)。如果應(yīng)用程序在運(yùn)行時(shí)不對(duì)用戶輸入進(jìn)行檢測(cè)和過濾,極容易受到攻擊者的SQL注入攻擊。常見的SQL注入攻擊方式主要有重言式、集合查詢、報(bào)錯(cuò)注入、編碼替換、存儲(chǔ)過程、延時(shí)盲注、二階查詢攻擊等。由于攻擊者主要通過拼接違法的字符串來發(fā)起SQL注入攻擊,因此目前SQL注入攻擊防御方法大多通過對(duì)字符串進(jìn)行匹配來實(shí)現(xiàn)。目前較為流行的字符串匹配算法主要有Aho-Corasick算法(簡(jiǎn)稱AC算法)和Wu-Manber算法(簡(jiǎn)稱WM算法)。AC算法在實(shí)現(xiàn)時(shí)主要包括預(yù)處理和匹配兩個(gè)階段,其中預(yù)處理階段主要生成跳轉(zhuǎn)、失敗和輸出三個(gè)函數(shù),跳轉(zhuǎn)函數(shù)根據(jù)初始狀態(tài)將每個(gè)讀入模式串中的字符構(gòu)建狀態(tài)轉(zhuǎn)移;失敗函數(shù)用來確定下一個(gè)狀態(tài);輸出函數(shù)用于輸出某條路徑上發(fā)現(xiàn)的匹配模式。WM算法在預(yù)處理階段生成shift、hash和prefix三個(gè)函數(shù),分別為后綴跳轉(zhuǎn)表、索引表和前綴跳轉(zhuǎn)表。經(jīng)實(shí)驗(yàn)比較,在相同計(jì)算配置下,WM算法執(zhí)行時(shí)間遠(yuǎn)小于AC算法,即WM算法的效率較高。本文擬采用的基于模式匹配的SQL注入防御方法是在上述兩種算法的基礎(chǔ)上改進(jìn)而來,下面將詳細(xì)討論如何構(gòu)建有效的SQL注入攻擊防御模型。
設(shè)計(jì)有效的SQL注入防御模型是避免數(shù)據(jù)庫系統(tǒng)受到SQL注入攻擊的有效手段。典型的SQL注入防御模型通常是基于模式匹配對(duì)SQL注入攻擊進(jìn)行防御?;谀J狡ヅ涞腟QL注入防御模型通常包括靜態(tài)階段和動(dòng)態(tài)階段兩個(gè)階段。其中,靜態(tài)階段的處理過程是先利用靜態(tài)匹配算法處理SQL語句,然后將靜態(tài)匹配算法生成的新的SQL語句與事先存儲(chǔ)的惡意模式進(jìn)行匹配。若匹配成功,則認(rèn)為該SQL語句為惡意語句,對(duì)其采用拒絕處理;若匹配結(jié)果顯示超過閾值,則進(jìn)入動(dòng)態(tài)匹配階段,并采用動(dòng)態(tài)方式處理該SQL語句。
動(dòng)態(tài)階段的處理主要由人工操作,將來自靜態(tài)處理階段超過閾值報(bào)警的SQL語句提交給專業(yè)的數(shù)據(jù)庫管理人員。管理人員根據(jù)專業(yè)知識(shí)對(duì)該語句的數(shù)據(jù)進(jìn)行判定,如果認(rèn)為該語句是惡意的,則將新的模式添加到惡意模式列表,用于下一階段的靜態(tài)階段處理使用。上述基于模式匹配的SQL注入防御模型的基本處理流程,如圖1所示。從上述介紹可知,基于模式匹配的SQL注入防御模型在實(shí)際應(yīng)用時(shí)可能存在以下缺陷:一是針對(duì)并發(fā)量較高的應(yīng)用程序,每次交互均進(jìn)行模式匹配則可能導(dǎo)致較大的時(shí)間開銷;二是模式匹配中通常是匹配由特殊符號(hào)、表名或字段名構(gòu)成的模式,模式列表較大,可能會(huì)降低匹配效率;三是實(shí)際中SQL注入攻擊遠(yuǎn)遠(yuǎn)小于正常的SQL查詢,對(duì)所有的SQL均進(jìn)行模式匹配可能增加正常查詢的響應(yīng)時(shí)間。為了解決這些問題,本文在應(yīng)用基于模式匹配的SQL注入防御模型時(shí),將傳統(tǒng)的SQL模式列表庫在拆分和移除屬性值的基礎(chǔ)上,根據(jù)語句的特征將其進(jìn)一步整合,縮減模式列表規(guī)模。同時(shí),將良性匹配模式列表由SQL語句更改為MD5串,將惡意匹配中的字符串替換為一種語法結(jié)構(gòu),且將AC算法改為WM算法。良性匹配模式用來對(duì)良性SQL語句進(jìn)行匹配,若匹配失敗再交由惡意匹配模式進(jìn)行匹配。
圖1 基于模式匹配的SQL注入防御模型基本流程
在數(shù)據(jù)庫系統(tǒng)中,整型參數(shù)通常作為數(shù)據(jù)庫的關(guān)鍵字段或標(biāo)識(shí)字段使用,往往作為條件查詢語句where中的條件使用。目前,常見的整型參數(shù)注入攻擊主要有select域值注入攻擊、pos隱藏域注入攻擊和get明文顯示導(dǎo)致的注入攻擊3類。若整型參數(shù)以明文方式顯示,容易發(fā)生SQL注入攻擊。攻擊者可以通過窮舉的方式獲得整型參數(shù)的管理數(shù)據(jù),或者利用各種SQL注入語句開展攻擊。傳統(tǒng)應(yīng)對(duì)攻擊手段的方式通常是先對(duì)收到的參數(shù)類型進(jìn)行轉(zhuǎn)換,通過考察轉(zhuǎn)換后的參數(shù)權(quán)限與用戶權(quán)限是否匹配來決定是否進(jìn)行下一步的數(shù)據(jù)展示。這種方式能在一定程度上緩解攻擊,但是其依賴性較強(qiáng),同時(shí)對(duì)不同類型的參數(shù)都需要事先設(shè)置對(duì)應(yīng)的權(quán)限信息,導(dǎo)致權(quán)限控制復(fù)雜度較高,影響數(shù)據(jù)表的設(shè)計(jì)效率,且很難合理設(shè)置每個(gè)參數(shù)的權(quán)限[5]。為此,本文采用加解密的方式對(duì)整型參數(shù)SQL注入攻擊進(jìn)行防御??紤]到在系統(tǒng)前端可見的字符串往往都是加密后的字符串,因此該字符串在后端進(jìn)行數(shù)據(jù)交互時(shí)先進(jìn)行解密,待解密完成后決定是否由數(shù)據(jù)庫正常執(zhí)行[6]。在加解密時(shí)主要采用對(duì)稱加密算法,并綜合考慮算法破解難度和算法的執(zhí)行效率。本文選用AES加密算法進(jìn)行加密。
為了防止攻擊者偽造加密字符串,本文增加了校驗(yàn)位,即在采用AES加密算法對(duì)數(shù)據(jù)進(jìn)行加密前,通過在數(shù)據(jù)中增加多個(gè)校驗(yàn)位的方式對(duì)數(shù)據(jù)進(jìn)行重構(gòu)。解密時(shí),先比對(duì)校驗(yàn)位的值是否為預(yù)期值,從而確定該字符串是否被攻擊者偽造。
具體而言,在利用AES進(jìn)行加密前,將待加密數(shù)據(jù)進(jìn)行重構(gòu)并按照指定的存儲(chǔ)方式進(jìn)行編碼。重構(gòu)主要是在待加密數(shù)據(jù)中增加多個(gè)特殊位,將原待加密數(shù)據(jù)重構(gòu)為由待加密數(shù)據(jù)、校驗(yàn)位1、0、0、待加密數(shù)據(jù)、校驗(yàn)位2、尾0等7個(gè)部分構(gòu)成的字符串。其中,兩個(gè)0校驗(yàn)位、兩個(gè)特殊值校驗(yàn)位以及尾0校驗(yàn)位均勻分布在新形成的字符串中,校驗(yàn)位1和校驗(yàn)位2為自定義校驗(yàn)位,由待加密字符對(duì)指定值求余得到,可以避免出現(xiàn)相同校驗(yàn)值。在解密時(shí)可以通過比較這些校驗(yàn)位防止非法輸入。在存儲(chǔ)方式方面,重構(gòu)后的第一部分待加密數(shù)據(jù)采用32bit大端序方式存儲(chǔ),第二部分待加密數(shù)據(jù)采用32bit小端序方式存儲(chǔ),校驗(yàn)位1為16bit大端序存儲(chǔ),校驗(yàn)位2為16bit小端序存儲(chǔ),0校驗(yàn)位和尾值校驗(yàn)采用無符號(hào)字符方式存儲(chǔ)。
利用AES進(jìn)行解密時(shí),首先利用AES對(duì)加密數(shù)據(jù)進(jìn)行解密得到字符串,將字符串解包為7個(gè)部分,如果解包后的各個(gè)校驗(yàn)位的值不是預(yù)期值,則表明該數(shù)據(jù)不是上述加密函數(shù)加密的字符串,立即停止對(duì)數(shù)據(jù)庫的后續(xù)操作,否則將解密后得到的整數(shù)傳遞給應(yīng)用程序。
醫(yī)學(xué)院教師備課系統(tǒng)中存儲(chǔ)了較多的敏感數(shù)據(jù),且數(shù)據(jù)不容隨意修改或刪除,因此對(duì)信息安全提出了較高的要求。本文對(duì)如何提高系統(tǒng)的信息安全性進(jìn)行了研究和分析,從采用數(shù)據(jù)加密存儲(chǔ)技術(shù)、數(shù)據(jù)訪問權(quán)限控制、數(shù)據(jù)備份、數(shù)據(jù)庫日志使用以及數(shù)據(jù)庫防SQL注入攻擊等方面對(duì)信息安全存儲(chǔ)進(jìn)行詳細(xì)設(shè)計(jì)。其中,重點(diǎn)對(duì)如何防御SQL注入攻擊開展了研究,給出了基于模式匹配的SQL注入防御模型,該模型對(duì)正常的系統(tǒng)時(shí)延影響較小,能夠解決傳統(tǒng)防御模型在效率和安全方面不易平衡的問題,同時(shí)利用對(duì)稱加密算法,給出了整型參數(shù)的SQL注入防御的安全性設(shè)計(jì),為整型參數(shù)SQL注入防御提供了一種新的思路。盡管本文給出了系統(tǒng)數(shù)據(jù)信息安全防護(hù)方法,且目前該領(lǐng)域很多學(xué)者也取得了一些優(yōu)秀成果,但是隨著用戶需求的多樣化和網(wǎng)絡(luò)技術(shù)、數(shù)據(jù)庫技術(shù)的進(jìn)一步發(fā)展,未來必然會(huì)出現(xiàn)更多新型的信息安全威脅方法或攻擊手段,因此需要投入更多的人力和物力開展相關(guān)的研究。