蔡翔,宋賢睿,顧廣宇,張淑娟
(國(guó)網(wǎng)安徽省電力公司電力科學(xué)研究院安徽安慶230601)
基于注入式SQL的云端存儲(chǔ)安全研究
蔡翔,宋賢睿,顧廣宇,張淑娟
(國(guó)網(wǎng)安徽省電力公司電力科學(xué)研究院安徽安慶230601)
針對(duì)云端存儲(chǔ)面對(duì)的注入式SQL攻擊的問(wèn)題,本研究在深入分析注入式SQL攻擊的基礎(chǔ)上,闡述了報(bào)錯(cuò)注入式和URL編碼轉(zhuǎn)換的攻擊原理。通過(guò)構(gòu)建對(duì)稱參數(shù)明文加解密的方式,分別利用NnCcVvC編碼和指定key值的形式對(duì)存儲(chǔ)進(jìn)行加密,結(jié)合加密逆向流程完成對(duì)云端存儲(chǔ)字符串的PHP解密。整合了參數(shù)校驗(yàn)和數(shù)據(jù)過(guò)濾的操作步驟,降低了用戶訪問(wèn)云端數(shù)據(jù)庫(kù)的權(quán)限設(shè)置,通過(guò)存儲(chǔ)的加解密雙向操作為云端存儲(chǔ)提供更安全的保障。
注入式SQL;云端存儲(chǔ);加密算法;安全管理
伴隨著云計(jì)算技術(shù)的飛速發(fā)展,云端數(shù)據(jù)庫(kù)信息存儲(chǔ)安全被認(rèn)為是信息安全保證的重要屏障,但云端數(shù)據(jù)庫(kù)的安全性一直在學(xué)術(shù)界引起了廣泛的關(guān)注[1-3]。傳統(tǒng)的云存儲(chǔ)防御和檢測(cè)方法存在較高的安全隱患,數(shù)據(jù)庫(kù)攻擊者可通過(guò)重言式[4]和延時(shí)盲注[5]的方式對(duì)云端數(shù)據(jù)庫(kù)的信息進(jìn)行竊取。與此同時(shí),數(shù)據(jù)信息的管理者通過(guò)檢測(cè)字符串表達(dá)式的形式對(duì)云端存儲(chǔ)漏洞進(jìn)行排查[6],并結(jié)合關(guān)鍵詞ASCII編碼將不合法參數(shù)在存儲(chǔ)過(guò)程中進(jìn)行進(jìn)制替換[7],從而檢測(cè)了數(shù)據(jù)庫(kù)攻擊者的非法訪問(wèn)權(quán)限。針對(duì)云端存儲(chǔ)的安全性問(wèn)題,本研究在梳理注入式SQL攻擊方式的基礎(chǔ)上,詳細(xì)剖析了報(bào)錯(cuò)注入和編碼轉(zhuǎn)換的攻擊方式,并介紹了應(yīng)對(duì)注入式SQL攻擊的程序調(diào)用防御方法。在融合眾多防御方法優(yōu)點(diǎn)的理論支撐下,給出了一種對(duì)稱參數(shù)明文加解密的云端存儲(chǔ)安全保障編碼方案,該方案利用參數(shù)字符串加密的信息進(jìn)行云端存儲(chǔ)的加密,同時(shí),依據(jù)逆向加密的流程給出了云端數(shù)據(jù)庫(kù)抽取數(shù)據(jù)的參數(shù)解密,雙向的數(shù)據(jù)信息加解密為云端存儲(chǔ)提供了更高的安全保障。
注入式SQL通過(guò)構(gòu)建非法SQL語(yǔ)句來(lái)攻擊達(dá)到云端數(shù)據(jù)庫(kù)的目的[8]。在云端數(shù)據(jù)庫(kù)未設(shè)置檢驗(yàn)和安全過(guò)濾時(shí),信息安全攻擊方通過(guò)搭建非法字符串的形式對(duì)云端資源進(jìn)行抽取,并結(jié)合設(shè)定程序有目的的攻擊用戶數(shù)據(jù)信息[9]。本文以云端數(shù)據(jù)存儲(chǔ)為研究對(duì)象,詳細(xì)闡述報(bào)錯(cuò)注入[10]和編碼轉(zhuǎn)換[11]兩種注入式SQL攻擊。
1)報(bào)錯(cuò)注入
利用EXP函數(shù)對(duì)云端數(shù)據(jù)庫(kù)進(jìn)行程序調(diào)用,攻擊者有目的地對(duì)存儲(chǔ)數(shù)據(jù)實(shí)現(xiàn)溢出效應(yīng),在眾多數(shù)據(jù)中抽取對(duì)攻擊者有利的數(shù)據(jù)信息,最終使得云端數(shù)據(jù)庫(kù)出現(xiàn)報(bào)錯(cuò)信息提示。即頁(yè)面顯示結(jié)果如下:
Select(favorableinformation)FROM(Clouddatabase)WHERE SQL num=’1’EXP(Select(Key Information)FROM(Database))AND 1=’1’Error:DOUBLE value is out of ranks in EXP(select(User name@server address)from(Terminal Server))
由以上的基于EXP函數(shù)的報(bào)錯(cuò)注入錯(cuò)誤信息提示可見(jiàn),’User name@server address’給出了云端存儲(chǔ)的用戶名和服務(wù)器地址的關(guān)鍵信息。
2)編碼轉(zhuǎn)換
與報(bào)錯(cuò)注入的形式不同,編碼轉(zhuǎn)換利用URL地址解碼的方式對(duì)云端存儲(chǔ)數(shù)據(jù)信息集合調(diào)用進(jìn)行攻擊。即網(wǎng)址的顯示結(jié)果如下:
http://serveraddress/clouddatabase/main/search.php tag=favorableinformation%15%122%2c+2%4e2+all+select+user+%3ddatabase%+%15%3440%+4c%36%37%4d
1)用戶輸入檢測(cè)
用戶輸入檢測(cè)分別注入字符檢測(cè)和輸入?yún)?shù)檢測(cè)兩種方法[12]。其中,注入字符檢測(cè)利用正則方式和更換方式將注入式SQL字符串關(guān)鍵詞進(jìn)行替換;輸入?yún)?shù)檢測(cè)是利用數(shù)據(jù)信息的整數(shù)參數(shù)進(jìn)行強(qiáng)制性的轉(zhuǎn)換為整型,其他類型的參數(shù)也同樣進(jìn)行使用前的轉(zhuǎn)化,整體上避免了整型參數(shù)后添加SQL語(yǔ)句。
2)數(shù)據(jù)存儲(chǔ)的加密
通過(guò)對(duì)重要數(shù)據(jù)信息進(jìn)行針對(duì)性的加密存儲(chǔ)以降低信息外泄的損失,例如銀行卡號(hào)、用戶帳號(hào)和身份驗(yàn)證信息等在云端存儲(chǔ)數(shù)據(jù)庫(kù)中以加密式的非明文形式進(jìn)行存儲(chǔ),有效的降低了數(shù)據(jù)庫(kù)攻擊者在竊取重要信息后的字符串識(shí)別能力。
3)參數(shù)優(yōu)化查詢
參數(shù)優(yōu)化查詢則是依據(jù)用戶輸入數(shù)據(jù)信息后在云端存儲(chǔ)中設(shè)定的參數(shù)遍歷查詢[13],在受到數(shù)據(jù)庫(kù)攻擊時(shí),攻擊者并不能依據(jù)參數(shù)的設(shè)置去破解分析參數(shù)字符串的真正含義,通過(guò)這種方式的構(gòu)建避免了數(shù)據(jù)庫(kù)攻擊者利用SQL語(yǔ)句調(diào)用執(zhí)行和破譯數(shù)據(jù)信息,進(jìn)而確保了云端數(shù)據(jù)庫(kù)的安全性。
4)服務(wù)器權(quán)限設(shè)置
通過(guò)終端服務(wù)器和云端數(shù)據(jù)庫(kù)服務(wù)器的配置設(shè)定完成對(duì)服務(wù)器權(quán)限設(shè)置,在權(quán)限設(shè)置過(guò)程中依據(jù)用戶存儲(chǔ)信息重要性權(quán)限的最小值進(jìn)行設(shè)置[14],即終端管理的Root權(quán)限分配給對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)用戶,同時(shí),在云端數(shù)據(jù)庫(kù)存儲(chǔ)的編碼權(quán)限進(jìn)行集中管理,數(shù)據(jù)庫(kù)的訪問(wèn)需要通過(guò)復(fù)雜的密碼進(jìn)行驗(yàn)證。
對(duì)于云端數(shù)據(jù)庫(kù)在存儲(chǔ)數(shù)據(jù)信息時(shí),通過(guò)對(duì)稱參數(shù)明文加密和重構(gòu)的方式利用指定編碼(NnCcVvC)對(duì)數(shù)據(jù)存儲(chǔ)前進(jìn)行加密編碼[15],參數(shù)編碼和重構(gòu)方式如圖1所示。

圖1 參數(shù)編碼和重構(gòu)
在數(shù)據(jù)信息在云端存儲(chǔ)之前都進(jìn)行如圖1的數(shù)據(jù)字符串的對(duì)稱參數(shù)加密重組,其中,包含兩個(gè)C重構(gòu)無(wú)字符串的0校驗(yàn),n重構(gòu)和v重構(gòu)段序位置上的32 bit的校驗(yàn)編碼和兩個(gè)有字符串的0尾校驗(yàn)。具體的參數(shù)編碼如表1所示。

表1 參數(shù)編碼字符串
由表1可見(jiàn),字符串與非字符串的編碼值均勻的分布在數(shù)據(jù)信息重組中。由于云端存儲(chǔ)庫(kù)面對(duì)眾多的用戶上傳數(shù)據(jù)信息,則避免數(shù)據(jù)加密的校驗(yàn)值存在相同情況,本研究中增加了用戶自定義n重構(gòu)的校驗(yàn)編碼1和v重構(gòu)的校驗(yàn)編碼2。為了利用校驗(yàn)編碼在字符串對(duì)數(shù)據(jù)加密更方便的被編輯,采用數(shù)據(jù)復(fù)雜度的固定值求余的方式生成的以防止非法數(shù)據(jù)值輸入對(duì)云端存儲(chǔ)的竊取。
依據(jù)對(duì)稱加密算法對(duì)指定key進(jìn)行加密[16],其中key值可以根據(jù)不同的存儲(chǔ)數(shù)據(jù)類型進(jìn)行替換,本研究中利用的key值為j*%NH*。具體的云端存儲(chǔ)數(shù)據(jù)加密流程如圖2所示。
針對(duì)云端存儲(chǔ)數(shù)據(jù)在導(dǎo)出過(guò)程中的解密同樣采用非整數(shù)的形式,這樣可以避免整數(shù)后附加攻擊性的注入式SQL語(yǔ)句并且防止了除用戶外的權(quán)限ID訪問(wèn)云端數(shù)據(jù)庫(kù)。具體的解密流程如下:
Step.1:利用對(duì)稱參數(shù)加密逆向解密;
Step.2:解密后的數(shù)據(jù)字符串進(jìn)行如圖1所示的尾校驗(yàn);
Step.3:將各校驗(yàn)編碼和加密字符串校驗(yàn)編碼進(jìn)行對(duì)比,若校驗(yàn)編碼相同則解密成功,若不相同則說(shuō)明數(shù)據(jù)解密后的字符串為非法訪問(wèn),即可判斷訪問(wèn)來(lái)自于外部攻擊,返回0校驗(yàn)。
數(shù)據(jù)解密實(shí)質(zhì)上是對(duì)數(shù)據(jù)加密過(guò)程的逆操作,具體操作流程如圖3所示。

圖2 云端存儲(chǔ)數(shù)據(jù)加密流程

圖3 云端存儲(chǔ)數(shù)據(jù)解密流程
為驗(yàn)證本研究提出的針對(duì)注入式SQL的對(duì)稱參數(shù)加密可靠性,實(shí)驗(yàn)利用合肥城市云數(shù)據(jù)中心開(kāi)發(fā)了一個(gè)測(cè)試網(wǎng)站,該網(wǎng)站在RJS集成運(yùn)行環(huán)境下,結(jié)合Javascript、PHP和html等語(yǔ)言進(jìn)行源代碼的編寫(xiě)。采用SQLMAP和SSQLInjection作為漏洞測(cè)試工具,使用上述對(duì)稱參數(shù)明文加解密對(duì)云端存儲(chǔ)進(jìn)行漏洞測(cè)試,結(jié)果如下:

從結(jié)果中明顯發(fā)現(xiàn)云端存儲(chǔ)存在3種攻擊方式:’1=1’,sleep和UNION。這3種攻擊基本包含了注入式SQL的全部攻擊方式。云端數(shù)據(jù)導(dǎo)出加載過(guò)程中使用逆向操作的解密測(cè)試結(jié)果如下:

使用不同測(cè)試工具對(duì)對(duì)稱參數(shù)明文加解密前后對(duì)比結(jié)果如表2所示。

表2 對(duì)稱參數(shù)明文加解密前后對(duì)比
本研究所用的對(duì)稱參數(shù)明文加解密在注入式SQL防御方法的基礎(chǔ)上進(jìn)行了改進(jìn):通過(guò)構(gòu)造不同的字符串校驗(yàn)編碼位置來(lái)驗(yàn)證用戶關(guān)鍵數(shù)據(jù)的存儲(chǔ)安全性,同時(shí)也先前檢驗(yàn)了云端數(shù)據(jù)庫(kù)是否存在漏洞,相比單純的對(duì)稱加密算法更加可靠。并且整合了參數(shù)校驗(yàn)和數(shù)據(jù)過(guò)濾的操作步驟。在面對(duì)整型參數(shù)的字符串編碼時(shí),降低了用戶訪問(wèn)云端數(shù)據(jù)庫(kù)的權(quán)限設(shè)置。
本研究針對(duì)傳統(tǒng)的云端存儲(chǔ)面對(duì)的注入式SQL攻擊引發(fā)數(shù)據(jù)信息外泄的問(wèn)題,深入闡述了報(bào)錯(cuò)注入和編碼轉(zhuǎn)換兩種注入式SQL攻擊原理并詳細(xì)介紹了4種防御理論方法。在整理云端數(shù)據(jù)安全存儲(chǔ)的基礎(chǔ)上,提出了一種基于對(duì)稱參數(shù)明文加解密方式的云端數(shù)據(jù)安全處理,利用指定編碼(NnCcVvC)對(duì)數(shù)據(jù)存儲(chǔ)前進(jìn)行加密編碼實(shí)現(xiàn)了對(duì)稱參數(shù)明文加密和重構(gòu),并增加了用戶自定義校驗(yàn)編碼消除了攻擊者來(lái)自同源數(shù)據(jù)庫(kù)的非法數(shù)據(jù)值輸入對(duì)云端存儲(chǔ)的竊取。在云端存儲(chǔ)數(shù)據(jù)向外導(dǎo)出過(guò)程中,利用對(duì)稱參數(shù)加密逆向解密將各校驗(yàn)編碼和加密字符串校驗(yàn)編碼進(jìn)行對(duì)比,實(shí)現(xiàn)了便利的逆操作。本研究對(duì)云端數(shù)據(jù)存儲(chǔ)的安全性保障具有實(shí)踐性意義。
[1]張玉清,王曉菲,劉雪峰,等.云計(jì)算環(huán)境安全綜述[J].軟件學(xué)報(bào),2016,27(6):1328-1348.
[2]馮朝勝,秦志光,袁丁,等.云計(jì)算環(huán)境下訪問(wèn)控制關(guān)鍵技術(shù)[J].電子學(xué)報(bào),2015,43(2):312-319.
[3]丁滟,王懷民,史佩昌,等.可信云服務(wù)[J].計(jì)算機(jī)學(xué)報(bào),2015,38(1):133-149.
[4]李鑫,張維緯,隋子暢,等.新型SQL注入及其防御技術(shù)研究與分析[J].信息網(wǎng)絡(luò)安全,2016(2):66-73.
[5]宋超臣,黃俊強(qiáng),吳瓊,等.SQL注入繞過(guò)技術(shù)與防御機(jī)制研究[J].信息安全與通信保密,2015(2):110-112.
[6]王鵬超,杜慧敏,曹廣界,等.基于布隆過(guò)濾器的精確匹配算法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2015,42(1):112-118.
[7]黃步根,伏娟.MS-DOC文件文本提取研究[J].計(jì)算機(jī)工程與科學(xué),2014,36(8):1505-1511.
[8]唐磊.淺析SQL注入式攻擊與防范[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2012(1):49-52.
[9]史姣麗,黃傳河,王晶,等.云存儲(chǔ)下多用戶協(xié)同訪問(wèn)控制方案[J].通信學(xué)報(bào),2016,37(1):88-99.
[10]林世鑫.基于SQL注入的Web數(shù)據(jù)安全防范與優(yōu)化[J].電腦知識(shí)與技術(shù),2014(10):2184-2187.
[11]宋燕燕,周曉梅,周靈.面向教學(xué)的多媒體文件識(shí)別系統(tǒng)研究與應(yīng)用[J].電子世界,2016(16):78-89.
[12]齊林,王靜云,蔡凌云,等.SQL注入攻擊檢測(cè)與防御研究[J].河北科技大學(xué)學(xué)報(bào),2012,33(6):530-533.
[13]谷偉,陳蓮君.基于MySql的查詢優(yōu)化技術(shù)研究[J].微型電腦應(yīng)用,2013,30(7):48-50.
[14]鄭豪,董小社,王恩東,等.VM內(nèi)部隔離驅(qū)動(dòng)程序的可靠性架構(gòu)[J].軟件學(xué)報(bào),2014(10):2235-2250.
[15]蒲保興,趙乘麟.基于網(wǎng)絡(luò)編碼的組播率與編碼節(jié)點(diǎn)數(shù)的平衡[J].計(jì)算機(jī)應(yīng)用,2015,35(4):929-933.
[16]李湘鋒,趙有健,全成斌.對(duì)稱密鑰加密算法在IPsec協(xié)議中的應(yīng)用[J].電子測(cè)量與儀器學(xué)報(bào),2014,28(1):75-83.
Research on security of cloud storage based on injection SQL
CAI Xiang,SONG Xian-rui,GU Guang-yu,ZHANG Shu-juan
(State Grid Anhui Electric Power Company Electric Power Research Institute,Anqing230601,China)
The analysis of injection SQL attacks,this paper discusses the attack principle of errorinjection and URL-encoding conversion.By constructing the symmetric parameter encryption and decryption method,the storage is encrypted with NnCcVvC code and designated key value respectively,and the PHP decryption of the cloud storage string is completed by combining the encryption reverse flow.The integration of the parameter calibration and data filtering steps,reducing the user access to the cloud database permissions settings,encryption and decryption through the storage of two-way operation for cloud storage to provide more security.
injected SQL;cloud storage;encryption algorithm;security management
TN929.1
A
1674-6236(2017)23-0182-04
2016-10-03稿件編號(hào):201610004
蔡翔(1983—),男,安徽蚌埠人,碩士,工程師。研究方向:信息安全、滲透測(cè)試、無(wú)線安全。