知乎、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 之前非得看看数字签名是否有效等麻烦的习惯,不过这似乎也不会给自己带来太多实在的好处……
18897 次点击
所在节点    随想
169 条回复
acess
2017-04-30 10:55:37 +08:00
@mozutaba 只是新开一个后台进程刷量应该不触发 UAC 吧……
acess
2017-04-30 11:06:58 +08:00
@TakaLv 文件问题,我觉得可以参考目前安卓的 SD 卡,还有 iOS 的现状。
如果没有公共的“ SD 卡”,感觉多少会有点使用不便,传文件往往依赖云同步等机制(可能这反而是好事?防止设备丢失后数据跟着一起丢),SMB 等各种经典局域网共享协议被架空(感觉苹果有私心,AirDrop 只支持他们自己家的设备)。
如果有一个公共的 SD 卡,那就会产生卸载不干净、文件放置混乱、一个应用中毒数据就可能被破坏 /窃取等风险;要缓解这个问题,需要开发者规范自己的行为,用户也需要培养安全意识,把守好权限,任意读写文件的权限只放给可信的应用——无论怎样,我感觉 UWP 应用如果普及,至少不会比目前的现状更差。
acess
2017-04-30 11:15:00 +08:00
@changwei
最近碰到的 MBR Bootkit 让我觉得脊背发凉,因为我用电脑作死次数还是蛮多的……
这种技术居然已经泛滥到连刷广告的都在用了。
如果不是他们逗比搞出创建管理员账号、触发 Win10 PatchGuard 之类的大动静,我觉得很难感知系统已经有问题了。
xuboying
2017-04-30 11:22:56 +08:00
坚决打击犯罪和犯罪存在不矛盾!
acess
2017-04-30 11:30:27 +08:00
@wevsty
忘了说了……证书过期,签名不过期,这个也是我自己观察时就已经发现的现象,您说的那些其实没有超出我的预料……(不过我可能仍然对这块有一些误解)
我甚至还下载过 1999 年签名的 Win98 安装程序,文件 hash 算法还是 MD5,签名者是微软,系统现在仍然认为签名有效。

只是如果问我正确的数字签名验证应该怎么实现,实际上 Windows 又是怎么做的,我也不能一五一十地答上来。

反正天翼蓝屏事件那波,Windows 确实把没有时间戳、签名证书也早就过期了的驱动加载进了内核。这样一来,绕过 DSE 几乎是 0 成本了。
acess
2017-04-30 11:34:28 +08:00
@xuboying 当然不矛盾……说开了,就好像社会上总有一定的犯罪率,但我们该怎么过还是怎么过一样。
LZ 大概想吐槽的,楼上的 V 友说过了:知乎提供的信息只是面向外行的“科普”,可能不全面,或者欠缺时效性。
而 LZ 这种外行又可能太轻信知乎这种平台……
wevsty
2017-04-30 11:47:09 +08:00
@hx1997 JOB 和 AppContainer 可能后续会加入。有这方面的计划,不过嘛级别可能比较靠后。

@acess 这种都是互相权衡的,毕竟还是要以正常使用为第一前提。数字证书有有效期,但是数字证书签出来的签名不能说因为数字证书有效期过了就不认。一张数字证书的有效期少则 1 年多则 3 年 5 年,如果因为数字证书过期就拒绝那么也就意味着你系统中的所有驱动必须每隔几个月就更新一次,否则可能会无法启动。至于签名出来的时间戳,纯粹只是用来表示发布时间的,并没有什么特别的意义。
这个过程和签名一样,一个人签署的合同,不能说因为签署人挂了这份合同就是无效的。
获取数字证书始终是有成本的,这一点也是毋庸置疑的。
acess
2017-04-30 12:01:13 +08:00
@wevsty 再次感谢您的分享。

还有一个重要信息我没补充,就是签名那个恶意驱动的过期证书,实际上**已经被吊销了**。
连吊销证书都无法阻止这个驱动被加载的话,也难怪有人会说现在的 DSE 是鸡肋。

当然,就算微软在将来收紧了 DSE,也不能远远消除内核这块的安全隐患;
而且,LZ 觉得收紧 DSE 能带来显而易见的坏处:这会给个人、开源软件开发者带来麻烦,甚至让他们无缘触及 Windows 内核;并且可能会导致厂商支持不到位的硬件直接被未来版本的 Windows 放弃支持……

关于时间戳,我从表面的现象看,觉得它还是非常重要的。
根据 LZ 自己的观察,如果没有时间戳,签名的有效期就被限制在证书的有效期内。如果有时间戳,就不再受这个限制(不知道是不是受反签名证书的有效期约束)。
很显然,这样可以阻止攻击者用泄露私钥的过期证书签名驱动来绕过 DSE。
ivvei
2017-04-30 12:08:26 +08:00
@mozutaba 不能啊。我要是这截屏软件,我打开的时候就会要求 UAC 提权,你点还是不点?不点我就直接退出不给你用了。
acess
2017-04-30 12:10:18 +08:00
@ivvei 你可以换一个软件试试,比如 Snipaste、GifCam 等……
hx1997
2017-04-30 12:13:20 +08:00
@wevsty 已 star,希望看到后续发展😀 毕竟以前也关注过,后来退坑了
ivvei
2017-04-30 12:17:01 +08:00
@acess 那不是又得找一圈了么。而且这只是个例子,实际情况中并不是总能轻易找到替代品的。而且就 UAC 这粗糙的提示,你甚至都不一定能判断出软件这个要求是合理的还是不合理的,是可疑的还是不可疑的。就大部分用户的计算机水平,我一个流氓应用都不用费心去绕过 UAC,就毫不遮掩地公然要求 UAC 权限,依然能在大部分人那里成功获得授权。
wevsty
2017-04-30 12:20:15 +08:00
@acess 吊销的问题是微软实现方面的问题。这一点我了解的不多,不过微软完全有能力随时发布更新来解决这些问题。
DSE 确实带来了很多问题,也是无可否认的,个人几乎很难在独立开发驱动。不过微软这方面的要求也不是不能理解,因为大多数蓝屏的问题并不是 Windows 自身的问题导致的,几乎都是第三方驱动形成的。在驱动层面开发是很麻烦的事情,普通的 app 如果犯了一个除 0 的错误,也就只是收到一个程序崩溃的提醒,可是驱动层面上那就直接蓝屏了。(其实某种层面上蓝屏是相当好的保护措施)通过 DSE 这样的手段来限制一些开发者这大概才是微软的目的所在。至于未来版本的支持。。内核上很多地方是未公开的,每一个版本都可能会有些许不同,而驱动们为了达到各种各样的目的可能又必须依赖于这些未公开的地方,所以驱动上兼容各种版本是相对比较困难的。微软其实就不想让开发者动内核,什么 hook SSDT 这种事情根本就不是什么正规手段,所以才有了 PatchGuard 这种东西来阻止对内核的修改。
acess
2017-04-30 12:23:36 +08:00
@ivvei 实际上到弹 UAC 那个程度,可能是耍流氓已经耍得太过分了。
LZ 后来反思过,意识到管束软件的流氓行为,压根就不在 UAC 的职责范围内……
比如安装软件,我记得只要开发者愿意,其实可以 per user 安装,安装过程可以不弹 UAC 申请提权。
我记得知乎大 V vczh 说过,只开标准用户的话,某个用户作死中毒,删掉账户,系统还是好的。
不过 LZ 觉得这对个人用户意义不大,因为重装系统的麻烦有一大部分就来自于各种个性化设置。删了账户,这些还是要从头开始,可能某些软件还需要重新激活……
0TSH60F7J2rVkg8t
2017-04-30 12:24:12 +08:00
@mozutaba 不赞同。证书安全体系里过期了就不能允许访问,不允许访问才是正常使用,允许访问才是非正常使用。
acess
2017-04-30 12:25:02 +08:00
@ivvei 在不太懂技术的用户面前,UAC 的另一个尴尬之处就在于正常软件在安装、运行时申请 UAC 提权的,好像也非常多……你不能把弹 UAC 当作耍流氓的标志。
TakaLv
2017-04-30 12:26:48 +08:00
@acess 我不太懂你的意思,公共的 SD 卡? UWP 是有文件管理器的,手机上有,也支持外置存储卡。拷贝个东西也不像 iOS 那样只能靠云同步,Android 能做的 UWP 也一样能做到。
0TSH60F7J2rVkg8t
2017-04-30 12:29:17 +08:00
@acess MBR 的 rootkit 其实现在有解决方案,就是使用 UEFI 引导。
0TSH60F7J2rVkg8t
2017-04-30 12:33:30 +08:00
@acess >>“ UAC 的另一个尴尬之处就在于正常软件在安装、运行时申请 UAC 提权的,好像也非常多”
除了安装、卸载,正常软件在运行时,没有必要 UAC 提权。通常这类软件是因为没有遵循最小授权原则编写的,所以他要的权限特别多,甚至一开始运行就要完整管理员权限,而这类软件在正常使用过程中 99%的时间是不会用到非得提权才能操作的功能的。所以这其实是微软无控制力的表现。
acess
2017-04-30 12:50:18 +08:00
@TakaLv 我觉得如果 UWP 应用能任意读写用户的大多数个人文件,那和 Android 的 SD 卡这块空间可能也差不了太多了。

我自己没在用 iOS,印象中 iOS 没有这么一个公共的“缓冲区”,导致了使用上的麻烦。

Windows 和 Android 中,应用可以自由访问文件。
如果不允许应用自由访问文件,可能就需要开发“相册”“文档”之类 content provider ( LZ 也不知道怎么形容)应用。别的应用如果要读取内容,必须手动在原先的应用里点一下“分享”“用 XX 打开”之类的按钮;或者,应用要读取文件时,主动调用这些“ content provider ”,让用户从“ content provider ”中选择要使用的文件。
说实话,这可能并不是坏事,反而是好事:因为文件可以被更有序地组织起来,防止出现用户乱丢文件、找不着在哪的情况。
但文件类型五花八门,可能系统不能都对应开发类似“相册”“文档”之类的 content provider 应用包办,如果干脆出个“文件管理器”,那权限粒度可能又太粗糙……

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

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

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

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

© 2021 V2EX