admin 管理员组文章数量: 1184232
2024年12月28日发(作者:初学c语言书籍)
一个虚拟主机安全漏洞的解决方案
曾经很早就在网上看到一篇关于<虚拟主机的重大
隐患>的文章,当时并不在意,做过asp虚拟主机的伴侣可能都知道,
即对每一个用户都设置一个的服务器用户和单个名目的操作权限,能
够基本上解决asp的fso问题。
在网上无意中发觉了一个叫做webadmin的-webshell,
对自己的服务器进行测试的时候,让我大吃一惊,竟然对我服务器的
c盘有读取的权限。以及对整个硬盘的修改删除权限。这样的话,那
么我的服务器的平安……
为了进一步证明,本人曾在国内一些有名的虚拟主机供应商上
作过测试,均有和我一样的问题。
有必要先介绍一下漏洞的缘由。
ASP中常用的标准组件:FileSystemObject,这个组件为 ASP
供应了强大的文件系统访问力量,可以对服务器硬盘上的任何有权限
的名目和文件进行读写、删除、改名等操作。FSO对象来自微软供应
的脚本运行库中。
在中我们发觉这一问题仍旧存在,并且变得更加难以解决。
这是由于.NET中关于系统IO操作的功能变得更加强大,而使这一问
题更严峻的是所具有的一项新功能,这就组件不需要象ASP
那样必需要使用regsvr32来注册了,只需将Dll类库文件上传到bin
名目下就可以直接使用了。这一功能的确给开发带来了很大
的便利,但是却使我们在ASP中将此dll删除或者改名的解决方法失
第 1 页
去效用了,防范此问题就变得更加冗杂。需要进一步了解的伴侣可以
看<虚拟主机的重大隐患>一文,本文就不再重复。只针对
此问题引出虚拟主机的平安设置。
网上提出针对此问题用Microsoft .NET Framework
Configration设置的对名目读取的权限,经过我们长时
间的测试没有胜利,可能是.net framework1.1机制改革了?
废话不说。先说说解决的思路:在 IIS 6 中,Web 应用程序
的工作进程设置为以进程标识“Network Service”运行。在 IIS 5
中,进程外 Web 应用程序则设置为以 IWAM_<服务器名> 帐户运行,
这个帐户是一般的本地用户帐户。
Network Service 是 Windows Server 2023 中的内置帐户。
了解 IIS 5 上的本地用户帐户〔IUSR 和 IWAM〕与这个内置帐户之
间的区分是特别重要的。Windows 操作系统中的全部帐户都安排了一
个 SID〔平安标识,Security ID〕。服务器是依据 SID,而不是与 SID
相关的名称来识别服务器上全部帐户的,而我们在与用户界面进行交
互时,则是使用名称进行交互的。服务器上创建的绝大部分帐户都是
本地帐户,都具有一个唯一的 SID,用于标识此帐户隶属于该服务器
用户数据库的成员。由于 SID 只是相对于服务器是唯一的,因此它
在任何其他系统上无效。所以,假如您为本地帐户安排了针对某文件
或文件夹的 NTFS 权限,然后将该文件及其权限复制到另一台计算机
上时,目标计算机上并没有针对这个迁移 SID 的用户帐户,即使其
上有一个同名帐户也是如此。这使得包含 NTFS 权限的内容复制可能
第 2 页
消失问题。
内置帐户是由操作系统创建的、一类较为特殊的帐户或组,例如
System 帐户、Network Service 和 Everyone 组。这些对象的重要
特征之一就是,它们在全部系统上都拥有一个相同的、众所周知的
SID。当将安排了 NTFS 权限的文件复制到内置帐户时,权限在服务
器之间是有效的,由于内置帐户的 SID 在全部服务器上都是相同的。
Windows Server 2023 服务中的 Network Service 帐户是特殊设计
的,专用于为应用程序供应访问网络的足够权限,而且在 IIS 6 中,
无需提升权限即可运行 Web 应用程序。这对于 IIS 平安性来说,是
一个特大的消息,由于不存在缓冲溢出,怀有恶意的应用程序无法破
译进程标识,或是对应用程序的攻击不能进入 System 用户环境。更
为重要的一点是,再也不能形成针对 System 帐户的“后门”,例如,
再也无法通过 InProcessIsapiApps 元数据库项利用加载到
Inetinfo 的应用程序。
Network Service 帐户在创建时不仅仅考虑了在 IIS 6 中的
应用。它还具有进程标识 的绝大部分〔并不是全部〕权限。
犹如 ASPNET 用户为了运行 应用程序,需要具有 IIS 5 服
务器上某些位置的访问权限,进程标识 也需要具有类似位
置的访问权限,而且还需要一些默认状况下没有指派给内置组的权限。
为了管理的便利,在安装 IIS 6 时创建了 IIS_WPG 组〔也称
为 IIS 工作进程组,IIS Worker Process Group〕,而且它的成员包
括 Local System〔本地系统〕、Local Service〔本地服务〕、Network
第 3 页
Service〔网络服务〕和 IWAM 帐户。IIS_WPG 的成员具有适当的 NTFS
权限和必要的用户权限,可以充当 IIS 6 中工作进程的进程标识。
因此,Network Service 帐户供应了访问上述位置的权限,具
有充当 IIS 6 工作进程的进程标识的充分权限,以及具有访问网络
的权限。
Msdn上说:在 Windows Server 2023 中,用户上下文称为
NETWORK SERVICE。这些用户帐户是在 .NET Framework 安装过程中
创建的,它具有唯一的不易破解的密码,并仅被授予有限的权限。
ASPNET 或 NETWORK SERVICE 用户只能访问运行 Web 应用程序所需
的特定文件夹,如 Web 应用程序存储已编译文件的 bin 名目。
要将进程标识设置为特定用户名,以取代 ASPNET 或 NETWORK
SERVICE 用户标识,您供应的用户名和密码都必需存储在
文件中。
但是依据实际状况,的可以无限制访问不
设防的服务器路径。不知道这算不算一个ms的重大漏洞。而且根本
不能使iis以的用户执行程序。J
如何解决呢?答案就是—应用程序池。
IIS 6.0 在被称为应用程序隔离模式〔隔离模式〕的两种不同
操作模式下运行,它们是:工作进程隔离模式和 IIS 5.0 隔离模式。
这两种模式都要依靠于 作为超文本传输协议 (HTTP) 侦
听程序;然而,它们内部的'工作原理是截然不同的。
工作进程隔离模式利用 IIS 6.0 的重新设计的体系结构并且
第 4 页
使用工作进程的核心组件。IIS 5.0 隔离模式用于依靠 IIS 5.0 的
特定功能和行为的应用程序。该隔离模式由
IIs5IsolationModeEnabled 配置数据库属性指定。
您所选择的 IIS 应用程序隔离模式对性能、牢靠性、平安性
和功能可用性都会产生影响。工作进程隔离模式是 IIS 6.0 操作的
推举模式,由于它为应用程序供应了更牢靠的平台。工作进程隔离模
式也供应了更高级别的平安性,由于运行在工作进程中的应用程序的
默认标识为 NetworkService。
以 IIS 5.0 隔离模式运行的应用程序的默认标识为
LocalSystem,该标识允许访问并具有更改计算机上几乎全部资源的
力量。
IIS 功能
IIS 5.0隔离模式宿主/组件
工作进程隔离模式宿主/组件
工作进程管理
N/A
/ 服务
工作进程
N/A
第 5 页
/工作进程
运行进程内ISAPI 扩展
运行进程外ISAPI 扩展
N/A〔全部的 ISAPI 扩展都在进程内〕
运行ISAPI筛选器
配置 / 服务
/
服务
HTTP 协议支持
Windows内核/
Windows 内核/
第 6 页
IIS配置数据库
FTP
NNTP
SMTP
由此可见,我们只能使用工作进程隔离模式解决.net的平安问
题。
默认状况下,IIS 6.0在工作进程隔离模式下运行,如图五所
示。在这种模式中,对于每一个Web应用,IIS 6.0都用一个的
第 7 页
的实例来运行它。也称为工作进程〔Worker
Process〕,或W3Core。
牢靠性和平安性。牢靠性的提高是由于一个Web应用的故障不
会影响到其他Web应用,也不会影响,每一个Web应用由
W3SVC单独地监视其健康状况。平安性的提高是由于应用程序不再象
IIS 5.0和IIS 4.0的进程内应用那样用System帐户运行,默认状
况下,的全部实例都在一个权限有限的“网络服务”帐户
下运行,如图六所示,必要时,还可以将工作进程配置成用其他用户
帐户运行。
对,这里,这里就是我们解决的核心。
我们把每一个网站都安排一个的应用程序池,并给予不同的权
限。不就能解决这个问题了吗?
详细如何做呢,下面我就针对建立一个网站来做一个示范:
首先,我们为网站创建两个用户〔一个是app_test_user、密
码为appuser,一个是iis_test_user、密码为iisuser〕
1. 打开 计算机管理器
2. 单击掌握台树中的用户→计算机管理→系统工具→本地用
第 8 页
户和组→用户
3. 单击“操作”菜单上的“新用户”输入用户名为。
app_test_user、密码为appuser
4. 在对话框中键入适当的信息。
5. 选中复选框:
用户不能更改密码
密码永不过期
6. 单击“创建”,然后单击“关闭”。
根据此方法在创建iis_test_user账户
然后分别把app_test_user添加到iis_wpg组,把
iis_test_user添加到Guests组。删除其他组。
然后,建立相应的应用程序池。
依次打开Internet 信息服务→本地计算机→应用程序池→新
建→应用程序池
新建一个名字为test的应用程序池
第 9 页
编辑test应用程序池的属性→标示→配置→用户名→扫瞄→
把用户名改为我们刚刚建立的app_test_user并输入相应的密码
其次建立相应的网站。
依次打开Internet 信息服务→本地计算机→网站→新建
→test的网站,名目为d:test →编辑test网站的属性→主名目→
应用程序池→app_test_user →名目平安性→身份验证和访问掌握
→编辑,选择我们刚刚建立的iis_test_user,并输入相应的密码
iisuser→保存并退出。
最终设定服务器的平安。
C:只给administrators和system完全掌握的权利,删除掉其他全部
的权限,不替换子名目
C:Documents and Settings继承父项,并替换子名目。
C:Program Files继承父项,并替换子名目,并把C:Program
FilesCommon FilesMicrosoft Shared继承属性删除并复制现有属
性,增加users的读取权限并替换子名目〔这样做是为了能够让
asp,使用access等数据库〕。
C:windows删除继承,并复制现有属性,只赐予
第 10 页
administrators,system完全掌握和users读取的权限并替换子名目
其余全部的盘都只给于administrators和system用户的完全
掌握权限,删除其他全部用户并替换子名目。
D:test〔用户网站名目〕继承现有属性并增加app_test_user
和iis_test_user完全掌握的权限并替换子名目。
以后每增加一个网站都以此类推。
但是,至此,还是对c:windows又读取权限的,〔怀
疑network servers用户属于users组,但是好多服务都要使用users
组来执行的,所以不能把c:windwos去掉users组的读取权限〕但
必需知道系统路径,有两种方案解决。
1、 再安装系统的时候使用无人值守安装,更换c:windows
默认安装路径,如更改为c:testtest(要符合dos的命名规章,不
能超过8个字符)。这个是必需的
2、 以下位置具有指派给 IIS_WPG 的权限:
%windir%helpiishelpcommon – 读取
%windir%IIS Temporary Compressed Files – 列出、读取、
写入
%windir%system32inetsrvASP Compiled Template – 读取
Inetpubroot〔或内容名目〕- 读取、执行
此外,IIS_WPG 还具有以下用户权限:
忽视遍历检查〔SeChangeNotifyPrivilege〕
作为批处理作业登录〔SeBatchLogonRight〕
第 11 页
从网络访问此计算机〔SeNetworkLogonRight〕
当然两种方法结合起来算是最平安的方案,一般使用第一种方
案已经算是很平安的,究竟是用一个webshell来猜想8位字符的名
目还是需要花费时间的。使用防火墙很简单就能发觉出来,并加以掌
握
第 12 页
版权声明:本文标题:一个ASP.NET虚拟主机安全漏洞的解决方案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735422900a1662070.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论