劉瑞寧
(貴州警察學(xué)院 貴州 貴陽 550005)
SQL注入攻擊屬于黑客進行數(shù)據(jù)庫攻擊的常見手段,主要是黑客通過網(wǎng)站程序漏洞提交已經(jīng)設(shè)計的SQL語句,對數(shù)據(jù)庫進行攻擊之后,盜取其中的數(shù)據(jù)信息,或者是對數(shù)據(jù)信息進行修改破壞。而SQL注入攻擊具有隱蔽性特點,很難進行發(fā)掘和分析,一旦攻擊成功將會引發(fā)嚴(yán)重后果,難以保證網(wǎng)絡(luò)環(huán)境的安全性。因此,在網(wǎng)絡(luò)系統(tǒng)實際運行的過程中,應(yīng)重視SQL注入攻擊的防御,按照具體的攻擊特點和流程等,科學(xué)合理選擇防御的措施,有效維護網(wǎng)絡(luò)安全。
從SQL注入攻擊場景層面而言,通常情況下是對數(shù)據(jù)庫與帶有數(shù)據(jù)參數(shù)的動態(tài)網(wǎng)頁進行訪問,整體的攻擊形式非常隱秘,表面而言和普通的web訪問不存在區(qū)別,也不容易被發(fā)現(xiàn),但是潛在的風(fēng)險較高,危害的范圍很廣。目前最為常見的SQL注入攻擊場景,主要就是對WEB應(yīng)用進行攻擊,具體的攻擊場景為:腳本類型的攻擊場景、惡意用戶輸入對SQL腳本進行影響的攻擊場景等。
1.2.1 攻擊策略
SQL注入主要就是將惡意代碼插入或是添加到web應(yīng)用的輸入?yún)?shù),實現(xiàn)攻擊的目的,攻擊者在實際攻擊的過程中,會探測軟件編程期間的漏洞隱患,通過此類漏洞問題構(gòu)造SQL語句,直接檢索或是篡改數(shù)據(jù)庫數(shù)據(jù)信息[1]。與此同時,只要涉及構(gòu)造SQL語句的步驟,都可能會有潛在類型的攻擊風(fēng)險隱患問題,主要原因就是SQL具有多元化的特點,構(gòu)造過程中采用的編碼方式非常豐富,SQL注入的方式就是在參數(shù)內(nèi)插入代碼,此類參數(shù)會被置入命令中執(zhí)行,如果在SQL語句構(gòu)造期間不能科學(xué)合理地進行攻擊的防御,將會導(dǎo)致攻擊者將攻擊代碼插入字符串內(nèi),再將字符串保存到數(shù)據(jù)庫系統(tǒng)中,或者是將字符串當(dāng)作元數(shù)據(jù),使其進入到SQL命令內(nèi)執(zhí)行惡意代碼,如果不能動態(tài)性審查分析SQL語句參數(shù)的內(nèi)容,攻擊者就會對后臺SQL語句進行修改處理,獲得相應(yīng)的權(quán)限,在服務(wù)器和操作系統(tǒng)相互交互的過程中,獲得操作系統(tǒng)組件的權(quán)限,對整體操作系統(tǒng)造成危害[2]。
1.2.2 攻擊流程
SQL注入攻擊的形式非常復(fù)雜煩瑣,具體的流程如圖1所示。首先,攻擊者會對SQL注入存在漏洞的網(wǎng)站進行訪問,明確具體的注入點,按照實際情況進行注入語句的構(gòu)造,之后將所構(gòu)造的語句與程序內(nèi)的語句有機整合,形成新的語句。其次,新的語句輸入到數(shù)據(jù)庫系統(tǒng)內(nèi),數(shù)據(jù)庫系統(tǒng)執(zhí)行新語句之后被攻擊。

圖1 SQL注入攻擊流程
SQL注入攻擊的類型較多,主要涉及以下幾點:其一,未能準(zhǔn)確進行轉(zhuǎn)義字符過濾而引發(fā)的攻擊。用戶在web應(yīng)用系統(tǒng)內(nèi)所輸入的字符沒有經(jīng)過轉(zhuǎn)義字符過濾,就可能會引發(fā)注入攻擊的安全隱患。因為沒有進行過濾轉(zhuǎn)義的字符,可能會成為傳遞注入攻擊SQL語句的載體,導(dǎo)致數(shù)據(jù)庫被攻擊,數(shù)據(jù)庫中的數(shù)據(jù)信息被操縱。其二,沒有準(zhǔn)確進行字段類型處理而出現(xiàn)的攻擊問題。如若用戶所提供的字段沒有經(jīng)過科學(xué)合理的類型處理,不是強類型,或者是未能進行類型強制,就會導(dǎo)致出現(xiàn)攻擊的問題,例如SQL語句內(nèi)所應(yīng)用的數(shù)字段缺少合法性,并非強類型,就會引發(fā)注入攻擊的安全風(fēng)險問題。其三,數(shù)據(jù)庫服務(wù)器存在漏洞而引發(fā)的攻擊問題。如果數(shù)據(jù)庫服務(wù)器軟件系統(tǒng)有漏洞問題,存在函數(shù)漏洞或是其他漏洞,會為攻擊者留下攻擊的空間,可能會導(dǎo)致攻擊者按照服務(wù)器漏洞情況進行SQL注入攻擊。其四,盲目類型的攻擊問題。通常在web應(yīng)用程序容易受到攻擊,但是攻擊結(jié)果對攻擊者不可見,就會導(dǎo)致出現(xiàn)盲目SQL注入攻擊的問題,例如:網(wǎng)頁存在漏洞,不會將數(shù)據(jù)信息顯示出來,攻擊者需要結(jié)合注入合法語句之內(nèi)邏輯語句的結(jié)果,將各類內(nèi)容顯示出來,此類攻擊耗費的時間很長,需要為了獲得web應(yīng)用系統(tǒng)中不同字節(jié)而構(gòu)造不同的新語句,但是如果攻擊者能夠確定漏洞位置或是目標(biāo)信息,就會快速自動化進行攻擊,導(dǎo)致網(wǎng)絡(luò)安全受到威脅。其五,條件性差錯類型的攻擊問題。整體應(yīng)用系統(tǒng)內(nèi)如果WHERE語句屬于真實存在的部分,攻擊者就可能會注入一個會使得數(shù)據(jù)庫判斷錯誤的語句,引發(fā)SQL錯誤的問題,如:SELECR-I/O-FROM-users-WHEREusername=“Ralph”,如若用戶Ralph存在,那么此情況下被零除將會引發(fā)錯誤。其六,時間延誤類型的注入攻擊問題。對于時間延誤的注入攻擊問題來講,其主要是導(dǎo)致SQL引擎執(zhí)行很長的隊列、很長的時間延誤語句,攻擊者對頁面加載的時間進行分析和衡量之后,明確注入的語句內(nèi)容,將語句注入之后進行攻擊[3]。
2.1.1 合理進行編程
編程過程中攻擊問題的防御,主要就是在程序編寫期間進行漏洞的封堵,強化安全風(fēng)險問題的防范力度,遵循少特權(quán)的原則和多檢驗的原則,按照具體的方案要求處理,例如:制定對客戶端提交信息進行封裝的方案內(nèi)容、制定敏感字符或是字符串的替換刪除方案內(nèi)容、制定對出錯信息進行全面屏蔽的方案內(nèi)容、制定服務(wù)器正式處理以前檢驗分析、提交數(shù)據(jù)合法性的方案內(nèi)容,各類方案之間相互彌補,確保編程過程中能夠有效防范SQL注入攻擊的問題。與此同時,在實際編程的過程中需要注意,應(yīng)以提交數(shù)據(jù)合法性的檢驗分析為基礎(chǔ),設(shè)置客戶端層面和服務(wù)端層面的檢驗?zāi)J剑灰魏我欢藱z驗結(jié)果沒有通過相關(guān)的要求,就不會將提交的數(shù)據(jù)介入到query語句內(nèi),不會對系統(tǒng)產(chǎn)生攻擊。且客戶端與服務(wù)端的信息數(shù)據(jù)合法性檢驗函數(shù)存在一定的相似和相同之處,有效完成客戶端信息數(shù)據(jù)內(nèi)容合法性檢驗之后,能夠降低網(wǎng)絡(luò)流量、減輕服務(wù)器所承受的負荷,準(zhǔn)確區(qū)分一般誤操作類型的問題、低等級和高等級類型的攻擊問題等,但是對于有豐富經(jīng)驗的攻擊者,會快速繞開客戶端信息數(shù)據(jù)的合法性檢驗,將所提交的數(shù)據(jù)直接發(fā)送給服務(wù)端。因此,在系統(tǒng)編程期間,就需要設(shè)置服務(wù)端的二級檢驗部分,以此確保能夠快速識別和檢驗SQL惡意攻擊的信息,設(shè)置攻擊的備案內(nèi)容,提出相應(yīng)的警告信息,有效維護系統(tǒng)的安全。
2.1.2 數(shù)據(jù)庫的合理配置
在數(shù)據(jù)庫配置的過程中應(yīng)考慮到數(shù)據(jù)庫管理系統(tǒng)普遍會提供安全性的配置項,準(zhǔn)確進行此類配置項的配置,能夠有效增強整體系統(tǒng)的攻擊防御性能。因此,在技術(shù)層面應(yīng)重點關(guān)注數(shù)據(jù)庫的配置,最高程度上預(yù)防發(fā)生SQL注入攻擊的問題。例如:在數(shù)據(jù)庫配置的過程中設(shè)置SQL Server,需要做好以下幾點工作。
(1)賬號密碼的合理設(shè)置
SQL Server具備超級用戶的賬號,主要的用戶名稱為SA,這個用戶名稱不可以被刪除或者是修改,因此在實際處理期間需要重點進行該賬號的保護和維護。在數(shù)據(jù)庫系統(tǒng)中不會直接使用此類賬號,而是重新建設(shè)和這個賬號權(quán)限相同的超級用戶,對數(shù)據(jù)庫進行管理,其他的用戶只需要按照具體分配的情況獲得權(quán)限,不能留下多余的權(quán)限。同時,為不同的用戶設(shè)置非常復(fù)雜且安全度很高的密碼,定期進行密碼的修改,這樣在一定程度上能夠有效維護數(shù)據(jù)庫系統(tǒng)的安全,預(yù)防發(fā)生攻擊的問題[4]。
(2)通過Windows的身份進行驗證處理
SQL Server在實際應(yīng)用的過程中,認證模式涉及混合身份類型、Windows身份類型兩種。為了能夠有效預(yù)防出現(xiàn)SQL攻擊的風(fēng)險問題,需要采用Windows身份認證的方式,主要是因為此類認證方式能夠進行域用戶和其他用戶連接的限制,有效維護SQL Server不會受到因特網(wǎng)工具的攻擊或是傷害,服務(wù)器還能從Windows的安全管控機制中獲得更多的效益。
(3)對存儲過程進行擴展
SQL Server的存儲過程主要就是為用戶提供數(shù)據(jù)信息存儲的服務(wù),在實際配置的過程中應(yīng)重點進行存儲過程的擴展,提示存儲期間部分無用、沒有價值的應(yīng)用分布情況,刪除不必要的數(shù)據(jù)信息存儲過程,以免為黑客留下破壞或是攻擊系統(tǒng)的可乘之機。例如:xp-cmdshell存儲期間需要禁用,主要原因是在存儲過程中會使系統(tǒng)管理工作人員通過操作命令、運行解釋器的形式等,進行預(yù)定命令字符串的執(zhí)行,通過文本形式返回輸出的內(nèi)容,屬于功能較為強大的擴展存儲操作。通常黑客在進行SQL Server攻擊的過程中,會利用執(zhí)行xp-cmdshell擴展命令的方式進行數(shù)據(jù)庫的破壞,因此為了維護整體系統(tǒng)的安全性,需要禁用xp-cmdshell,確保整體數(shù)據(jù)庫和網(wǎng)絡(luò)系統(tǒng)的安全水平有所提升[5]。
SQL注入攻擊會對網(wǎng)絡(luò)應(yīng)用程序和數(shù)據(jù)庫系統(tǒng)的安全性造成危害,因此在對網(wǎng)絡(luò)安全進行管理的過程中,需要以有效預(yù)防和杜絕SQL注入風(fēng)險為目的,制定較為完善的制度,培養(yǎng)優(yōu)秀的安全風(fēng)險防范人才隊伍。首先,制定預(yù)防SQL注入攻擊的管理制度,在制度中要求網(wǎng)絡(luò)管理人員和系統(tǒng)管理人員全面分析攻擊問題和風(fēng)險問題的發(fā)生原因。按照具體的問題原因深入研究和探討如何進行風(fēng)險的防御,采用科學(xué)有效的措施防御相關(guān)的風(fēng)險問題,等待系統(tǒng)管理人員和技術(shù)人員完成相關(guān)工作之后,全面落實有關(guān)的考核評價制度,對所有人員的工作情況進行全面考核分析,一旦發(fā)現(xiàn)工作人員沒有科學(xué)合理防御SQL注入攻擊風(fēng)險,就要進行嚴(yán)格的懲罰,以此提升每位人員工作的責(zé)任感和積極性[6]。其次,建設(shè)高素質(zhì)的技術(shù)人才隊伍,聘用專業(yè)素質(zhì)和標(biāo)準(zhǔn)規(guī)范的優(yōu)秀人才,要求工作人員全面掌握SQL注入攻擊風(fēng)險防范的專業(yè)知識和技能技巧,游刃有余地完成相關(guān)的風(fēng)險防控工作。對于現(xiàn)有的技術(shù)人員也需要階段性進行培訓(xùn),通過培訓(xùn)的方式提升人員的SQL攻擊風(fēng)險防御能力和專業(yè)水平,為整體風(fēng)險的有效防控提供人員保障。
由于SQL注入攻擊對整體網(wǎng)絡(luò)系統(tǒng)和數(shù)據(jù)庫系統(tǒng)會造成嚴(yán)重的危害,因此在實際工作中需要重點進行攻擊問題的整體防治,通過科學(xué)合理的防治方式預(yù)防注入攻擊對系統(tǒng)造成的安全危害和損害[7]。
系統(tǒng)權(quán)限設(shè)置的過程中,應(yīng)將終端用戶當(dāng)作是軟件的使用主體,無須提供數(shù)據(jù)庫建立權(quán)限和刪除權(quán)限,此情況下即使用戶所采用的SQL語句內(nèi)存在嵌入類型的惡意代碼,但是受到權(quán)限的影響也無法執(zhí)行相關(guān)的代碼,可避免發(fā)生惡意攻擊的問題,同時需按照系統(tǒng)的運行特點,將普通用戶和管理人員用戶相互區(qū)分,合理設(shè)置二者的權(quán)限,最高程度上避免SQL注入攻擊所帶來的影響。
在對SQL語句進行編寫的過程中,用戶所輸入的變量不可以直接嵌入語句內(nèi),需要利用參數(shù)進行變量的傳遞,這樣才能預(yù)防發(fā)生SQL注入攻擊的問題。簡而言之,用戶所輸入的參數(shù)不可以直接當(dāng)作系統(tǒng)的SQL語句進行嵌入,而是要對用戶所輸入?yún)?shù)和數(shù)據(jù)進行過濾處理,或是采用參數(shù)化語句方式進行用戶輸入變量的傳遞,對語句參數(shù)化處理之后[8],確保所有嵌入SQL的語句都能符合法律規(guī)范和安全要求,有效規(guī)避相關(guān)的安全風(fēng)險隱患問題。
從總體層面而言,SQL注入攻擊防御的過程中,主要是使用用戶輸入內(nèi)容、檢驗方式或是迫使應(yīng)用參數(shù)化語句傳遞用戶輸入內(nèi)容的方式。在整體數(shù)據(jù)庫系統(tǒng)運行的過程中,很多對用戶輸入內(nèi)容進行檢驗和分析的工具不能為管理人員提供防御攻擊問題的輔助,例如:采用相關(guān)的驗證工具,能夠?qū)ψ址兞啃畔⑦M行測試分析,只按照系統(tǒng)運行需求接受所需的數(shù)據(jù)值,拒絕接受二進制類型、注釋類型的數(shù)據(jù)字符,這樣在一定程度上能夠規(guī)避腳本注入的攻擊現(xiàn)象,預(yù)防部分緩沖區(qū)域出現(xiàn)溢出攻擊的問題[9]。另外,還需進行用戶所述內(nèi)容類型和大小的測試研究,強制性執(zhí)行相關(guān)的轉(zhuǎn)換操作和限制操作,不僅能夠避免惡意攻擊而導(dǎo)致緩沖區(qū)溢出的現(xiàn)象,還能進一步提升注入攻擊問題的防御效果,促使系統(tǒng)的安全運行。
綜上所述,SQL注入攻擊的流程非常煩瑣復(fù)雜,多數(shù)情況下是因為用戶輸入字符信息或者是系統(tǒng)存在漏洞而引發(fā)。因此,為了能夠有效防御SQL注入攻擊的問題,制定完善的技術(shù)層面攻擊防御方案,可以進行程序的編程和數(shù)據(jù)庫配置,同時編制完善的管理制度,建設(shè)專業(yè)素質(zhì)較高的人才隊伍,采用科學(xué)的方式進行SQL注入攻擊的整體防治,確保系統(tǒng)可以安全、良好、穩(wěn)定可靠運行。