一.引言
隨著網(wǎng)絡(luò)的普及和發(fā)展,基于Internet的各種系統(tǒng)也在各行各業(yè)中發(fā)揮著日益重要的作用。但由于計(jì)算機(jī)網(wǎng)絡(luò)具有連接形式多樣性、終端分布不均勻性和網(wǎng)絡(luò)的開放性、互聯(lián)性等特征,致使WEB系統(tǒng)易受黑客,惡意軟件和其它不軌行為的攻擊。而且,當(dāng)其中涉及有關(guān)個(gè)人身份的隱私資料,或公司、學(xué)校等各種團(tuán)體的敏感數(shù)據(jù),甚至商業(yè)數(shù)據(jù)時(shí),提高網(wǎng)絡(luò)安全性尤為重要。本文將以WEB系統(tǒng)中的典型配置(Win2000 server+SQL+IIS5.0)為例,著重討論WEB服務(wù)器的系統(tǒng)安全設(shè)置與SQL Injection的安全策略。
二.網(wǎng)絡(luò)安全隱患分析及安全技術(shù)
通常,我們所說的網(wǎng)絡(luò)安全是指:網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)據(jù)受到保護(hù),不會(huì)因?yàn)榕既换蛘邜阂獾墓舳獾狡茐摹⒏摹⑿孤到y(tǒng)能夠連續(xù)、可靠、正常地運(yùn)行,網(wǎng)絡(luò)服務(wù)不中斷。因此,通常網(wǎng)絡(luò)安全包括了系統(tǒng)安全和數(shù)據(jù)安全兩個(gè)部分。同樣,對(duì)網(wǎng)絡(luò)地惡意攻擊行為也可大致分為系統(tǒng)型攻擊和數(shù)據(jù)型攻擊。在網(wǎng)絡(luò)安全中,各種硬件設(shè)施,防火墻都是必不可少的。除此之外,系統(tǒng)的安全設(shè)置及代碼的數(shù)據(jù)安全性也是其中不可忽視的一部分,本文將對(duì)此作深入的討論。具體分析如下:
1.系統(tǒng)安全設(shè)置
以Windows 2000 server + SQL Server 2000 + IIS5.0為例:相對(duì)而言,這是我們最常用的網(wǎng)絡(luò)服務(wù)器配置。但是微軟的漏洞層出不窮,補(bǔ)丁一個(gè)接一個(gè)。因此,加固系統(tǒng)安全就顯得異常重要。
首先,應(yīng)盡可能選擇專用的Web Server服務(wù)器,在安裝系統(tǒng)時(shí)應(yīng)斷開服務(wù)器的網(wǎng)絡(luò)連接,并在此基礎(chǔ)上安裝Service Pack 3的補(bǔ)丁程序。打完補(bǔ)丁后修改注冊(cè)表,首先禁止默認(rèn)共享。在Windows 2000中,有一個(gè)“默認(rèn)共享”,這是在安裝服務(wù)器的時(shí)候,把系統(tǒng)安裝分區(qū)自動(dòng)進(jìn)行共享,雖然對(duì)其訪問還需要超級(jí)用戶的密碼,但這是潛在的安全隱患,從服務(wù)器的安全考慮,最好關(guān)閉這個(gè)“默認(rèn)共享”,以保證系統(tǒng)安全。將鍵值: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparametersautoshareserver修改為0。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters autosharewks修改為0。如果沒有這兩個(gè)鍵值,新建即可。注意,新建時(shí)選擇“雙字節(jié)值”。此外應(yīng)禁止IPC$空連接,將鍵值 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa
estrictanonymous修改為1。
IPC$(Internet Process Connection)是為了讓進(jìn)程間通信而開放的命名管道,可以通過驗(yàn)證用戶名和密碼獲得相應(yīng)的權(quán)限,在遠(yuǎn)程管理計(jì)算機(jī)和查看計(jì)算機(jī)的共享資源時(shí)使用。利用IPC$,連接者甚至可以與目標(biāo)主機(jī)建立一個(gè)空的連接而無需用戶名與密碼(當(dāng)然,主機(jī)必須開了ipc$共享,否則是連接不上的),而利用這個(gè)空的連接,連接者還可以得到目標(biāo)主機(jī)上的用戶列表。
其次,針對(duì)IIS,要盡量避免把IIS安裝在網(wǎng)絡(luò)中的主域控制器上。因?yàn)樵诎惭b完IIS后,會(huì)在所安裝的計(jì)算機(jī)上生成IUSR_Computername的匿名賬戶。這個(gè)賬戶會(huì)被添加到域用戶組中,從而把應(yīng)用于域用戶組的訪問權(quán)限提供給訪問Web服務(wù)器的每個(gè)匿名用戶,這樣不僅不能保證IIS的安全性,而且會(huì)威脅到主域控制器。在安裝完后,應(yīng)運(yùn)行IISLOCKD.EXE,該軟件是微軟發(fā)行的用于填補(bǔ)IIS漏洞的軟件。但這并不足以保證IIS的安全,應(yīng)對(duì)IIS做進(jìn)一步的加固:
a.刪除和停用IIS的示范程序和目錄,這是IIS自帶的程序和文件,也是進(jìn)攻者對(duì)web系統(tǒng)進(jìn)行攻擊的一個(gè)途徑。
條目
位置
IIS
?Inetpubiissamples
Admin Scripts
?InetpubAdminScripts
IIS Documentation
%systemroot%helpiis help
Data Access
?Program Filescommonfilessystemmsadc
b.為防止進(jìn)攻者利用服務(wù)器的FTP設(shè)置和發(fā)送MAIL的功能對(duì)網(wǎng)站內(nèi)容進(jìn)行修改,如果服務(wù)器不需要FTP和發(fā)送MAIL, 可以刪掉ftproot和mailroot 兩個(gè)文件夾,并關(guān)掉相關(guān)服務(wù)。
c.為避免日志文件被修改或覆蓋,需要設(shè)置IIS日志文件的訪問控制權(quán)限:默認(rèn)情況下,IIS的日志會(huì)在“%systemroot%system32logfiles”目錄下。如果可能,可以將日志的路徑換一個(gè)地方。推薦訪問控制權(quán)限:Administrators (Full Control) ;System (Full Control) ;Everyone (RWC). 這個(gè)步驟將防止一些有惡意的用戶通過刪除日志信息來掩蓋他的記錄。
d.刪除危險(xiǎn)的腳本影射:例如:對(duì).htr文件的映射,請(qǐng)求處理存在堆溢出漏洞,遠(yuǎn)程攻擊者可以利用此漏洞得到主機(jī)本地普通用戶訪問權(quán)限。而對(duì)idq.dll,在處理某些URL請(qǐng)求時(shí)存在一個(gè)未經(jīng)檢查的緩沖區(qū),如果攻擊者提供一個(gè)特殊格式的URL,就可能引發(fā)一個(gè)緩沖區(qū)溢出。通過精心構(gòu)造發(fā)送數(shù)據(jù),攻擊者可以改變程序執(zhí)行流程,執(zhí)行任意代碼。成功地利用這個(gè)漏洞,攻擊者可以遠(yuǎn)程獲取"Local System"權(quán)限。因此,刪除一些并不需要的腳本影射,可以將利用漏洞攻擊的可能性降至最低:
腳本類型
映射
Web-based password reset
.htr
Internet Database Connector
.idc
Server-Side Includes
.stm .shtml .shtm
Internet Printing
.printer
Index Server
.ida .idq .hta
2.?dāng)?shù)據(jù)攻擊
以下主要總結(jié)了針對(duì)SQL Injection 的安全防范策略及對(duì)SQL Server的設(shè)置。所謂SQL Injection,就是指利用某些數(shù)據(jù)庫(kù)的外部接口把用戶數(shù)據(jù)插入到實(shí)際的數(shù)據(jù)庫(kù)操作語(yǔ)言當(dāng)中,從而達(dá)到入侵?jǐn)?shù)據(jù)庫(kù)乃至操作系統(tǒng)的目的。在利用Web 腳本語(yǔ)言(ASP,PHP)做前臺(tái)+數(shù)據(jù)庫(kù)做后臺(tái)的WEB系統(tǒng)中,為達(dá)到與用戶交互的目的,就不可避免的有一些東西是來自用戶提交的信息,如用戶的登陸信息,查詢字符串,或用戶可以遠(yuǎn)程修改的資料等等。這些信息往往可能被攻擊者利用,將SQL語(yǔ)句篡改成其它組合語(yǔ)句,以達(dá)到其攻擊目的。
這里,我們舉一個(gè)簡(jiǎn)單的例子:
dim conn
dim rst
username=request.querystring("username")
password=request.querystring("password")
set conn=Server.CreateObject("ADODB.Connection")
conn.open strConn ‘?dāng)?shù)據(jù)庫(kù)連接字符串略
set rst=conn.execute("select * from login where username=‘" & username & "‘ and password=‘"
& password "‘")
if not rst.eof then
response.write "log in"
else
response.write "failed"
end if
rst.close
conn.close
其中,實(shí)施SQL Injection的關(guān)鍵代碼如下:set rst=conn.execute("select * from login where username=‘" & username & "‘ and password=‘" & password "‘")
在數(shù)據(jù)庫(kù)中,我們?cè)诒韑ogin中定義username=user , password= pwd。如果在登錄界面輸入正確,則username , password 嵌入到SQL語(yǔ)句中,組成的URL為:http://localhost/test.asp ? username=username&password=password
如果,入侵者提交這樣的URL又會(huì)怎樣呢?http://localhost / test.asp ? username=username&password=any ‘or 1=1--
結(jié)果,組成的SQL為:select * from login where username=‘username‘ and password=‘a(chǎn)ny‘ or 1=1--‘
而1=1永遠(yuǎn)成立,--后面的東西將被忽略。所以,不管正確的密碼是什么,這個(gè)語(yǔ)句返回的都將是login. 這就是最典型的SQL Injection,也是較為簡(jiǎn)單的一種。SQL Injection的威脅性也不止于此,還有諸如:得到后臺(tái)數(shù)據(jù)庫(kù)信息、讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù),甚至獲取系統(tǒng)信息,修改注冊(cè)表等。根據(jù)以上特點(diǎn),我們提出如下的防范措施:
首先,SQL Injection通常在與用戶交互時(shí)發(fā)生,那么對(duì)用戶的輸入進(jìn)行嚴(yán)格的過濾是非常重要的,尤其是對(duì)單引號(hào)、雙引號(hào)以及“――”等符號(hào)。而且不僅是對(duì)QUERY_STRING環(huán)境變量的過濾,還要對(duì)所有的表單提交的數(shù)據(jù)以及用戶可以通過修改來控制的下拉菜單、按鈕等所有的交互數(shù)據(jù)進(jìn)行過濾。同時(shí),考慮到很多惡意的攻擊可能會(huì)結(jié)合一些數(shù)據(jù)的組合來繞開這種過濾方法。因此,可以采用一種更安全的方法,進(jìn)行一些安全替換等。比如:將單引號(hào)替換為兩個(gè)單引號(hào)input = replace (input,” ’ ”,” ’ ’ ”)但是,僅從程序的角度來過濾是不夠的,還需要結(jié)合其它的安全手段,比如:使用防火墻過濾掉進(jìn)入80端口的單引號(hào)、雙引號(hào)以及“――”等特殊符號(hào)。此外,還要對(duì)SQL Server 進(jìn)行必要的安全配置,刪除一些存儲(chǔ)過程:
1.直接運(yùn)行系統(tǒng)命令的存儲(chǔ)過程:xp_cmdshell 。xp_cmdshell是進(jìn)入操作系統(tǒng)的最佳捷徑,是數(shù)據(jù)庫(kù)留給操作系統(tǒng)的一個(gè)大后門。
2. 刪除訪問注冊(cè)表的存儲(chǔ)過程,某些注冊(cè)表存儲(chǔ)過程甚至能夠讀出操作系統(tǒng)管理員的密碼來:xp_regaddmultistring, xp_regdeletekey, xp_regdeletevalue, xp_regenumvalues, xp_regread, xp_regremovemultistring, xp_regwrite 。
3.OLE存儲(chǔ)過程:Sp_OACreate, Sp_OADestroy, Sp_OAGetErrorInfo, Sp_OAGetProperty, Sp_OAMethod, Sp_OASetProperty, Sp_OAStop
4.其他有一定安全隱患的存儲(chǔ)過程:如xp_servicecontrol, xp_stopmail, xp_startmail, xp_perfmonitor, xp_unc_to_drive, xp_perfend, sp_sdidebug, xp_availablemedia, xp_deletemail, xp_dirtree, xp_dropwebtask, xp_dsninfo,等。
其實(shí)在多數(shù)應(yīng)用中根本用不到多少系統(tǒng)的存儲(chǔ)過程,而SQL Server的這么多系統(tǒng)存儲(chǔ)過程只是用來適應(yīng)廣大用戶需求的,所以請(qǐng)刪除不必要的存儲(chǔ)過程,因?yàn)橛行┫到y(tǒng)的存儲(chǔ)過程能很容易地被人利用起來提升權(quán)限或進(jìn)行破壞。在刪除這些存儲(chǔ)過程的之前,先備份。如果系統(tǒng)不能正常運(yùn)行,則恢復(fù)它。
三.結(jié)語(yǔ):
網(wǎng)絡(luò)安全技術(shù)是網(wǎng)絡(luò)安全管理的重要內(nèi)容,合理的系統(tǒng)及IIS配置能夠增強(qiáng)網(wǎng)絡(luò)安全。同時(shí),代碼的安全及防火墻的合理配置也是不可忽視的內(nèi)容。文中所提及的技術(shù)已在某些高校的就業(yè)管理系統(tǒng)中得到應(yīng)用。實(shí)踐證明,這些技術(shù)是可行和有效的。同時(shí),雖然本文是針對(duì)Win2000 server+SQL+IIS5.0做的探討,但也可以有選擇地應(yīng)用于其它的服務(wù)器配置。