從IIS到SQLServer數(shù)據(jù)庫(kù)安全

字號(hào):

從codered到nimda等,一大堆蠕蟲(chóng)把原來(lái)需要人工利用的漏洞都變成了程序自動(dòng)利用了,大家還想去手工操作這些IIS漏洞么?讓我們調(diào)整重心,去看看服務(wù)器常用的數(shù)據(jù)庫(kù)吧。
    一般網(wǎng)站都是基于數(shù)據(jù)庫(kù)的,特別是ASP、PHP、JSP這樣的用數(shù)據(jù)庫(kù)來(lái)動(dòng)態(tài)顯示的網(wǎng)站。很多網(wǎng)站可能多注意的是操作系統(tǒng)的漏洞,但是對(duì)數(shù)據(jù)庫(kù)和這些腳本的安全總是忽略,也沒(méi)有太多注意。
    從最普遍的腳本問(wèn)題開(kāi)始,這些都是老話題了,大家可以參考Hectic寫的《關(guān)于數(shù)據(jù)庫(kù)的簡(jiǎn)單入侵和無(wú)賴破壞,以天融信做例子》,該文章對(duì)從SQL腳本問(wèn)題說(shuō)得非常詳細(xì)。對(duì)于腳本安全的解決,也可以通過(guò)過(guò)濾來(lái)實(shí)現(xiàn),可以參考我以前寫的。對(duì)于ASP來(lái)說(shuō),可以使用下面這個(gè)過(guò)濾函數(shù):
     Function Filter_SQL(strData)
    Dim strFilter
    Dim blnFlag
    Dim i
    strFilter="’,;,//,--,@,_,exec,declare"
    blnFlag=Flase
    Dim arrayFilter
    arrayFilter=Split(strFilter,",")
    For i=0 To UBound(arrayFilter)
    If Instr(strData,arrayFilter(i))>0 Then
    blnFlag=True
    Exit For
    End If
    Next
    If blnFlag Then
    Response.Redirect "wrong.asp"
    Else
    Filter_SQL=strData
    End If
    End Function
    對(duì)于MS SQL Server數(shù)據(jù)庫(kù)來(lái)說(shuō),安全問(wèn)題不僅僅局限在腳本上了?!疤鞖⒌奈④洝钡南到y(tǒng)性很強(qiáng),整個(gè)基于WINDOWS系統(tǒng)的應(yīng)用都有很強(qiáng)的關(guān)聯(lián)性,對(duì)SQL Server來(lái)說(shuō),基本可以把數(shù)據(jù)庫(kù)管理和系統(tǒng)管理等同起來(lái)了。SQL Server默認(rèn)的管理員帳號(hào)“sa”的密碼是空的,這給多數(shù)NT服務(wù)器產(chǎn)生一個(gè)安全漏洞。小榕的“SQLRCMD”,就能夠利用獲得的數(shù)據(jù)庫(kù)管理員帳號(hào)執(zhí)行系統(tǒng)命令。
    在SQL Server中有很多系統(tǒng)存儲(chǔ)過(guò)程,有些是數(shù)據(jù)庫(kù)內(nèi)部使用的,還有一些就是通過(guò)執(zhí)行存儲(chǔ)過(guò)程來(lái)調(diào)用系統(tǒng)命令。
    系統(tǒng)存儲(chǔ)過(guò)程:xp_cmdshell
    就是以操作系統(tǒng)命令行解釋器的方式執(zhí)行給定的命令字符串。它就具體語(yǔ)法是:xp_cmdshell {’command_string’} [, no_output]
    xp_cmdshell在默認(rèn)情況下,只有 sysadmin 的成員才能執(zhí)行。但是,sysadmin也可以授予其他用戶這個(gè)執(zhí)行權(quán)限。在早期版本中,獲得 xp_cmdshell 執(zhí)行權(quán)限的用戶在 SQL Server 服務(wù)的用戶帳戶中運(yùn)行命令??梢酝ㄟ^(guò)配置選項(xiàng)配置 SQL Server,以便對(duì) SQL Server 無(wú) sa 訪問(wèn)權(quán)限的用戶能夠在SQLExecutiveCmdExec Windows NT 帳戶中運(yùn)行 xp_cmdshell。在 SQL Server 7.0 中,該帳戶稱為 SQLAgentCmdExec。現(xiàn)在對(duì)于SQL Server2000,只要有一個(gè)能執(zhí)行該存儲(chǔ)過(guò)程的帳號(hào)就可以直接運(yùn)行命令了。