ASP.NET虚拟主机安全漏洞解决方案

2008-02-23 08:21:47来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

 曾很早就在网上看到一篇关于<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) 侦听程式;然而,他们内部的工作原理是截然不同的。

[1] [2] [3] [4] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: More

下一篇: 深入剖析Windows