高洪濤
中國刑事警察學(xué)院 遼寧 110854
隨著B/S模式的網(wǎng)絡(luò)服務(wù)構(gòu)架的普遍采用,針對(duì)該模式編寫的程序越來越多,許多應(yīng)用程序在編寫過程中缺乏數(shù)據(jù)的合理性分析判斷,導(dǎo)致數(shù)據(jù)查詢代碼無法獲取應(yīng)得的數(shù)據(jù)信息。此模式通常被看成SQL Injection,即SQL注入。SQL注入過程通過正常的WWW端口訪問,防火墻對(duì)SQL注入不會(huì)發(fā)出正常報(bào)警,加之管理員對(duì)IIS的關(guān)注度不高,導(dǎo)致入侵現(xiàn)象時(shí)常發(fā)生。SQL注入的手法比較靈活,注入過程中會(huì)出現(xiàn)很多異常問題,比如通過巧妙構(gòu)建SQL語句,達(dá)到獲取有效數(shù)據(jù)的目的。從我國網(wǎng)站情況看,SQL+Acsecc或者SQL Server的網(wǎng)站數(shù)量已經(jīng)達(dá)到70%,PHP+Mysql占20%,其它站點(diǎn)占10%,因此SQL注入問題對(duì)網(wǎng)站的影響相當(dāng)大,需要對(duì)SQL注入攻擊途徑及策略進(jìn)行分析。
隨著Web應(yīng)用的深入,SQL注入攻擊方式發(fā)生了很大的變化,SQL注入攻擊的根源是用戶數(shù)據(jù)和程序執(zhí)行之間存在分界不清,導(dǎo)致攻擊者把程序執(zhí)行當(dāng)成用戶信息輸入系統(tǒng),系統(tǒng)獲取相關(guān)的Web信息后,導(dǎo)致攻擊現(xiàn)象產(chǎn)生。
SQL注入攻擊主要是通過在用戶端精心編寫SQL語句,把此類具有特殊意義的SQL語句注入系統(tǒng)中,系統(tǒng)執(zhí)行SQL語句后會(huì)獲取用戶敏感信息,比如用戶名、口令、驗(yàn)證信息等。主機(jī)控制權(quán)限獲取后,可通過網(wǎng)絡(luò)通信模式獲取主機(jī)信息,對(duì)主機(jī)進(jìn)行有效攻擊。SQL注入攻擊過程中所采取的語句都是合法語句,系統(tǒng)很難對(duì)其進(jìn)行檢測和識(shí)別,防火墻在檢測過程中也很難檢測問題語句,使之具有難以捕獲的特點(diǎn)。從理論角度分析基于SQL語句的標(biāo)準(zhǔn)數(shù)據(jù)庫,比如Oracle、 Sybase、DB2、MS SQL Server等,具備應(yīng)用的廣泛性。
SQL注入攻擊出現(xiàn)泛濫狀況時(shí),開發(fā)人員沒有從根本上認(rèn)識(shí)危害性,編寫網(wǎng)站過程中依然存在很多SQL注入攻擊的漏洞,很多專門針對(duì) SQL注入的軟件也在迅速發(fā)展,比如NBSI。對(duì)SQL注入攻擊稍微有所了解的人都可通過軟件對(duì)相關(guān)網(wǎng)站進(jìn)行注入攻擊。
為防止攻擊者把程序執(zhí)行輸入系統(tǒng),應(yīng)采取相關(guān)策略阻止。下面以ASP+SQL Server網(wǎng)站為例,對(duì)SQL注入攻擊從應(yīng)用服務(wù)器(IIS)、數(shù)據(jù)服務(wù)器(SQL Server)、代碼等角度進(jìn)行分析,可在設(shè)計(jì)網(wǎng)站模式時(shí)按照類似方式采取相應(yīng)策略。
SQL注入式攻擊一般情況下與系統(tǒng)硬件和程序開發(fā)語言有著密切的聯(lián)系,可以通過踩點(diǎn)或者探索模式對(duì)注入式攻擊進(jìn)行分析。SQL注入攻擊過程中,主要按照IIS所給出的相關(guān)錯(cuò)誤代碼進(jìn)行判斷分析,如果IIS設(shè)置過程中被設(shè)成無論什么狀況下所產(chǎn)生的 ASP錯(cuò)誤代碼,只給出一個(gè)錯(cuò)誤提示,具體設(shè)置過程中可以改成HTTP 500錯(cuò)誤模式,如此狀況下入侵現(xiàn)象就不會(huì)發(fā)生。此方法既簡單又有效,但是程序開發(fā)過程中要求程序員在代碼出錯(cuò)的情況下,不給出相關(guān)錯(cuò)誤提示信息,這樣會(huì)給程序員程序開發(fā)過程中帶來不便。但是從服務(wù)器本身功能角度看,按照此模式還是完全可以的,畢竟服務(wù)器不是測試代碼的地方。
服務(wù)管理員應(yīng)該在相應(yīng)的服務(wù)器上設(shè)置好安全權(quán)限,需要在IIS上為每一個(gè)網(wǎng)站配置好服務(wù)權(quán)限。通常情況下靜態(tài)網(wǎng)站主要以“可執(zhí)行和腳本”為權(quán)限,動(dòng)態(tài)網(wǎng)站只要給出“純腳本”權(quán)限即可。網(wǎng)站后臺(tái)管理權(quán)限需要進(jìn)行重點(diǎn)設(shè)置,如果網(wǎng)站后臺(tái)管理上傳文件的權(quán)限必須設(shè)置為“無”,可以有效防止黑客通過后臺(tái)上傳文件,防止黑客上傳 ASP木馬程序,只要把權(quán)限設(shè)置成“無”,即使上傳了ASP木馬程序也無法正常運(yùn)行。通常情況下,SQL注入漏洞與網(wǎng)絡(luò)安全存在一定的關(guān)系,如果黑客通過上傳ASP木馬程序,二者實(shí)現(xiàn)并行運(yùn)行處理對(duì)整個(gè)系統(tǒng)安全造成嚴(yán)重影響,二者的同步運(yùn)行可以導(dǎo)致整個(gè)服務(wù)器處于癱瘓狀態(tài)。所以系統(tǒng)管理員對(duì) IIS權(quán)限管理顯得尤為重要。
利用程序連接數(shù)據(jù)庫的用戶通常涉及到數(shù)據(jù)庫操作,所以服務(wù)器角色組使用過程必須高度重視,最好不使用服務(wù)器角色組,而是通過數(shù)據(jù)庫用戶角色組完成相關(guān)工作。一般情況下,SA角色的權(quán)限不能隨便設(shè)置,黑客通過SQL注入相關(guān)程序后,可以通過xp-cmdshell命令獲取系統(tǒng)最高權(quán)限。為解決此問題可以通過設(shè)置db-Reader和db-Writer權(quán)限,有些用戶是需要備份的,因此使用過程中可以通過新建用戶完成。SQL Server可以通過相關(guān)命令對(duì)數(shù)據(jù)表進(jìn)行操作,比如說Select、Update、Delete等可以完成相應(yīng)工作。開發(fā)人員應(yīng)該合理分析用戶需求,針對(duì)不同的用戶設(shè)置不同的權(quán)限,保證系統(tǒng)處于穩(wěn)定安全狀態(tài)。
如果系統(tǒng)通過文件連接數(shù)據(jù)庫進(jìn)行訪問,應(yīng)通過文件加密策略對(duì)文件加密,保證訪問的文件不會(huì)通過 SQL注入漏洞。如果文件不采取加密方式傳輸,黑客可以通過工具把文件下載來獲取相關(guān)用戶名和密碼,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的非法訪問。開發(fā)者在程序編寫過程中針對(duì)一些查詢表可以不設(shè)置Update、Delete等權(quán)限。
系統(tǒng)級(jí)設(shè)置可以保證系統(tǒng)處于安全狀態(tài),針對(duì)防火墻進(jìn)行設(shè)置,把TCP 1433/UDP 1434端口進(jìn)行對(duì)外連接,可以給系統(tǒng)、SQL Server、IIS打上補(bǔ)丁,保證系統(tǒng)處于安全狀態(tài)。系統(tǒng)弱口令也是系統(tǒng)安全得不到保障的重要原因,系統(tǒng)弱口令檢查可防止系統(tǒng)口令不被竊取,如果發(fā)現(xiàn)弱口令現(xiàn)象可以通過修改密碼方式解決。
功能代碼端可以很好的控制系統(tǒng)安全性。系統(tǒng)編碼人員在系統(tǒng)設(shè)計(jì)過程中可以把密碼字段進(jìn)行相關(guān)加密操作,主要進(jìn)行MD5加密。按照此模式操作,一方面可以對(duì)用戶信息進(jìn)行隱私,另一方面可以提高系統(tǒng)的安全性。當(dāng)黑客通過SQL注入攻擊模式對(duì)用戶信息進(jìn)行獲取時(shí),可以采取用戶名和密碼保護(hù)模式提高系統(tǒng)安全特性,黑客采取此模式攻擊會(huì)耗去大量的時(shí)間和精力,所以攻擊的難度大大增加,最終使得系統(tǒng)安全性得以提高。
用戶信息檢測是系統(tǒng)安全的重要保證,通過程序?qū)π畔⑤斎脒M(jìn)行檢測,從而保證SQL攻擊得到有效防御。當(dāng)前采取的檢測方法主要有兩種,一種是刪除或者修改相關(guān)的字符、字符串,另一種是服務(wù)器提交處理數(shù)據(jù)信息時(shí)進(jìn)行數(shù)據(jù)檢驗(yàn)。
從刪除或者修改字符、字符串的角度出發(fā),可對(duì)頁面?zhèn)鬟f來的字符串進(jìn)行參數(shù)傳遞,通過ASP自帶的replace()函數(shù)可以實(shí)現(xiàn)相關(guān)功能,可以把危險(xiǎn)的字符通過相對(duì)安全的字符代替,但是此種方法具有一定的局限性,只能對(duì)普通黑客產(chǎn)生一定的作用,比如:當(dāng)用戶輸入字符串“ddroprdropodrop”時(shí),通過 replace()函數(shù)把字符串“drop”執(zhí)行刪除替換操作后,最終剩余的字符正好只有“drop”。
從服務(wù)器提交數(shù)據(jù)信息機(jī)進(jìn)行數(shù)據(jù)檢驗(yàn)角度看,此種方法是一種很好的SQL注入攻擊處理策略,檢驗(yàn)過程中主要對(duì)非法字符進(jìn)行才處理,如果檢測出非法字符時(shí),服務(wù)器對(duì)相關(guān)操作進(jìn)行終止,讓SQL注入攻擊失去機(jī)會(huì)。
通過對(duì)SQL注入攻擊進(jìn)行分析,可以在SQL注入攻擊防御、檢測、備案模型的基礎(chǔ)上,提出SQL注入攻擊通用數(shù)據(jù)檢測模型,把相關(guān)復(fù)雜設(shè)置進(jìn)行處理,消除一些復(fù)雜操作,針對(duì)效果不明顯的客戶端進(jìn)行處理,保證設(shè)置的合理性、有效性。通過對(duì)服務(wù)端數(shù)據(jù)信息進(jìn)行檢測,針對(duì)服務(wù)端惡意端攻擊信息進(jìn)行備案,通過對(duì)攻擊者IP、攻擊時(shí)間、攻擊次數(shù)、最后一次攻擊時(shí)間等信息進(jìn)行處理,針對(duì)攻擊者窮舉攻擊的狀況進(jìn)行算法分析。模型可以按照自由設(shè)置攻擊的次數(shù)進(jìn)行用戶請(qǐng)求策略分析,服務(wù)器可以采取截?cái)嗵幚恚罱K產(chǎn)生報(bào)錯(cuò)信息。另外模型處理系統(tǒng)安全信息的時(shí)候,可以采取.asp文件方式,按照此模式只需要在系統(tǒng)頁面開始位置加入代碼<!--#Include File= “IPcheck.asp”--!>即可,功能設(shè)置相對(duì)比較方便。SQL注入攻擊通用檢驗(yàn)?zāi)P腿鐖D1所示。
圖1 SQL注入攻擊通用檢驗(yàn)?zāi)P?/p>
系統(tǒng)所有代碼都被封裝在文件IPcheck.asp中,編寫語言可以采取VCScript,程序編寫過程中可以附詳細(xì)的說明,把連接數(shù)據(jù)庫的文件進(jìn)行抽象封裝,主要封裝在connManu.asp文件中,具體實(shí)現(xiàn)過程中可以通過 connCreate(conn), rstSearchCreate(conn,rs,strSQL), rstChangeCreate (conn,rs, strSQL), rstClose(rs),connClose(conn)建立連接對(duì)象完成,通過建立搜索記錄集,系統(tǒng)對(duì)安全因素進(jìn)行檢驗(yàn)過程中,可以對(duì)記錄集進(jìn)行操作,保證SQL注入攻擊程序能夠得到檢測。建立的記錄集應(yīng)具有動(dòng)態(tài)查詢特征,通過關(guān)閉連接對(duì)象、關(guān)閉記錄集對(duì)方式對(duì)系統(tǒng)安全策略進(jìn)行檢測。
ClientURL,ParamArray,ParamDinamicArray,i,DealMethod ,Erorr-Retunr,strFilter,AttackLimitNum,ClientIP,sql等是系統(tǒng)執(zhí)行過程中所用到的對(duì)象,通過變量分析可以得出系統(tǒng)核心代碼:
<%
—定義要使用到的功能函數(shù)—
Function CheckStr(str),此函數(shù)檢測字符串,tr里面是否含有自己定義的非法字符,是則返回true,代碼略。
End Function
Sub IpCheckIn
<%
可以把攻擊對(duì)象的信息進(jìn)行備案,其主要包括用戶第一次攻擊時(shí)間、攻擊的IP、攻擊次數(shù)、最后一次攻擊時(shí)間。此類信息主要建立在表IPAttack里面。
SQL注入攻擊已經(jīng)成為重要的網(wǎng)絡(luò)漏洞,從Web開發(fā)角度看,需要從平臺(tái)、數(shù)據(jù)層、技術(shù)等角度分析問題的根源。SQL注入攻擊過程中需要采取建立參數(shù)化進(jìn)程過程、存儲(chǔ)進(jìn)程進(jìn)行授權(quán)“運(yùn)行”、最小特權(quán)連接、應(yīng)用程序域組授予許可等策略。系統(tǒng)開發(fā)過程中應(yīng)保持Web應(yīng)用程序以最少的特權(quán)模式運(yùn)行,禁止采取管理員模式運(yùn)行,避免使用sysadmin或db_owner等特權(quán)賬號(hào)運(yùn)行。
通過對(duì)ASP+SQL Server類型網(wǎng)站進(jìn)行分析,結(jié)合操作實(shí)際,本文提出一套完整的解決SQL注入攻擊的策略。通過對(duì)實(shí)際案例分析研究,可以把SQL注入攻擊策略運(yùn)用到網(wǎng)絡(luò)系統(tǒng)環(huán)境中,為解決網(wǎng)絡(luò)環(huán)境 SQL注入攻擊提供了重要依據(jù)。SQL注入攻擊通用檢驗(yàn)?zāi)P蛯?duì)WEB應(yīng)用數(shù)據(jù)庫安全發(fā)揮重要作用,通過模型分析可以有效控制數(shù)據(jù)庫安全問題。在SQL Server環(huán)境下,可以把所有的代碼都進(jìn)行函數(shù)抽象,最終以單獨(dú)文件形式存放,使用過程中只要對(duì)相關(guān)參數(shù)進(jìn)行修改即可,為網(wǎng)絡(luò)環(huán)境下系統(tǒng)安全提供了重要保證。
[1]陳小兵.SQL注入攻擊及其防范檢測技術(shù)研究[J].計(jì)算機(jī)工程與應(yīng)用.2007.
[2]周敬利.一種新的反SQL注入策略的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué).2006.
[3]王云.Web項(xiàng)目中的SQL注入問題研究與防范方法[J].計(jì)算機(jī)工程與設(shè)計(jì).2010.
[4]彭賡.基于改進(jìn)網(wǎng)絡(luò)爬蟲技術(shù)的SQL注入漏洞檢測[J].計(jì)算機(jī)應(yīng)用研究.2010.