8.服务安全性改进
Windows 服务成为理想的恶意软件目标。许多服务都提供通过网络访问其功能,这很可能会暴露远程可利用的访问系统的机会,而大多数服务运行都使用比标准用户帐户更多的权限,如果它们被恶意软件利用,则会提供在本地系统上提升权限的机会。因此,Windows 以在 Windows XP SP2 中所做的更改为始不断完善,将权限和对指定服务的访问权限降为仅其角色需要的权限。例如,Windows XP SP2 引入了本地服务和网络服务帐户(仅包括服务以前一直运行的本地系统帐户权限的子集)。这样可以在利用服务时最小化攻击者获取的访问权限。
通过使用像 Sysinternals 提供的 Process Explorer 一样的工具,在两个不同的引导会话中比较进程的 DLL 加载地址,您可以很容易看到 ASLR 的效果。在从两个不同会话截取的这两个屏幕快照中,Ntdll.dll 首先在地址 0x77A30000、然后在地址 0x77750000 加载到 Explorer。 在以前的文章中,就介绍了服务如何在其会话中与用户帐户分开运行,但是 Windows Vista 还通过进一步降低分配给大多数服务对文件、注册表项及防火墙端口的权限和访问权限,以扩大其最小权限原则的使用。Windows Vista 为每种服务定义了一组唯一的新帐户,称为服务安全标识符 (SID)。服务可以对其资源设置权限,这样只有其服务 SID 拥有访问权限,避免在服务出现安全漏洞时以相同用户帐户运行的其他服务拥有访问权限。您可以使用 sc showsid 命令后接服务名称来查看服务的 SID,如图 8 所示。
服务 SID 保护对特定服务所拥有资源的访问权限,但默认情况下,服务对其运行的用户帐户可以访问的所有对象仍有访问权限。例如,在“本地服务帐户中运行的服务可能无法访问在不同进程(该进程使用参考服务 SID 的权限保护其对象)中以“本地服务运行的另一服务创建的资源;但是,它仍可以读取和写入“本地服务(以及“本地服务所属的任何组,如“服务组)有权访问的任何对象。
因此,Windows Vista 引入了称为限制写入服务的新受限服务类型,可让服务仅对其服务 SID、Everyone 组及分配到登录会话的 SID 可访问的对象允许写入访问权限。为了实现这一点,它会使用重新引入 Windows 2000 的受限 SID 类型。当打开对象的进程是限制写入服务时,访问 - 检查算法会发生变化,这样尚未以受限和非受限方式分配到进程的 SID 就无法用来为进程授予 对象的写入权限。您可以使用以下命令查看服务是否受限:sc qsidtype [service]
另一个变化是让服务更容易阻止在相同帐户中运行的其他服务对其创建的服务拥有访问权限。在以前的 Windows 版本中,对象的创建者也是对象的所有者,而且所有者能够读取和更改其对象的权限,允许其对自己对象的完全访问权限。Windows Vista 引入了新的所有者权限 SID,如果在对象的权限中存在 SID,则 SID 可以限制所有者对其对象的访问权限,甚至会删除设置和查询权限的权利。
对 Windows Vista 中服务安全模式的进一步改进,可以让服务开发人员确切地指定当服务在系统上注册时,此服务需要什么安全权限才能操作。例如,如果服务需要生成审核事件,它就可以列出“审核权限。
当“服务控制管理器启动托管一个或多个 Windows 服务的进程时,它就为在该进程中仅包括服务所需权限的进程创建了一个安全令牌(列出进程用户帐户、组成员身份和安全权限的内核对象)。如果服务指定了其运行的帐户不可用的权限,则服务无法启动。当“本地服务帐户进程中未运行任何需要(例如)“调试程序权限的服务时,“服务控制管理器会从进程的安全令牌中剥夺此权限。因此,如果服务进程被破坏,恶意代码无法利用进程中运行的服务未明确请求的权限。sc qprivs 命令会报告服务已请求的权限。
9.查看限制写入服务
在 Windows Vista 上只有一种托管服务进程托管受限服务,您可以使用进程查看工具(如 Process Explorer)将它识别为具有以下命令行的进程:svchost -k LocalServiceNoNetwork
配置在此进程中运行的服务包括基本筛选引擎、诊断策略服务、Windows 防火墙、性能日志和警报及 Windows Media Center 服务启动程序。
此屏幕显示文本格式的基本筛选引擎的服务 SID (NT SERVICEBFE),第一次列出时有受限标记,再次列出时没有受限标记,因此进程对该帐户可以访问的资源拥有访问权限。不过,它不必对“本地服务帐户通常可以访问的其他对象拥有访问权限。例如,因为 NT AUTHORITYSERVICE 帐户不会在有受限标记的进程令牌中出现,所以进程无法修改仅对令牌(有受限标记)中此帐户而不是其他帐户授予写入权限的对象。
在此进程中运行的服务还会限制其权限,因为在属性对话框底部列出的权限是可用于“本地服务帐户的子集。
结束语
有些功能和改进本文没有涉及或提及,如面向应用程序开发人员的新的工作线程池、新的同步机制(如共享读取器/编写器锁定)、服务线程标记、对在线 NTFS 磁盘检查和卷大小调整的支持以及称为高级本地过程调用 (ALPC) 的新内核 IPC 机制。
标签: