知乎、UAC 和 Windows 安全

2017-04-29 20:44:38 +08:00
 acess
首先,LZ 是个外行逗比,下面写得几乎没啥逻辑……如果你的时间宝贵,最好还是别浪费时间接着读了。
很欢迎各位 V 友前来吐槽,不过希望你们遵循 V2EX 的规则,多带来一些信息量。

知乎逛多了,LZ 就慢慢被灌输了这样的观念:
现代 Windows 很安全,有 UAC+SmartScreen+Windows Defender 这种立体防护,有 ASLR、DEP、SafeSEH 等等缓解漏洞利用的安全机制,还有 SecureBoot、Kernel Patch Protection ( PatchGuard )、Driver Signature Enforcement,几乎无懈可击。

“关闭 UAC 等于把 Windows 的安全级别降到 Windows 98 水准”、“国产全家桶使用 Flash 漏洞等邪恶手段绕过 UAC ”

直到有一天,我发现了某人的 Github: https://github.com/hfiref0x
UAC 被完美绕过。
DSE 被不完美绕过。

再稍微搜索一下:
https://github.com/tandasat/PgResarch
http://www.nosuchcon.org/talks/2014/D2_01_Andrea_Allievi_Win8.1_Patch_protections.pdf
原来 Win7、8.1 的 PatchGuard 早在 2014 年就被完全破解了。

至于 SecureBoot,微软也泄露过一个不该泄露的东西:
https://rol.im/securegoldenkeyboot/

看完这几个东西,瞬间被刷新三观…… LZ 感觉系统安全似乎只能仰仗 Windows Defender 和 SmartScreen 了——然而,知乎里不少答案的观点都是 Windows Defender 只提供基础防御,甚至还有 WD 只杀病毒不杀流氓等诡辩说法出现。

而且,杀软真的靠谱么?
http://bobao.360.cn/learning/detail/3407.html
也许可以指望主动防御拦截可疑的网络请求,但至少“扫描”看上去被完全击败了。

其实,稍微反思一下,就会发现 UAC 的意义其实很有限——无论是截屏、按键记录还是窃取、破坏个人文件,UAC 都不会过问。
但逛完知乎,LZ 就形成了一种印象,感觉 UAC 就是系统的保护伞……
DSE、PatchGuard 这些机制具体起了多大作用,LZ 也说不好,但 LZ 现在已经不相信它们能让系统变得更安全了。

《 Windows 内核设计思想》这本书的序里这么写道:
如果你觉得 Windows 的 64 位版驱动要验签名了,内核有 PatchGuard 了,所以更安全了;如果你觉得你用的是“水果”,不越狱所以固若金汤;如果你觉得 Android 不 root 就是 安全的,我只能说你还处于蒙昧无知的状态。如果你感觉到了哪里可能会有漏洞,而你可以一一填补,说明你混沌初开了。如果你像某些大公司的系统设计员一样,忽然冒出一个前无古人的想法,认为这样可以一劳永逸地解决安全问题,说明你开始了独立思考,可以着手安全问题了!如果你终于回到现实,甘愿像被缚的普罗米修斯一样,今夜痊愈,明日又开始新一轮的开膛破肚,永无休止,那你终于走上了正途!
https://book.douban.com/reading/34279756/)
现在 LZ 好像稍微理解一点这段话的意思了。不过,随便挑个问题问 LZ,LZ 也是一问三不知……

写了那么多,不知道写了啥,强行总结一下吧:
逛知乎虽然能让 LZ 注意到系统里有 UAC、DSE、PatchGuard 这些东西,但是——
知道了这些并不能让 LZ 用电脑比以前更舒心。
不管怎样,LZ 养成了双击 exe 之前非得看看数字签名是否有效等麻烦的习惯,不过这似乎也不会给自己带来太多实在的好处……
18352 次点击
所在节点    随想
169 条回复
ahhui
2017-04-29 21:30:48 +08:00
没有绝对的安全存在。知乎这种外行聚集地更无法知晓安全的边界在哪里。
ahhui
2017-04-29 21:34:15 +08:00
更正一下,上面只是想说知乎既不是计算机安全的专业论坛、更不是黑客的交流场所,所以他给出的技术方面建议不可能很准确。而安全又是一个极其复杂的零和博弈课题,可涉足的点又十分广泛,所以不要相信知乎上说的。
imn1
2017-04-29 21:36:07 +08:00
无知则无畏
acess
2017-04-29 21:43:11 +08:00
@ahhui @imn1
说实话……我觉得这不完全是“外行”的问题,知乎好像被软粉统治了,那么说微软的东西有安全隐患好像也是政治不正确?
也许散布这些观点的人只是想帮微软推 UWP 应用、在微软跟 Google 撕逼时帮微软说话,或者——纯粹只是闲着蛋疼说着玩玩而已。
不过,我觉得知乎仍然是被不少小白(比如 LZ )信任着的平台,有些人随口说的几句话可能会被小白奉为圭臬。
哎,果然 LZ 还是 too young too simple ……
wevsty
2017-04-29 21:43:55 +08:00
没有任何一种技术是万能的,无论放到哪里都一样,修修补补是常态。
UAC 其实也不存在所谓完美绕过,都是有一定前提条件的,比如楼主贴的例子,要求必须是 UAC 出于默认等级才可以通过这些方法提权。如果什么都不要能绕过完整的 UAC 保护,那么就是内核上的漏洞了,微软是必须出补丁修复的。
anyclue
2017-04-29 21:44:54 +08:00
安全本来就是相对的,哪有什么绝对安全可言。
写出来认知过程了……
acess
2017-04-29 21:44:56 +08:00
@wevsty 其实我大概看过,确实和你说的差不多,只有默认挡是筛子。
但调到最高档也出现过磁盘清理程序的漏洞,而且微软没放补丁修补。
Showfom
2017-04-29 21:47:12 +08:00
真要安全就断网吧
mozutaba
2017-04-29 21:55:13 +08:00
@ahhui 毕竟是科普,难道告诉 windows 用户干什么都没用?

我逛的所有论坛都鄙视装 360,但是我妈打印店里就靠 360 撑下去的。
别说什么 UAC,Windows Defender, 小白用户谁管这个?哪个软件能告诉他们点这个按钮就没问题就用哪个。
这个场合下,装 360 就是“固若金汤”。

同理,他们。。。

不过这个网站,抖机灵被人喷,可是不抖机灵也不专业啊。
bluecrow
2017-04-29 21:59:32 +08:00
@ahhui 打发时间用的而已。
wevsty
2017-04-29 22:04:00 +08:00
@acess 微软这方面的处理确实不太积极。不过也没必要悲观,该修的问题始终要修。
Windows 使用了这么多技术也确实一定程度的保障了用户的安全性,这一点是毋庸置疑的,很多技术也并不是 Windows 独有,Linux 下面同样也在使用 ASLR 之类的技术。安全并不是一件绝对的事情,都只是相对的,至于你相信不相信,那就仁者见仁智者见智了。
ahhui
2017-04-29 22:06:48 +08:00
@acess 楼主的看法我觉得我还是可以理解的,毕竟楼主也不是搞专业的,知乎上能提供一些建议也是有益处的。只不过知乎有点偏向于外行看热闹的角度。其实说 uac,windows defender 有用也并没有错,但问题就在于有茅就有盾,安全攻防又是一个动态和快速变化的领域,微软在安全上下的功夫不少,黑客在攻击方面下的功夫也很多。所以关键问题就是,知乎的这些信息可能很快就过时了,不掌握最新消息的人容易轻信而被误导。
acess
2017-04-29 22:10:04 +08:00
@anyclue @ahhui @wevsty
我觉得大家肯定也不是强求 100%的安全,只是要求相对的安全。

但就拿 DSE 和 UAC 来说……信这俩你真的就输了。

比如 DSE,即使你勤快地打了补丁,把 ntoskrnl 和各种乱七八糟的驱动的漏洞都补了,只要攻击者有机会以管理员身份执行代码,他照样可以找一个有签名的驱动加载进系统,把漏洞重新引入内核。
微软可以勤快地给内核打上补丁,那些 0day 也可以当作只用来对付“国家的敌人”的武器而忽略掉,但有数字签名≠安全,带数字签名的,无论是.exe 还是.sys 都可能带漏洞,然后被利用…… DSE 绕过那两个项目里,关掉 DSE/绕过 DSE 其实只是小 case,或者说,只是给不懂内核的攻击者提供方便而已;对于懂内核的攻击者来说,关掉 DSE 可能都是无谓地闹出动静、多此一举。
防守的这一方不是毫无办法,至少可以把已知的有漏洞的驱动屏蔽掉。但这样不能从根本上堵死这种攻击思路。
如果因为害怕这种利用方法,而使用白名单策略(又触及 LZ 的知识盲点了…… Windows 下可以实现这个么?),对个人日常使用来说,又会明显影响到正常使用,至少也要多花一些精力维护白名单——对于非专业用户来说,光是理解啥是“数字签名”可能就挺费劲了吧?

UAC 同理,攻击者可以把带数字签名但有漏洞的安装程序解压到临时目录,然后通过劫持它来运行自己的代码。根据 LZ 看到的一些分析文章,这招不仅可以骗过 UAC,甚至还可以绕过很多安全软件的主动防御。

最近还看到 360 声称发现了藏在 UEFI 固件 CSM 模块里的木马:
http://www.freebuf.com/articles/system/133243.html
似乎把是之前已经被发现的“暗云”木马塞进 BIOS 了:
http://www.freebuf.com/articles/system/109096.html
对 LZ 这种小白外行来说,完全是刷新三观——连刷个广告 TM 都用上 Bootkit 了……
乐观一点,可以推测攻击者并不懂这些高级的技术,只是花钱买来了这些攻击工具,或者只是下载了泄露的恶意软件代码,然后稍加修改……
也许,对付这种脚本小子,只需要守住入口,不给它们执行的机会就 OK 了。
不过,LZ 仍然感觉脊背发凉。
ahhui
2017-04-29 22:11:36 +08:00
@mozutaba 科普有用,我同意你的观点。但具体到 360 上,我想说喜忧参半。360 在内核方面的防范能力很强,得益于花钱请的人都很牛逼。但是安全这个维度太广泛了,用固若金汤形容可能有点夸大其词。比如 360 的浏览器对于 ssl 的实现上与标准做法有很大的不同。它甚至可以允许信任已经过期或者无效的证书,可能用户确实没遇到病毒了,但信息泄漏却看不见摸不着很可能发生。
geelaw
2017-04-29 22:13:22 +08:00
“其实,稍微反思一下,就会发现 UAC 的意义其实很有限——无论是截屏、按键记录还是窃取、破坏个人文件,UAC 都不会过问。”

我觉得你好像不懂 UAC 是干什么的。UAC 是为了让你不用创建两个用户出现的——没有 UAC 的时候你需要创建一个普通用户和一个管理员用户,平时用普通用户,对需要管理员权限的程序使用管理员用户打开。

截屏、按键记录,你怎么知道程序不是干自己该干的事情呢?“窃取”个人文件,你怎么知道不是帮你做云同步呢?“破坏”个人文件,你怎么知道不是你保存了文件呢?

如果你想要这种级别的安全,很多事情就是做不了的,你不如用 Windows 通用程序。Windows 通用程序不能截屏,不能记录发送到其他窗口的按键,不能随便打开文件。

关闭 UAC 并不会降低 Windows 的安全性,降低的是易用性。




另外现代 Windows 安全和 Windows 有漏洞不矛盾。杀毒软件有局限性难道不是早该知道的么?
acess
2017-04-29 22:17:08 +08:00
@geelaw 作为没有接受过系统教育的外行,LZ 也是最近才发现自己对 UAC 产生了多可笑的误解……
ahhui
2017-04-29 22:25:53 +08:00
@acess 其实微软的包袱很重。

第一,他不能控制驱动层次的东西,因为他不垄断硬件。所以在驱动上,不能做任何限制,否则用户直接跑了装别的系统,用户会觉得,毕竟硬件花钱买的,凭啥不让我用?这就是个很大的漏洞。虽然很早微软就要求驱动必须打 WHQL 签名,这个是要微软审核驱动最后才能打上。但考虑到兼容性,也许或者还要其它的原因,这个强制规定并没有执行,好像 Win10 有强制了吧?我不确定。

第二,当年看微软技术问答的时候,还吃惊地发现,微软在给操作系统打的补丁里还包含兼容应用程序的代码。对,你没看错,是微软为了兼容应用程序而给自己的系统改代码。

这两点可以说明,在一个控制力不大的系统下,安全也会变得不够全面。为什么有的补丁一出要出几个月甚至几年?大多是兼容性和易用性方面的两难抉择很难找到平衡的修补方法。

试想,如果哪次微软规定第三方软件或者驱动必须如何如何,不如何如何就不让运行了,那到时候招来的骂声会更广泛吧。
hjc4869
2017-04-29 22:28:17 +08:00
UAC 开最高甚至设置成输密码是常识
顺便送个当年闲着没事写的默认配置的 UAC 绕过
https://github.com/hjc4869/UacBypass
yankebupt
2017-04-29 22:33:50 +08:00
我觉得最可怕的都不是这些,而是针对硬件支持的虚拟化隔离的攻击,而且据说好像还有成功了的案例...如果这种处理器硬件底层的设计出来就是为了隔离的技术都挡不住攻击,或者说会存在更新 microcode 都补不上的漏洞,我们是不是要堕落到只有不用处理器才不会被黑的时代了?
acess
2017-04-29 22:37:18 +08:00
@geelaw 对于一部分用户来说,他们早就知道 DSE、PatchGuard 等等机制的局限性。不过对于身为外行的 LZ 来说,这就完全是刷新三观了。

至于杀软的局限性,我想肯定不少用户都纠结过“哪个杀软好”这种问题吧。杀软对我们外行来说,就像个黑盒,很难判断它到底能帮自己做什么……

另外,关于您说的“ UAC 是为了让你不用创建两个用户出现的”,还有“关闭 UAC 并不会降低 Windows 的安全性,降低的是易用性”……不好意思,我好像还是不太明白。

比如,在 Linux 下,root 用户拥有最高权限,可以无视文件权限,以至于使用 sudo 命令时都会提醒“尊重其他用户的隐私”。但 Windows 下,管理员账户并不能直接访问其他用户的主文件夹。
的确,管理员可以直接修改 ACL 来解除这个限制,甚至只需要点一次带盾标的“继续”就自动搞定了这些,但问题不仅限于此:管理员账户和标准用户终究是两个账户,拥有不同的配置,产生了两个不同的环境。

可不可以说,有了 UAC,比起开两个账户,提升了易用性,但的确也牺牲了一部分安全性?
也许我的理解仍然有不少不对的地方……
不管怎样,还是感谢您关注这个帖子:-)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/358133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX