ASP.NET虛擬主機的重大安全隱患
添加時間:2010-11-7
添加:
admin
將FSO組件和刪除或改名的方式我們不再過多的加以說明了,這一類的解決方法網絡上已經有很多文章介紹了。
另外還有一種關于ASP的FSO組件漏洞的相應解決方案,即根據用戶設置權限。在IIS里,可以設置每個站點的匿名訪問所使用的帳號,默認為IUSR_ HostName,這一方法的原理就是針對每一個共享主機用戶分別設置一個Windows帳號,如IUSR_HostName1,IUSR_ HostName 2等,然后將每一個用戶限制在各自的Web目錄下。
我們仔細的研究一下這種方案,可以發現這個方案無法真正實現安全。因為系統運行ASP時并不是使用的IUSR_ HostName帳號,而是IWAM_ HostName帳號,就象在ASP.NET中使用的用戶ASPNET一樣。也就是說每個ASP程序所擁有的權限并不是IUSR_ HostName的權限,而是IWAM_HostName用戶的權限。這樣的方法無法真正的將每個共享主機用戶的文件系統訪問權限限制在各自的虛擬站點中,每個用戶仍然可以訪問別人的代碼。所以這種方法在ASP.NET中無法真正實現用戶之間的安全性。
在ASP.NET中相應的運行ASP.NET程序的帳號為ASPNET,和上面所說的ASP中的解決方案類似,我們只能限制此用戶不能訪問系統目錄等其他目錄,但是無法防止用戶訪問其他共享主機用戶的程序代碼,無法從根本上杜絕這種問題。
那么,有沒有真正的解決方案了呢?
有!這就是.NET Framework 的新特性――代碼訪問安全性
為了更好的理解這一問題的解決方法,我們需要先介紹一下.NET Framework的安全機制。然后再結合我們的實際問題來討論解決方案。
為了解決安全問題,.NET Framework提供了一種稱為代碼訪問安全性的安全機制。代碼訪問安全性允許根據代碼的來源和代碼的標識等屬性將代碼設置為不同級別的信任代碼,同時還詳細定義了不同級別的對代碼的信任,從而可以詳細的對代碼設置各自的權限而不是將最大權限賦給所有的代碼。使用代碼訪問安全性,可以減小惡意代碼或各種錯誤的代碼帶來的嚴重的系統安全性問題的可能性。您可以設置允許代碼執行的一組操作,同樣可以設置永遠不允許代碼執行的一組操作。
實現代碼訪問安全性的基礎就是JIT(運行時編譯)和IL(中間代碼)。所以所有以公共語言運行庫為目標的托管代碼都會受益于代碼訪問安全性。非托管代碼則無法完全使用代碼訪問安全性。
下面我們將介紹一下代碼訪問安全性實現的各種功能:
代碼訪問安全性是控制代碼對受保護資源和操作的訪問權限的一種機制。在 .NET Framework中,代碼訪問安全性執行下列功能:
· 定義權限和權限集,它們表示訪問各種系統資源的權限。
· 使管理員能夠通過將權限集與代碼組關聯來配置安全策略。
· 使代碼能夠請求運行所需權限以及其他一些有用的權限,以及指定代碼絕對不能擁有哪些權限。
· 根據代碼請求的權限和安全策略允許的操作,向加載的每個程序集授予權限。
· 使代碼能夠要求其調用方擁有特定的權限。
· 使代碼能夠要求其調用方擁有數字簽名,從而只允許特定組織或特定站點的調用方來調用受保護的代碼。
· 通過將調用堆棧上每個調用方所授予的權限與調用方必須擁有的權限相比較,加強運行時對代碼的限制。
為了確定是否已授予代碼相應的權限,.NET運行庫的安全系統將遍歷整個調用堆棧,將每個調用方所授予的權限與目前要求的權限相比較。如果調用堆棧中的任何調用方沒有要求的權限,則會引發安全性異常,并會拒絕訪問和相應的操作。堆棧步旨在防止引誘攻擊;在這種攻擊中,受信程度較低的代碼調用高度信任的代碼,并使用高度信任的代碼執行未經授權的操作。在運行時要求所有調用方都擁有權限將影響性能,但對防止代碼遭受攻擊至關重要。若要優化性能,可以使代碼執行較少的堆棧步;但是,任何時候這樣做時均必須確保不會暴露安全缺陷。
還存在另外一種代碼訪問安全性的常見用途,即應用程序將控件從網絡 Web 站點直接下載到客戶端,這種方式的代碼安全性也是可以在客戶端進行設置的,根據簽名等數據權限證書來確定是不是可以允許下載的控件運行。這種方法類似于ActiveX的安全性設置,但是比之在設置權限更加詳細和強大。同JAVA APPLET的沙箱安全機制相比,.NET 的客戶端控件可以在本地簡單設置后訪問客戶端的各種資源。由于這一方面的用途不是我們的重點,所以我們在這里就不再更詳細的討論其用途及其實現原理了。
下面我們就談談如何應用這一安全特性來解決ASP.NET中存在的系統安全漏洞。由于我們介紹的系統是共享主機,所以有其特殊性,即系統管理員無法事先給所有的代碼賦予相應的權限,因為每個用戶都可能有各種權限要求,并且這些要求特殊權力的代碼在使用中都可能出現的,所以在權限管理上隨時都有各種要求。
因此在權限設置方面,不僅僅是管理員設置,也包括了各個共享主<
另外還有一種關于ASP的FSO組件漏洞的相應解決方案,即根據用戶設置權限。在IIS里,可以設置每個站點的匿名訪問所使用的帳號,默認為IUSR_ HostName,這一方法的原理就是針對每一個共享主機用戶分別設置一個Windows帳號,如IUSR_HostName1,IUSR_ HostName 2等,然后將每一個用戶限制在各自的Web目錄下。
我們仔細的研究一下這種方案,可以發現這個方案無法真正實現安全。因為系統運行ASP時并不是使用的IUSR_ HostName帳號,而是IWAM_ HostName帳號,就象在ASP.NET中使用的用戶ASPNET一樣。也就是說每個ASP程序所擁有的權限并不是IUSR_ HostName的權限,而是IWAM_HostName用戶的權限。這樣的方法無法真正的將每個共享主機用戶的文件系統訪問權限限制在各自的虛擬站點中,每個用戶仍然可以訪問別人的代碼。所以這種方法在ASP.NET中無法真正實現用戶之間的安全性。
在ASP.NET中相應的運行ASP.NET程序的帳號為ASPNET,和上面所說的ASP中的解決方案類似,我們只能限制此用戶不能訪問系統目錄等其他目錄,但是無法防止用戶訪問其他共享主機用戶的程序代碼,無法從根本上杜絕這種問題。
那么,有沒有真正的解決方案了呢?
有!這就是.NET Framework 的新特性――代碼訪問安全性
為了更好的理解這一問題的解決方法,我們需要先介紹一下.NET Framework的安全機制。然后再結合我們的實際問題來討論解決方案。
為了解決安全問題,.NET Framework提供了一種稱為代碼訪問安全性的安全機制。代碼訪問安全性允許根據代碼的來源和代碼的標識等屬性將代碼設置為不同級別的信任代碼,同時還詳細定義了不同級別的對代碼的信任,從而可以詳細的對代碼設置各自的權限而不是將最大權限賦給所有的代碼。使用代碼訪問安全性,可以減小惡意代碼或各種錯誤的代碼帶來的嚴重的系統安全性問題的可能性。您可以設置允許代碼執行的一組操作,同樣可以設置永遠不允許代碼執行的一組操作。
實現代碼訪問安全性的基礎就是JIT(運行時編譯)和IL(中間代碼)。所以所有以公共語言運行庫為目標的托管代碼都會受益于代碼訪問安全性。非托管代碼則無法完全使用代碼訪問安全性。
下面我們將介紹一下代碼訪問安全性實現的各種功能:
代碼訪問安全性是控制代碼對受保護資源和操作的訪問權限的一種機制。在 .NET Framework中,代碼訪問安全性執行下列功能:
· 定義權限和權限集,它們表示訪問各種系統資源的權限。
· 使管理員能夠通過將權限集與代碼組關聯來配置安全策略。
· 使代碼能夠請求運行所需權限以及其他一些有用的權限,以及指定代碼絕對不能擁有哪些權限。
· 根據代碼請求的權限和安全策略允許的操作,向加載的每個程序集授予權限。
· 使代碼能夠要求其調用方擁有特定的權限。
· 使代碼能夠要求其調用方擁有數字簽名,從而只允許特定組織或特定站點的調用方來調用受保護的代碼。
· 通過將調用堆棧上每個調用方所授予的權限與調用方必須擁有的權限相比較,加強運行時對代碼的限制。
為了確定是否已授予代碼相應的權限,.NET運行庫的安全系統將遍歷整個調用堆棧,將每個調用方所授予的權限與目前要求的權限相比較。如果調用堆棧中的任何調用方沒有要求的權限,則會引發安全性異常,并會拒絕訪問和相應的操作。堆棧步旨在防止引誘攻擊;在這種攻擊中,受信程度較低的代碼調用高度信任的代碼,并使用高度信任的代碼執行未經授權的操作。在運行時要求所有調用方都擁有權限將影響性能,但對防止代碼遭受攻擊至關重要。若要優化性能,可以使代碼執行較少的堆棧步;但是,任何時候這樣做時均必須確保不會暴露安全缺陷。
還存在另外一種代碼訪問安全性的常見用途,即應用程序將控件從網絡 Web 站點直接下載到客戶端,這種方式的代碼安全性也是可以在客戶端進行設置的,根據簽名等數據權限證書來確定是不是可以允許下載的控件運行。這種方法類似于ActiveX的安全性設置,但是比之在設置權限更加詳細和強大。同JAVA APPLET的沙箱安全機制相比,.NET 的客戶端控件可以在本地簡單設置后訪問客戶端的各種資源。由于這一方面的用途不是我們的重點,所以我們在這里就不再更詳細的討論其用途及其實現原理了。
下面我們就談談如何應用這一安全特性來解決ASP.NET中存在的系統安全漏洞。由于我們介紹的系統是共享主機,所以有其特殊性,即系統管理員無法事先給所有的代碼賦予相應的權限,因為每個用戶都可能有各種權限要求,并且這些要求特殊權力的代碼在使用中都可能出現的,所以在權限管理上隨時都有各種要求。
因此在權限設置方面,不僅僅是管理員設置,也包括了各個共享主<
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解