■
筆者的一個朋友為某家公司做了個網(wǎng)站,為了確保其安全性,請筆者對其進行一番安全測試。筆者進入該網(wǎng)站,發(fā)現(xiàn)其是使用PHP開發(fā)的,界面設(shè)計得比較精美,功能頗為豐富。不過筆者經(jīng)過仔細(xì)檢測,發(fā)現(xiàn)其中存在文件上傳漏洞。于是筆者拿出不久前捕獲的某款PHP木馬,將其上傳到目標(biāo)主機上,進而輕松入侵得手。原來,該網(wǎng)站存在于某個虛擬主機服務(wù)器中,因為權(quán)限設(shè)置不嚴(yán)格,使PHP木馬擁有了對硬盤的讀寫權(quán)限,例如在其E盤中發(fā)現(xiàn)了上百個網(wǎng)站,一旦黑客入侵得手,就可以隨心所欲進行破壞了。例如利用WebShell控制接口,可以通過各種手段提權(quán)獲得更高的控制權(quán)力。看來,一個不起眼的上傳漏洞就會讓黑客輕松控制整個虛擬服務(wù)器。從以上測試實例中,不難發(fā)現(xiàn)提高虛擬主機安全防護能力的重要性。
要想提高虛擬主機的安全性,防止黑客利用各種腳本進行攻擊,最簡單易行的方法就是安裝功能強悍的殺毒軟件,例如卡巴斯基、ESET NOD32等。有了殺毒軟件的保護,一般的入侵腳本很容易被干掉。不過,這也不是萬無一失的策略,如果黑客對入侵腳本進行了加密處理,殺毒軟件照樣會對其視而不見。例如,在基于Windows的IIS服務(wù)器中,黑客慣用的伎倆是通過漏洞上傳ASP木馬來打開入侵的通道。為此,可以通過讓FSO(FileSystemObject)組件失效來廢除ASP木馬的活力。
具體的實現(xiàn)方法分為兩種,其一是運行“regedit.exe”程序,在注冊表編輯器中打開“HKEY_CLASSES_ROOTScripting.FileSystemObject”分支,將其中的“Scripting.FileSystemObject”名稱進行修改,例如修改為“Scripting.FileSystemObject90” 等。 這樣,在ASP木馬試圖調(diào)用諸如“Set 對象名=Server.CreateObject("Scripting.FilesystemObject ")”語句時,就變成了“Set對象名=Server.Create Object("Scripting.FilesystemObject90")”格 式,使得不知道默認(rèn)ProgID改為何值的人無法調(diào)用FSO組件,進而讓ASP木馬無法運行。
該方法雖然簡單易行,但是對于精通腳本技術(shù)的黑客來說,可以采用HTML語法中的“
為了防止黑客使用Wscript.Shell組件調(diào)用系統(tǒng)基本命令進行滲透,可以在注冊表中打開“HKEY_CLASSES_ROOTWScript.Shell”和“HKEY_CLASSES_ROOTWScript.Shell.1”分支,將其中的“WScript.Shell”和“WScript.Shell.1”進行更名。同理,可以在上述分支下分別選中“CLSID”項,在右側(cè)窗口中更改其CSLID值,防止非法調(diào)用情況的發(fā)生。為了防止黑客使用Shell.Application來調(diào)用系統(tǒng)內(nèi)核運行基本命令進行滲透,可以對注冊表中 的“HKEY_CLASSES_ROOTShell.Application”和“H K E Y_C L A S S E S_ROOTShell.Application.1”分支進行類似的修改,這里不再贅述。為了禁用Guest賬戶使用“shell32.dll”來調(diào)用Shell.Application組件,可以使 用“cacls %systemroot%system32shell32.dll/e/d guests”命令來實現(xiàn)。類似的執(zhí) 行“cacls %systemroot%system32cmd.exe/e/d guests”命令,可以禁止Guest賬戶調(diào)用CMD.exe程序執(zhí)行命令。
如果虛擬主機提供對PHP環(huán)境的支持,則主要應(yīng)該防范PHP木馬借助PHP內(nèi)部函數(shù)進行入侵。PHP核心配置文件名為“php.ini”,我們主要針對該文件進行修改。在Windows中,該文件默認(rèn)位于“%systemroot%”文 件 夾中。在Linux中其位于“etc/php.ini”路徑。將該文件中的“safe_mode=Off”修 改 為“safe_mode=On”,打 開 PHP安全模式。找到“disable_function=”欄,將其內(nèi)容修改為“phpinfo,system,exec,pa ssthru,shell_exec,popen,is_dir”這樣可以禁用以上常用的PHP內(nèi)部函數(shù)。關(guān)閉“phpinfo”函數(shù)可以防止泄露PHP基本信息。關(guān)閉“system,exec,passthru,shell_exec,popen”等函數(shù)可以防止PHP木馬獲得WebShell執(zhí)行接口,關(guān)閉“is_dir”函數(shù),使黑客即使獲得了everyone賬戶的可讀權(quán)限,也無法顯示服務(wù)器的文件信息。將“display_errors=On”修改為“display_errors=Off”,可 以 禁 止 顯 示PHP各種錯誤提示信息。經(jīng)過以上修改,一般的PHP木馬就會失效了,當(dāng)然,我們也不能因噎廢食,不能僅僅為了防御的需要,將常用的PHP函數(shù)全部禁用。例如當(dāng)禁用了“fopen,mkdir,rmdir,chmod,dir,shell_exec,unlink,fclose,fwrite,fileexists,closedir,is_dir,delfile,readdir,opendir,copy,fileperms”等,就可能對相關(guān)的網(wǎng)站。論壇的正常運行造成障礙,雖然攔截了PHP木馬,但是PHP的基本功能也損失很大,這樣就有些得不償失了。
當(dāng)然,要想保護虛擬主機的安全,還需要從根本問題上下功夫,這就是對相關(guān)磁盤或者目錄的訪問權(quán)限進行合理的控制,讓不同等級的用戶只能嚴(yán)格依照自己的權(quán)限操作。例如,對于運行了Apache服務(wù)的Windows系統(tǒng)來說,可以依次選擇所有的分區(qū),在其屬性窗口中的“安全”面板中點擊“刪除”按鈕,將“組或用戶名稱”列表中除了“Administrators”和“System”組之外的所有賬戶信息全部刪除。對于每個虛擬主機用戶目錄,打開其屬性窗口中的“安全”面板,點擊“添加”按鈕,添加一個Everyone賬戶,并賦予該賬戶讀取,寫入,列出文件夾目錄的權(quán)限。
圖1 設(shè)置身份驗證方法
之所以采用這種權(quán)限控制方式,主要是因為一般的虛擬主機中來賓用戶只在授權(quán)的目錄內(nèi)擁有權(quán)限,在上一級目錄中因為沒有授權(quán)許可,無法瀏覽其它用戶的目錄內(nèi)容。因為其無法進入別人的目錄修改數(shù)據(jù),導(dǎo)致跨站攻擊失去威力。當(dāng)然,如果該用戶對您的網(wǎng)站目錄設(shè)置情況非常了解,那就另當(dāng)別論了。此外,很多虛擬主機服務(wù)商都喜歡將使用網(wǎng)站名稱來命名網(wǎng)站目錄,雖然便于管理和記憶,但是也可以讓黑客毫不費力地猜測到相應(yīng)網(wǎng)站目錄的名稱,毫無疑問也添加了一些危險因素,建議最好為不同的網(wǎng)站目錄名稱后添加隨機字符串,來提高安全性。
對于采用IIS服務(wù)的服務(wù)器來說,可以在Guests組中添加一個賬戶,使其擁有來賓訪問權(quán)限。選中對應(yīng)的網(wǎng)站目錄,在其屬性窗口中的“安全”面板中點擊“添加”按鈕,將該賬戶添加進來,并讓其擁有對該目錄的讀取和運行權(quán)限。在Internet信息服務(wù)窗口中選擇對應(yīng)的網(wǎng)站目錄,在其屬性窗口中的“目錄安全性”面板中點擊“編輯”按鈕,在身份驗證方法窗口(如圖1所示)中取消“允許IIS控制密碼”項的選擇狀態(tài),點擊“瀏覽”按鈕,選擇上述新建的賓客賬戶,并輸入密碼,點擊確定按鈕保存配置。該方法對于每個賬戶單獨授權(quán),未經(jīng)授權(quán)的內(nèi)容就無法正常訪問,可以有效控制每個用戶的活動范圍。在設(shè)計網(wǎng)站時,很多用戶喜歡使用IIS+Access數(shù)據(jù)庫的模式,因為上面的權(quán)限設(shè)置關(guān)系,可能會導(dǎo)致無法對Access數(shù)據(jù)庫無法寫入的問題。為此,最好為該數(shù)據(jù)庫文件單獨開啟寫入權(quán)限。但是這對于虛擬主機來說有些不現(xiàn)實。所以在配置網(wǎng)站目錄權(quán)限時,應(yīng)該賦予網(wǎng)站目錄寫入的權(quán)限。