windows 7 中的用户帐户控制(uac)真的有必要吗? 财富值78

2016-10-05 07:28发布

Windows 7 中的用户帐户控制(UAC)真的有必要吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
本回答禁止转载到除知乎日报以外的任意平台上。
------------------
现在Win10都发布了,我就顺便说两句我对Windows安全体系的演变和看法吧。
先回答题主的问题:UAC不仅必要,而且非常必要。(如果想看为什么非常必要,请跳转到“再来回答下题主的问题”部分)
(先让我讲讲理论先,我说的未必专业,随便写的,看看就行)

一、Windows 9x 时期
98时期的电脑在现在来看,根本没有任何安全性可言,当时,用户拥有最大的权限,可以对系统进行任意形式的修改随意操作各种系统目录的文件和注册表,而且,不设防的Autoexec.bat和Winstart.bat更是让一些病毒可以随意领先于系统启动
这也就是为什么 @CIH Hacker 写的CIH能遍及全球的原因了,因为98根本没有权限这个意识。
在意识到98的Autoexec.bat和Winstart.bat以及其他文件对Windows的安全产生巨大威胁之后,Windows ME取消了实模式DOS来提升系统的安全性,然而当时很多软件都不兼容ME的不带有实模式DOS的设定,再加上ME本身的不完善,所以,ME失败了。

二、Windows 2000时期
1999年发布的Windows 2000直接把Windows NT带到了桌面上,可是Windows NT的安全性措施,为什么没有让2000成为最安全的系统,反倒在2003年出现了冲击波呢?
这就要从2000的权限设定和默认设置上说起了:
在Windows 2000上,常见的用户组有四个,分别是Administrators(计算机管理员)组,Power Users(高级用户)组,Users(受限用户)组,Guests(来宾)组。
微软当时的设想很美好,默认创建的用户是属于Administrators组的,鼓励用户使用Power Users组的账户,将一般人员归类到Users和Guests组就行了。
可是,当时的软件开发商还在疯狂搞着往Windows目录写文件的事,根本不管你微软的权限设置……
所以,大家都用Administrators组的账户登录了。
然而你用Administrators组的账户登录,跟使用Windows 98有明显的区别吗?
Administrators组的账户是可以随意更改文件,操作硬件,安装驱动,甚至获取登录到SYSTEM账户的权限的!
Power Users组,则是扶不起的阿斗,它能安装程序,它不能访问其他用户的文件夹,它也无法安装驱动,无法修改任意的ACL(Access Control List,访问控制列表),所以它相比受限用户权限太大,无法阻止病毒入侵,相比管理员又只差一点,无法完成必要的管理任务,所以XP时微软直接干掉了Power Users组(至于为什么还显示存在,那是兼容性所需)
(其实微软的本意是想让大家使用Users组,然后需要的时候Shift+右键选择运行方式的,然而控制面板项和MMC控制台文件(*.msc)却不能这么启动,而且系统也不会自动检测提权,所以微软想让用户使用Users组用户的计划已经跑汤了。)
而且2000还存在一个严重的安全性问题,就是默认允许远程用户以空密码登录,这是一个很严重的安全问题,在管理共享开启且Administrator密码为空的状态下,它允许你对对方的电脑进行任意修改……


三、Windows XP时期
Windows XP开始,Windows系统开始注重安全性,比如说新增了Windows 防火墙(但那时的Windows 防火墙功能还很弱,而且不能阻止出站连接),新增了自动更新(也就是说用户不再需要到Windows Update手动检查更新了),在受限账户下可以自动检测部分提升请求(该功能被叫做LUA: Least-privilege User Account,最低权限用户账户,也就是UAC的前身)和取消了默认允许远程用户以空密码登录的设置
然而,那时的XP的安全性相比2000没有实质性的提升。
直到SP2发布,新增了安全中心(提示杀毒是否安装),同时增加了一个重量级的功能:DEP(Data Excution Protection,数据执行保护,可以直接让冲击波等病毒丧失能力)
DEP需要硬件支持,AMD是x86架构CPU硬件防毒的发明者(No eXecute,NX,禁止执行),Intel则称该技术为XD(eXecution Disable)
它的原理很简单。就是不让内存中的代码直接执行(缓冲区攻击),默认仅为系统程序和显式声明自己支持DEP的程序启用。很快黑客就弄出了绕过DEP的方法(内存位置预测+注入),至于微软是怎么解决的,调到Vista/Win7时期吧……(顺着黑字阅读就OK)

四、Windows Vista/7时期
Vista是个好系统!Vista是个好系统!Vista是个好系统!重要的话必须说3遍。
你可能会疑惑我为什么这么说,那是因为Vista是所有NT6的祖宗(也包括Win10的NT10.0),自这以后,Windows的内核架构就没有太大的变化了。
至于Vista失败的原因,主要是:
1、当时的电脑吃不消,2、RTM太不完善,bug太多。
(PS:SP1开始UAC比之前少多了)
你可能不知道Vista对安全的许多改进(很多都被杀毒软件们的主动防御吸取了):
1、引入了完整性级别(Integrity Level),完整性级别分为四级,System(系统),High(高),Medium(中),Low(低)。
System IL对应什么权限自然不用说了,High和Medium对应什么权限呢?
答案是High对应Administrators组拥有的权限,Medium对应Users组所对应的权限(PS:Users/Medium的权限已在NT6中进行了“不危及系统安全性的”提升,目的是让用户在降权的管理员账户下做更多的事。)。
这样做有一个明显的好处,就是受限用户拥有High令牌之后,也可以进行管理操作,方便计算机管理员进行管理,而管理员用户登录后,explorer.exe只拥有Medium令牌,从而防止由用户启动的程序在用户不知道的情况下做出危险的操作。
2、UAC虚拟化
有很多软件,他们运行时候可能只需要写HKLM或Windows目录,而不需要加载驱动,Windows在检测到这种应用后,便会启用UAC虚拟化,把HKLM里的修改存储在HKCR里的一个项里,把Windows等Medium令牌不能写的目录虚拟化到Appdata中,这样做既减少了UAC弹窗的次数,也提升了系统的安全性(避免其他程序通过DLL注入等方法获得High令牌甚至System令牌)。
3、Low Integrity Level令牌和IE的保护模式
你可能会疑惑,为什么刚才我没有提到Low Integrity Level令牌?答案就是Low令牌就是为了部分需要特殊保护的应用程序准备的。
在Low令牌下运行的iexplore.exe,本身拥有的权限极低,从而最大程度上减少了基于浏览器漏洞的攻击。
(别问我为什么你用IE中毒了,这锅应该让Adobe背,PS:ActiveX和BHO在IE7-9时拥有的令牌不能低于Medium)
4、ASLR(Address Space Layout Randomization,地址分布随机化)的引入
Vista开始,系统开始引入ASLR,这玩意就是为了防止绕过DEP的。
之前的Windows版本上,DLL加载的位置都是固定的,而这就容易给黑客带来可乘之机,而在Vista中,系统重要的DLL文件和显式声明自己支持ASLR的DLL文件加载到的内存位置都是随机的
5、Windows 防火墙的增强。
不仅支持了出站限制,而且设置项也比以前丰富多了,这里就不详细写了,直接打开控制面板-系统和安全-管理工具-高级安全Windows防火墙你就能感受到它的强大了。


五、Windows 8.x/10时期
虽然说10里面有部分安全性的改进,但我决定还是不分开了,直接写到一块。
1、AppContainer的引入。
简单理解,AppContainer就是个免费提供的沙盒。
AppContainer能够隔离应用对系统的修改,在Windows系统中,除了“(电脑)设置”等非常需要权限的Metro App,其余的Metro App都必须在AppContainer里面跑。
而且AppContainer不仅支持Metro App,传统的Win32应用照样支持,比如说IE的增强保护模式(在这个模式下的IE不仅iexplore进程是处于Low令牌下运行的,连加载项都是处于Low令牌下运行的,更重要的如果是在Win8.x下运行的IE10-11的话,所有东西都是在AppContainer下运行的。),还有Chrome等程序。
AppContainer像Sandboxie一样照样可以阻止应用随意访问“于己无关”的文件。
(PS:远景上已经有人着手开发可以创建AppContainer的程序了,毕竟AppContainer需要用函数调用,一般用户根本不能用)
2、系统程序完全使用ASLR。
3、(Win10)字体渲染不再跑在内核模式,而跑在用户模式。
升级Win10的用户可能会发现任务管理器里多了这么一个进程。
这么做的好处是很明显的,阻止恶意程序通过字体渲染驱动的bug获得系统的完全控制权,比如说前一阵HT那几个漏洞,首先构造一个有问题的flash文件加载到浏览器里,然后通过Windows字体渲染的漏洞继续提权,恶意程序可以直接提到System令牌上而无视各种安全性保护措施。而在Win10中,即便字体渲染驱动有问题,但只要不是在Administrator账户下,借助字体渲染驱动疯狂提权到System令牌的问题便不复存在了。

编后:
写这篇回答完全是看现在大家对UAC和Metro App的态度写的(毕竟我没有专栏),我是某硬件论坛的版主,我们论坛有些权限狗和高等级玩家很看不上UAC和Windows,理由是UAC太麻烦,还有兼容性问题,至于Windows就说Windows容易中毒……这是什么逻辑啊!
还有最近两天泄漏的Windows 10 LTS,居然很火,理由是没有Metro App,在Administrator用户下“跑的爽”,哎……你们自己作死我没法救了……因为你们自愿把系统的安全性级别降到了Windows 98水平啊……
------------------
再来回答下题主的问题:
为什么某些看似不需要管理员权限的软件需要管理员权限:
1、加载驱动,再利用Windows的Bug和未公开函数篡改Windows内核,获得最高权限(典型例子:TenProtect)
2、常驻服务(题主的例子是XLServicePlatform服务被迅雷检查出停用后的自动修复,不得不说这真的很流氓)

PS:全家桶们是怎么绕过UAC的?
简单来说,就是“开后门”,因为无法无缘无故绕过UAC:
1、通过输入法,输入法会被logonui.exe等进程加载,进而全家桶们可以直接绕过UAC弹窗,自己可以“叫同伙”获得System令牌。
2、通过注册服务开后门。
3、通过安装驱动开后门。
4、通过任务计划开后门。
5、通过Flash漏洞。

8月5日 下午更新:@婷芳琪 对我说这些安全防护措施没有X用,我找了下来源,其实就是CVE-2014-6332漏洞在Windows+IE全系列里的利用,没什么特别的。
首先我用UTF-8编码保存了这个利用文件(Win95+IE3 – Win10+IE11全版本执行漏洞(含POC))。
接着,Windows Defender立即报警,提醒发现了恶意软件(此处的红色是因为我关掉了WD的实时防护,正常情况下应该为受保护):
再看一下记事本,恶意代码被WD自动清除了。(图片略过)
你可能会说,这漏洞IE万年都有,根上的漏洞根本堵不死!
我便自己开了IIS,架设个服务器,把127.0.0.1扔到受信任的站点,安全级别调到最低,不启用保护模式,IE整体也未开启增强保护模式,然而实际的结果却是:
很不幸,恶意代码被IE自动干掉了。
Edge呢?




恶意代码仍旧在,但是在Edge里根本没有用,因为Edge不支持VBScript。
Chrome/Firefox略,原因同Edge。

信息&结论:
1、用漏洞来说Windows的安全防护措施没有X用就是在转移话题。没有任何疑问。
2、这个漏洞早已修补,只要启用Windows Update就可以预防,而且只要安装上杀毒软件,都会被拦截的。
3、VBScript解释器年久失修,早应该被淘汰。(所以Edge不再支持VBScript)
4、IE的增强保护模式下VBScript解释器会呆在AppContainer里无法做恶,一般的IE保护模式也不会有大影响(毕竟权限不够)。
5、在电脑世界中,没有绝对安全的环境。

8月5日 18:20 再更新,Win7下IE8的保护模式已经成功阻止攻击:
如果我不允许,IE便不会继续询问我。
如果我允许(注意,如果选择允许,Windows还会继续询问),恶意代码也没能达到它预期的行为(创建管理员账户),这是为什么呢?
刚才运行恶意代码的过程中,IE做了几件事:
  1. 在保护模式下的IE(页面进程)运行于Low令牌下,权限极低。
  2. 恶意代码调用外部程序,但Low令牌的权限不足以让IE(页面进程)启动外部程序。
  3. IE(页面进程)呼叫IE(UI进程),提示用户有外部程序准备启动。
  4. 如果用户选择允许,IE(UI进程)便会启动外部程序,外部程序的令牌继承IE(UI进程)的令牌:Medium。(PS:EXE声明自己要获得High令牌和EXE启动后主动获取High令牌的除外,但这种情况肯定有UAC提示的。)
  5. Medium令牌不足以发动破坏。系统被保护。

所以,UAC非常重要。

一周热门 更多>