1、Access數(shù)據(jù)庫防下載
數(shù)據(jù)庫被下載這對Web來說幾乎是毀滅性的,因為攻擊者從中可以獲取包括管理員帳戶及密碼等在內(nèi)的敏感信息,然后實施進(jìn)一步的攻擊。可被下載的數(shù)據(jù)庫主要是Access數(shù)據(jù)庫,采用這種數(shù)據(jù)庫的Web站點不在少數(shù)。防止Access數(shù)據(jù)庫下載,可以從以下幾個方面入手。
(1)數(shù)據(jù)庫改名
數(shù)據(jù)庫改名包括兩部分,首先將其改成比較生僻的名稱,建議名字足夠長并使用某些特殊字符以防被攻擊者猜中。另外,將mdb后綴改為asp,以防數(shù)據(jù)庫被下載。當(dāng)然數(shù)據(jù)庫改名后,數(shù)據(jù)庫連接配置文件也要進(jìn)行修改。(圖1)
(2)改變數(shù)據(jù)庫路徑
站點系統(tǒng)都有默認(rèn)的數(shù)據(jù)庫路徑,由于安全意識淡薄,部署Web站點時有很多人不去修改數(shù)據(jù)庫路徑,因而攻擊者很容易地猜到該站點的數(shù)據(jù)庫路徑。
更改數(shù)據(jù)庫路徑,大家可以在站點目錄下創(chuàng)建比較生僻的目錄,然后將數(shù)據(jù)庫文件拷貝到該目錄中。當(dāng)然,更改數(shù)據(jù)庫路徑后,需要修改站點系統(tǒng)的數(shù)據(jù)庫連接文件。一般asp站點系統(tǒng)的數(shù)據(jù)庫連接文件是conn.asp。打開該文件后,然后根據(jù)實際情況進(jìn)行修改,使得其跟當(dāng)前的數(shù)據(jù)庫路徑相一致。(圖2)
(3)設(shè)置好目錄權(quán)限
要設(shè)置好數(shù)據(jù)庫目錄的訪問權(quán)限,原則是權(quán)限最小化以防止非正常的訪問。因為Web程序是通過IIS用戶運行的,我們只要給IIS用戶讀取和寫入權(quán)限,然后通過“IIS管理器”把這個目錄的腳本執(zhí)行權(quán)限去掉,防止入侵者在該目錄中通過上傳獲得webshell了。(圖3)
(4)添加mdb的擴(kuò)展映射
IIS對于不能解析的文件類型就會彈出下載對話框讓用戶下載,我們可以通過在IIS管理器中添加對mdb的擴(kuò)展映射,防止數(shù)據(jù)庫被下載。其設(shè)置方法是:打開IIS管理器定位到相應(yīng)的Web站點,右鍵選擇“屬性”,然后依次點擊“主目錄→配置→映射”,在“應(yīng)用程序擴(kuò)展”里面添加.mdb文件應(yīng)用解析,至于用于解析它的可執(zhí)行文件大家可以自己進(jìn)行選擇,只要讓攻擊者無法訪問數(shù)據(jù)庫文件就可以了。(圖4)
(5)數(shù)據(jù)庫改造
思路是將數(shù)據(jù)庫后綴名(.mdb)修改為.asp,然后在數(shù)據(jù)庫中加上一個NotDownLoad的表以防數(shù)據(jù)庫被下載。具體操作方法如下:
首先新建一個.asp文件(notdown.asp),其代碼如下:
db="DataShop.asp" '這里改成你的數(shù)據(jù)庫地址,這是相對根目錄的地址
set conn=server.createobject("Adodb.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db)
conn.open connstr
conn.execute("create table notdownload(notdown oleobject)")
set rs=server.createobject("adodb.recordset")
sql="select * from notdownload"
rs.open sql,conn,1,3
rs.addnew
rs("notdown").appendchunk(chrB(asc("<")) & chrB(asc("%")))
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
然后在服務(wù)器端運行notdown.asp,這樣在數(shù)據(jù)庫添加了包含notdown字段的notdownload數(shù)據(jù)表,即可防止數(shù)據(jù)庫的下載,因為notdown有一個值是"< %",asp運行是因缺少"% >"關(guān)閉標(biāo)記而拒絕訪問,下載當(dāng)然會失敗。(圖5)
2、MSSQL數(shù)據(jù)庫防注入
MSSQL數(shù)據(jù)庫是大中型Web站點常采用的數(shù)據(jù)庫,對于SQL數(shù)據(jù)最大的威脅是注入。攻擊者通過注入來調(diào)用SQL語句執(zhí)行系統(tǒng)命令,因此其危險性更大。一個注入點,有可能造成整個Web服務(wù)器的淪陷。防MSSQL注入可以從下面幾個方面入手。
(1)慎重選擇建站系統(tǒng)
通過站點系統(tǒng)建立一個Web站點是非常容易的,但是某些站點系統(tǒng)代碼編寫不夠嚴(yán)謹(jǐn),考慮不周,變量過濾不嚴(yán)等使得可被攻擊者利用。因此,選擇一款安全的站點系統(tǒng)是至關(guān)重要的。當(dāng)然,沒有百分之百安全的站點系統(tǒng)。管理員如果懂代碼的話可以進(jìn)行檢測分析,看看是否有漏洞。另外,可以扮演入侵者進(jìn)行入侵檢測。最后,及時打補(bǔ)丁也是非常重要的。
(2)最小權(quán)限連接數(shù)據(jù)庫
Web站點連接數(shù)據(jù)庫都是通過相應(yīng)的帳戶進(jìn)行連接,在這些帳戶中SA是權(quán)限最大的也是最危險的。數(shù)據(jù)庫不要用SA帳戶,使用SA帳戶連接數(shù)據(jù)庫對服務(wù)器來說就是一場災(zāi)難。一般來說可以使用DB_OWNER權(quán)限帳戶連接數(shù)據(jù)庫,如果可以正常運行,使用public用戶最安全的。設(shè)置成dbo權(quán)限連接數(shù)據(jù)庫之后,入侵者基本就只能通過猜解用戶名和密碼或者是差異備份來獲得webshell了,對于前者,我們可以通過加密和修改管理后臺的默認(rèn)登陸地址來防御。對于差異備份,我們知道它的條件是有備份的權(quán)限,并且要知道web的目錄。這樣被攻擊的可能性大大地降低。(圖6)
(3)刪除危險的存儲過程
MSSQL數(shù)據(jù)庫系統(tǒng)集成了較多的存儲過程,這些命令集方便了我們的操作當(dāng)然也為攻擊者入侵Web提供了便利。因此我們要根據(jù)需要刪除某些在Web中用不到的,并且可被攻擊者利用才存儲過程。比如xp_regread和xp_dirtree這兩個存儲過程可被攻擊者用來讀取注冊表信息和列目錄,我們可以刪除。另外,xp_cmdshell可被用來執(zhí)行DOS命令比如建立系統(tǒng)帳戶等等,是非常危險的。sp_makwebtask過程,可以讀取SQL SELECT命令所得到的結(jié)果到表格形式的HTML文件中。這些比較危險可被攻擊者利用的存儲過程我們可以刪除。比如刪除xp_cmdshell可以執(zhí)行“exec master..sp_dropextendedproc xp_cmdshell”,其它的類似。(圖7)
(4)修改錯誤頁,誤導(dǎo)攻擊者
SQL注入入侵是根據(jù)IIS給出的ASP錯誤提示信息來入侵的,如果我們把IIS設(shè)置成不管出什么樣的ASP錯誤,只給出一種錯誤提示信息,即http 500錯誤,那么攻擊者就無法獲得敏感信息實施入侵了。打開IIS管理器選擇相應(yīng)的Web站點打開其站點屬性窗口,在“自定義錯誤”選項卡下選擇“500:100”點擊“編輯”打開“編輯自定義錯誤屬性”窗口,消息類型選擇“文件”,然后通過瀏覽定位到自己構(gòu)造的錯誤頁,比如“c:test.htm”,然后確定即可。(圖8)
總結(jié):防下載、防注入這是從Web安全的角度出發(fā)實施的非常規(guī)措施,在常態(tài)下我們一定要做好Web數(shù)據(jù)庫的備份,這才是最基本的。