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

圖1 設置身份驗證方法
之所以采用這種權限控制方式,主要是因為一般的虛擬主機中來賓用戶只在授權的目錄內擁有權限,在上一級目錄中因為沒有授權許可,無法瀏覽其它用戶的目錄內容。因為其無法進入別人的目錄修改數據,導致跨站攻擊失去威力。當然,如果該用戶對您的網站目錄設置情況非常了解,那就另當別論了。此外,很多虛擬主機服務商都喜歡將使用網站名稱來命名網站目錄,雖然便于管理和記憶,但是也可以讓黑客毫不費力地猜測到相應網站目錄的名稱,毫無疑問也添加了一些危險因素,建議最好為不同的網站目錄名稱后添加隨機字符串,來提高安全性。
對于采用IIS服務的服務器來說,可以在Guests組中添加一個賬戶,使其擁有來賓訪問權限。選中對應的網站目錄,在其屬性窗口中的“安全”面板中點擊“添加”按鈕,將該賬戶添加進來,并讓其擁有對該目錄的讀取和運行權限。在Internet信息服務窗口中選擇對應的網站目錄,在其屬性窗口中的“目錄安全性”面板中點擊“編輯”按鈕,在身份驗證方法窗口(如圖1所示)中取消“允許IIS控制密碼”項的選擇狀態,點擊“瀏覽”按鈕,選擇上述新建的賓客賬戶,并輸入密碼,點擊確定按鈕保存配置。該方法對于每個賬戶單獨授權,未經授權的內容就無法正常訪問,可以有效控制每個用戶的活動范圍。在設計網站時,很多用戶喜歡使用IIS+Access數據庫的模式,因為上面的權限設置關系,可能會導致無法對Access數據庫無法寫入的問題。為此,最好為該數據庫文件單獨開啟寫入權限。但是這對于虛擬主機來說有些不現實。所以在配置網站目錄權限時,應該賦予網站目錄寫入的權限。