的有限权限运行。服务和应用程序可以在其注册表项中存储状态信息。这些信息应该存储在子项(隶属服务项或服务项包含的项)当中。切勿通过 ACL 处理服务项,使该服务具有对其自身服务项的 SetKey 权限(或者 WDac 或 WOwn 权限,这些权限可能会导致此类攻击),因为这样会使该服务能够指向不同的可执行文件。此类错误可能导致服务主机遭到 EoP 攻击,因为服务控制管理器可能会在系统加载时也加载该服务所指向的可执行文件。
为 HKLM 设置 DACL 的一般原则是必须使用户不能写入或修改此数据、相关联的 ACL 和所有权。与设置系统区域中文件系统 DACL 的指导原则一样,使用用户权限或在受限环境中运行的应用程序或服务需要记录错误消息时,属于特例情况。对这种情况的指导原则与文件系统中解决类似问题的原则相似—为此类信息创建单独的项并为其设置适当的 ACL。因此,敏感信息可以通过 ACL 设置给受信主体(管理员、系统等),而日志数据也可在需要时允许写入。
您需要尽力避免的情况是用户修改受信任的参数(例如关闭反病毒或防间谍软件服务)或使用用户或管理员使用的工具篡改数据。假设当调用“记事本”时它会加载 C:\windows\notepad.exe。C:\windows 的默认 ACL 不允许攻击者修改此可执行文件。如果攻击者可以重写从“记事本”图标到其可执行文件的链接,则攻击者可以将该图标链接到其他文件(例如 C:\tools\load_rootkit.exe)并加载它。这样可以在加载 rootkit 之后再加载“记事本”,从而使用户感觉不到系统已经遭到破坏。
如果攻击者可以通过注册表驱动链接,那文件系统中保护性的 ACL 将起不到多大作用。您还可能受到从受限系统服务向其它系统服务发起的攻击。在 Windows Vista 和 Windows Server 2008 中,服务将按照其所需要的权限划分为不同的组。这种服务隔离技术提供的深度防御保护需要服务权限配置,这样服务(特别是跨服务组的服务)之间将无法互相篡改数据。
正如我们需要考虑防止用户添加或链接到恶意可执行文件一样,我们还必须防止服务更改其权限和功能。服务的 ChangeConf 权限必须限定给管理员、系统或可信的安装程序,因为该权限允许处理器更改服务的权限。
总结
Windows 提供了非常丰富的权限控制功能,它们可用于允许操作、阻止操作并提供对新威胁的深度防御。这一丰富的访问控制功能自然会令加大复杂性。
以下几项一般指导原则可以帮助您避免出现各种问题。例如,系统默认配置相对比较安全。您应该尽可能使用这些配置。如果将应用程序安装到 Program Files 以外的位置,请使用程序文件 ACL。在某些情况下,您可能希望限制一些默认权限,例如默认授予用户的驱动器权限;但请记住如果确实需要这么做,您应该准备好查找和处理潜在的应用程序兼容性问题。
最重要的指导原则是严禁管理员或系统帐户执行或通过指针指向用户能够写入或修改的代码。同样重要的是用户不能执行或通过指针指向另一个用户能够写入或修改的代码。这些指导原则适合本文中讨论的各种安全问题。如果您所做的更改都遵守这些指导原则,那您将可以避免大多数严重的安全问题。
有关访问控制组件的更多信息,请参阅 MSDN 中的“访问控制组件”。有关 ace_string 访问掩码组件的信息,请参阅 MSDN“ACCESS_MASK”文章,其中包含对文件、目录、注册表项和共享内容特殊权限的介绍。有关受限 SID 的其他信息,请参阅 MSDN“受限令牌”文章。 权利的完整列表
图A 标准权利
图B 文件和目录的特定权利
图C 文件映射和注册表的特定权限
图D 服务控制管理器和服务的特定权利
图E 进程和线程的特定权利
图F WindowStations 和桌面的特定权利
图G 符号链接和事件的特殊权利
图H 信号量和互斥体的特定权利
图I 管道和令牌的特定权利
图J 通用或公认的帐户及其SID字符串
John R. Michener 是Microsoft 的高级安全项目经理,Windows 软件保证团队的密码和权限专家,拥有20多年系统安全方面的经验。
本文来源:不详 作者:佚名