曾經很早就在網上看到一篇關于<asp.net虛擬主機的重大隱患>的文章,當時并不在意,做過asp虛擬主機的朋友可能都知道,即對每一個用戶都設置一個獨立的服務器用戶和單個目錄的操作權限,能夠基本上解決asp的fso問題。
在網上無意中發現了一個叫做webadmin的asp.net-webshell,對自己的服務器進行測試的時候,讓我大吃一驚,居然對我服務器的c盤有讀取的權限。以及對整個硬盤的修改刪除權限。這樣的話,那么我的服務器的安全……
為了進一步證實,本人曾在國內一些著名的虛擬主機提供商上作過測試,均有和我一樣的問題。
有必要先介紹一下漏洞的原因。
ASP中常用的標準組件:FileSystemObject,這個組件為 ASP 提供了強大的文件系統訪問能力,可以對服務器硬盤上的任何有權限的目錄和文件進行讀寫、刪除、改名等操作。FSO對象來自微軟提供的腳本運行庫scrrun.dll中。
在ASP.NET中我們發現這一問題仍然存在,并且變得更加難以解決。這是因為.NET中關于系統IO操作的功能變得更加強大,而使這一問題更嚴重的是ASP.NET所具有的一項新功能,這就組件不需要象ASP那樣必須要使用regsvr32來注冊了,只需將Dll類庫文件上傳到bin目錄下就可以直接使用了。這一功能確實給開發ASP.NET帶來了很大的方便,但是卻使我們在ASP中將此dll刪除或者改名的解決方法失去效用了,防范此問題就變得更加復雜。需要進一步了解的朋友可以看<asp.net虛擬主機的重大隱患>一文,本文就不再重復。只針對此問題引出虛擬主機的安全設置。
網上提出針對此問題用Microsoft .NET Framework Configration設置System.io的對目錄讀取的權限,經過我們長時間的測試沒有成功,可能是.net framework1.1機制改革了?
廢話不說。先說說解決的思路:在 IIS 6 中,Web 應用程序的工作進程設置為以進程標識“Network Service”運行。在 IIS 5 中,進程外 Web 應用程序則設置為以 IWAM_<服務器名> 帳戶運行,這個帳戶是普通的本地用戶帳戶。
Network Service 是 Windows Server 2003 中的內置帳戶。了解 IIS 5 上的本地用戶帳戶(IUSR 和 IWAM)與這個內置帳戶之間的區別是非常重要的。Windows 操作系統中的所有帳戶都分配了一個 SID(安全標識,Security ID)。服務器是根據 SID,而不是與 SID 相關的名稱來識別服務器上所有帳戶的,而我們在與用戶界面進行交互時,則是使用名稱進行交互的。服務器上創建的絕大部分帳戶都是本地帳戶,都具有一個唯一的 SID,用于標識此帳戶隸屬于該服務器用戶數據庫的成員。由于 SID 只是相對于服務器是唯一的,因此它在任何其他系統上無效。所以,如果您為本地帳戶分配了針對某文件或文件夾的 NTFS 權限,然后將該文件及其權限復制到另一臺計算機上時,目標計算機上并沒有針對這個遷移 SID 的用戶帳戶,即使其上有一個同名帳戶也是如此。這使得包含 NTFS 權限的內容復制可能出現問題。
內置帳戶是由操作系統創建的、一類較為特別的帳戶或組,例如 System 帳戶、Network Service 和 Everyone 組。這些對象的重要特征之一就是,它們在所有系統上都擁有一個相同的、眾所周知的 SID。當將分配了 NTFS 權限的文件復制到內置帳戶時,權限在服務器之間是有效的,因為內置帳戶的 SID 在所有服務器上都是相同的。Windows Server 2003 服務中的 Network Service 帳戶是特別設計的,專用于為應用程序提供訪問網絡的足夠權限,而且在 IIS 6 中,無需提升權限即可運行 Web 應用程序。這對于 IIS 安全性來說,是一個特大的消息,因為不存在緩沖溢出,懷有惡意的應用程序無法破譯進程標識,或是對應用程序的攻擊不能進入 System 用戶環境。更為重要的一點是,再也不能形成針對 System 帳戶的“后門”,例如,再也無法通過 InProcessIsapiApps 元數據庫項利用加載到 Inetinfo 的應用程序。
Network Service 帳戶在創建時不僅僅考慮了在 IIS 6 中的應用。它還具有進程標識 W3WP.exe 的絕大部分(并不是全部)權限。如同 ASPNET 用戶為了運行 ASP.net 應用程序,需要具有 IIS 5 服務器上某些位置的訪問權限,進程標識 W3WP.exe 也需要具有類似位置的訪問權限,而且還需要一些默認情況下沒有指派給內置組的權限。
為了管理的方便,在安裝 IIS 6 時創建了 IIS_WPG 組(也稱為 IIS 工作進程組,IIS Worker Process Group),而且它的成員包括 Local System(本地系統)、Local Service(本地服務)、Network Service(網絡服務)和 IWAM 帳戶。IIS_WPG 的成員具有適當的 NTFS 權限和必要的用戶權限,可以充當 IIS 6 中工作進程的進程標識。
因此,Network Service 帳戶提供了訪問上述位置的權限,具有充當 IIS 6 工作進程的進程標識的充足權限,以及具有訪問網絡的權限。
Msdn上說:在 Windows Server 2003 中,用戶上下文稱為 NETWORK SERVICE。這些用戶帳戶是在 .NET Framework 安裝過程中創建的,它具有唯一的不易破解的密碼,并僅被授予有限的權限。ASPNET 或 NETWORK SERVICE 用戶只能訪問運行 Web 應用程序所需的特定文件夾,如 Web 應用程序存儲已編譯文件的 /bin 目錄。
要將進程標識設置為特定用戶名,以取代 ASPNET 或 NETWORK SERVICE 用戶標識,您提供的用戶名和密碼都必須存儲在 machine.config 文件中。
但是根據實際情況,asp.net的system.io可以無限制訪問不設防的服務器路徑。不知道這算不算一個ms的重大漏洞。而且根本不能使iis以machine.config的用戶執行asp.net程序。J
如何解決呢?答案就是―應用程序池。
IIS 6.0 在被稱為應用程序隔離模式(隔離模式)的兩種不同操作模式下運行,它們是:工作進程隔離模式和 IIS 5.0 隔離模式。這兩種模式都要依賴于 HTTP.sys 作為超文本傳輸協議 (HTTP) 偵聽程序;然而,它們內部的工作原理是截然不同的。
IIS 功能 | IIS 5.0隔離模式宿主/組件 | 工作進程隔離模式宿主/組件 |
工作進程管理 | N/A | Svchost.exe/WWW 服務 |
工作進程 | N/A | W3wp.exe/工作進程 |
運行進程內ISAPI 擴展 | Inetinfo.exe | W3wp.exe |
運行進程外ISAPI 擴展 | DLLHost.exe | N/A(所有的 ISAPI 擴展都在進程內) |
運行ISAPI篩選器 | Inetinfo.exe | W3wp.exe |
HTTP.sys 配置 Svchost.exe/WWW 服務 | Svchost.exe/WWW | 服務 |
HTTP 協議支持 | Windows內核/HTTP.sys | Windows 內核/HTTP.sys |
IIS配置數據庫 | Inetinfo.exe | Inetinfo.exe |
FTP | Inetinfo.exe | Inetinfo.exe |
NNTP | Inetinfo.exe | Inetinfo.exe |
SMTP | Inetinfo.exe | Inetinfo.exe |
由此可見,我們只能使用工作進程隔離模式解決.net的安全問題。
默認情況下,IIS 6.0在工作進程隔離模式下運行,如圖五所示。在這種模式中,對于每一個Web應用,IIS 6.0都用一個獨立的w3wp.exe的實例來運行它。w3wp.exe也稱為工作進程(Worker Process),或W3Core。
可靠性和安全性??煽啃缘奶岣呤且驗橐粋€Web應用的故障不會影響到其他Web應用,也不會影響http.sys,每一個Web應用由W3SVC單獨地監視其健康狀況。安全性的提高是由于應用程序不再象IIS 5.0和IIS 4.0的進程內應用那樣用System帳戶運行,默認情況下,w3wp.exe的所有實例都在一個權限有限的“網絡服務”帳戶下運行,如圖六所示,必要時,還可以將工作進程配置成用其他用戶帳戶運行。
按照此方法在創建iis_test_user賬戶
然后分別把app_test_user添加到iis_wpg組,把iis_test_user添加到Guests組。刪除其他組。
然后,建立相應的應用程序池。
依次打開Internet 信息服務→本地計算機→應用程序池→新建→應用程序池
新建一個名字為test的應用程序池
編輯test應用程序池的屬性→標示→配置→用戶名→瀏覽→把用戶名改為我們剛才建立的app_test_user并輸入相應的密碼
最后設定服務器的安全。
C:只給administrators和system完全控制的權利,刪除掉其他所有的權限,不替換子目錄
C:/Documents and Settings繼承父項,并替換子目錄。
C:/Program Files繼承父項,并替換子目錄,并把C:/Program Files/Common Files/Microsoft Shared繼承屬性刪除并復制現有屬性,增加users的讀取權限并替換子目錄(這樣做是為了能夠讓asp,asp.net使用access等數據庫)。
C:/windows刪除繼承,并復制現有屬性,只給予administrators,system完全控制和users讀取的權限并替換子目錄
其余所有的盤都只給于administrators和system用戶的完全控制權限,刪除其他所有用戶并替換子目錄。
D:/test(用戶網站目錄)繼承現有屬性并增加app_test_user和iis_test_user完全控制的權限并替換子目錄。
以后每增加一個網站都以此類推。
但是,至此,system.io還是對c:/windows又讀取權限的,(懷疑network servers用戶屬于users組,但是好多服務都要使用users組來執行的,所以不能把c:/windwos去掉users組的讀取權限)但必須知道系統路徑,有兩種方案解決。
1、 再安裝系統的時候使用無人值守安裝,更換c:/windows默認安裝路徑,如更改為c:/testtest(要符合dos的命名規則,不能超過8個字符)。這個是必需的
2、 以下位置具有指派給 IIS_WPG 的權限:
%windir%/help/iishelp/common 亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb