首页 > 范文大全 > 正文

UAC原理及安全性分析

开篇:润墨网以专业的文秘视角,为您筛选了一篇UAC原理及安全性分析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【 摘 要 】 uac是Windows为了保护用户进行越权操作所使用的保护措施。论文介绍了UAC的原理和所用技术,对UAC可能存在的安全隐患进行了分析,并根据不同的安全隐患提出了相应的应对办法,表明了微软的UAC虽然提升了用户的安全性,但还需要进行若干的改进,用户在使用UAC的同时也需要养成良好的安全意识。

【 关键词 】 用户账户控制;漏洞;安全性

1 引言

Windows操作系统一直为用户创造一个相对稳妥安全的工作环境,在Windows 2000开始,引入了一种名为“受限访问令牌(Restricted Token)”的技术,这种技术能够有效地限制应用程序的权限,Windows XP也应用了这种技术。但是在Windows Vista以前,Windows只设定了两种账户,一种普通账户,一种管理员账户。在普通账户登录下,用户的操作受到了很多限制,在管理员账户下,用户可以进行任何Windows赋予管理员权限的操作。在Windows Vista开始,以后的Windows版本中,出现了一种名叫用户账户控制(User Account Control,UAC)的技术,UAC对用户的操作进行了更多的限制,即使是管理员,也不能对系统进行危险的操作。

2 UAC原理

Windows有一个重要定义,叫做安全上下文(Security Context),安全上下文是用来定义某个进程可以有什么权限,能执行什么类型的操作。通过登录会话(Login Session)来决定安全上下文,维护安全上下文则需要应用访问令牌。登录会话意思是用户登录计算机的一个过程,从登录计算机开始,到登出计算机结束,为一个会话。登录会话能决定访问令牌,不同的登录会话将可能有不同的访问令牌,但是用户无法申请到当前登录会话更高的访问令牌。这个是UAC原理的最核心部分。

在Windows Vista及以后的操作系统中,用户有两种类型:普通用户和管理员。系统安装时会要求新建一个管理员,以后新建的用户则默认成为普通用户。普通用户是给那些只需要对计算机进行一般操作的用户,而管理员给对机器有完全控制权的用户。跟之前版本的Windows不同的是,在Windows Vista及以后版本中,在管理员登录下,如果想完全控制计算机需要用户手动允许访问。因此,当用户以管理员身份登录时,一些恶意行为也能够得到有效的防范,并不需要用户以普通用户身份登录,因为如果以普通用户登录,对用户的操作权限都会有很大的限制。

当普通用户登入计算机时,Windows会新建一个登录会话,该登录会话里的程序,例如Explorer.exe,会给用户颁发一个访问令牌。如果管理员登入计算机,Windows Vista及以后版本的处理方式却不同于先前版本。系统在创建登录会话时,不是像之前那样创建一个访问令牌,而是两个,一个令牌有管理员权限,能够授权管理员的一切操作,另一个令牌叫做“受限访问令牌”,该令牌所提供的权限可以说和普通用户登录会话令牌提供的权限相差无几,而且当管理员运行程序时,是该“受限访问令牌”起作用。

换句话说,当管理员用户登录系统时,其应用程序执行权限和普通用户基本没有区别。但是,若是该管理员需要执行受限访问令牌所不允许的其他一些需要高权限高许可权的操作,管理员可以选择非限制访问令牌提供的安全上下文来运行程序。这样一个提权操作,由受限访问令牌提升到非受限访问令牌,需要给管理员一个弹框提醒,由管理员手动确定之后,程序才能以管理员权限运行。这样,恶意代码如果对UAC没有进行特别的处理,则无法隐秘地对计算机造成危害。受限访问令牌的这个特性无缝地被集成到Windows Vista及以后的版本中,更好地保护了用户的安全。

UAC还有一个重要定义,叫做完整性级别(Integrity Levels),这是可以添加到进程和安全描述符(Security Descriptor)上的授权特性。程序员可以为所编写的程序在其安全描述符之内定义一个完整性级别。计算机本身运行的进程都有对应的完整性级别,根据该级别可以确定该进程允许访问的系统资源和权限。这种简单而且有效的特性,能够很好地将不同完整性级别的程序区分开,以获得不同级别的资源或者权限。

比如一名开发者开发一款程序,该程序需要从互联网等无法信赖的地方获取数据并进行处理。由于所获取的数据中有可能会存在恶意代码,所以采用一个特殊的保护层尤为重要。可以选取的一个有效的解决方法就是受限访问令牌,但是如果使用受限访问令牌,实现将会极其麻烦,因为必须判断哪些资源该程序能访问,哪些权限该程序具有,哪些需要用户交互完成,哪些资源必须完全禁用,为了实现程序的功能和安全性,使用受限访问令牌会给程序开发者和用户都会造成很大的麻烦,不得不进行大量授权。

这也是完整性级别的意义。一般完整性级别会对系统重要目录禁止写访问,但允许读以及运行。这样,程序能完成大部分工作而且避免写入恶意代码而对计算机造成危害。Internet Explore也正是这样做的。IE是以中(Medium)完整性级别运行的进程,这种完整性级别只能允许其修改少数未知的文件。

用户态进程可以有四种完整性级别:Low、Medium、High和System。

普通用户的访问令牌和管理员的受限访问令牌拥有中等完整性级别。非受限访问令牌(经提升过)拥有高完整性级别。运行于Local System之下的账号拥有系统(System)完整性级别。IE进程的完整性级别则为中等(Medium)。有一种很简单的查勘进程完整性级别的方法:用最新版本的Process Explorer,它提供了一个可选的列,可以显示出每个进程的完整性级别。

从Process Explorer中可以看到,杀毒软件等一些跟系统有关的杀毒软件运行在高(High)完整性级别下,用鼠标右键点管理员运行的软件procexp.exe拥有高完整性级别,一般双击运行的程序IE运行在中完整性级别,由父进程创建的子进程,完整性优先级不能比父进程高,这样也是为了防止非法的权限提升。

3 UAC安全性分析

UAC存在的威胁一般是代码注入。代码注入一般是首先找到系统白名单里的进程,比如explorer.exe,将代码注入到explorer进程,然后运行程序。本文下面介绍了常用的三种代码注入需要利用的UAC绕过漏洞方法。

漏洞1:UAC警告框路径欺骗

假设进程已经在系统中已经获得了标准用户的权限,那么在某些特殊的条件下其可以获得权限的提升。在UAC警告对话框里并没有告诉用户程序启动后将会加载什么DLL,若所要加载的DLL位于标准用户可以访问的目录内,那么运行在标准管理员权限下的恶意进程可以将DLL替换为包含恶意代码的DLL,当替换后的DLL被加载,恶意代码也就获得了管理员的权限。

漏洞2:普通权限拷贝文件到系统目录而不触发弹窗拦截

该漏洞是如果程序在系统白名单里,有微软签名,且完整性级别为中级,往系统文件夹里拷贝东西不会有弹窗提醒,可以直接成功拷贝,比如notepad.exe,explorer.exe等。由于这些程序是系统自带的程序,需要对系统文件夹进行很多必要的操作,否则该程序功能难以实现,故该漏洞很难修复,微软也一直没有修复这样一个漏洞。

漏洞3:系统DLL劫持

DLL劫持是用自己伪造的一个DLL文件替换掉原DLL。由于C语言编译的程序载入DLL文件时,首先会搜索当前目录,如果存在目标DLL,则不会重新在其他目录下找,会直接使用本目录下的DLL。Windows是用C语言写的,所以该漏洞也很难修补。

4 应对办法

针对第一个漏洞,UAC警告框路径欺骗,Windows应该对所加载的DLL文件进行完整性检查,保证加载的DLL是原DLL,且没有被篡改。针对第二个漏洞,由于恶意程序是将代码注入到有微软签名的完整性级别为中级的程序中,Windows应该限制此操作,使得代码不能随意注入微软本身的程序进程。针对第三个漏洞,微软应对DLL文件的引入路径进行检查,只允许系统路径,不允许在当前目录下查找库文件,这样可以保证DLL不会被劫持。

综上,产生上述漏洞的根本原因是因为Windows7的UAC的白名单机制,Vista的市场表现一直不佳,一个重要原因就是由于在Vista下频繁弹出UAC警告对话框给用户的使用造成了很大的不方便。为了改变这种情况,在Windows 7以后的操作系统中,微软引入了白名单的机制,从而有效的改变了这种情况,但是由于Windows系统并未对位于白名单内的程序和非白名单内的程序做有效的区分,非白名单内的程序可以对同权限下的白名单内的程序进程进行DLL注入等操作,然后利用自动提权的机制获得权限的提升。同时微软的白名单机制也引起了一些批评的声音,批评者认为白名单机制仅仅包含Windows系统内的一些程序,有反竞争之嫌。

为了解决上述的漏洞,微软可以对白名单内的程序与非自名单内的程序加以区分,使非白名单内的程序不能任意的对白名单内的程序使用WriteProcessMemory、CreateRemote、Thread等函数,若要使用这些函数须得用户的授权。但微软若这么做,可能会再次回到Vista下的情况。对微软来说,安全与方便是一个两难的问题,如何在二者之间找到合适的平衡,不是一件容易的事。

对于用户而言,为了防止恶意代码入侵电脑,首先是需要安装好杀毒软件套装,并保持实时更新,使得病毒库一直保持最新的状态,然后针对UAC的设置,首先不要为了防止弹框的麻烦,将UAC设置级别调为低级别,这样程序会更容易获得管理员权限运行。将UAC级别设置为中等是最低标准。如果这样也不放心的话,可以将UAC级别设置为高级别,这样目前UAC绕过方法均不能够奏效,或者用户可以在登录Windows的时候新建一个普通账户,不用管理员账户登录Windows,这样也可以保证系统的安全性。

5 结束语

总之,用户在使用Windows过程中,应养成良好的安全习惯,培养安全意识,这在应对恶意代码入侵,保证计算机安全当中是最为重要的。

参考文献

[1] 朱晓东,高丰,胡海洲.Windows 7操作系统UAC机制及其安全性分析[J].计算机工程与设计, 2010.

[2] 吴优雅,高丰.Windows内存防护机制及其脆弱性分析[J].计算机安全,2009(7).

[3] 马良缘.关于Windows7的用户账户控制(UAC)的全解析[J].网络与信息,2009.

[4] 沈澄.跳过UAC信任软件直接运行[J].电脑爱好者,2010.

[5] Windows 7 VS Windows Vista: The UAC Benchmatk[EB/OL]. http://www.vistal.

/content/Windows-7-VS-Windows-vis-ta-uac-benchmarL2009.

作者简介:

胡晓嵩(1990-),男,湖北武汉人,国防科学技术大学,在读硕士研究生。

王剑(1974-),男,湖南邵阳人,国防科学技术大学,博士,副教授;主要研究方向和关注领域:通信网安全与对抗。