知乎、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 之前非得看看数字签名是否有效等麻烦的习惯,不过这似乎也不会给自己带来太多实在的好处……
18904 次点击
所在节点    随想
169 条回复
acess
2017-04-30 15:24:21 +08:00
@ahhui Everything 需要提权才能工作,我觉得这是正常现象。如果它不需要安装服务,或者不需要弹 UAC 申请提权就能工作,那标准用户就可以装一个 Everything 来偷窥其他账户的文件了……微软不会犯这种低级错误。
0TSH60F7J2rVkg8t
2017-04-30 15:34:33 +08:00
@acess 不赞同下载工具有理由加载驱动这个假设,不过要不要加载,加载了干什么,对用户来说没有发言权,只有开发商自己有发言权,只是这里开发商是否考虑用户的利益就无从知晓了。以前的网际快车,网络蚂蚁(好早了对吧)的软件,从来都不需要驱动啊,它们有插件模式,有 BHO,都能起到弹出下载窗口,无需接管用户的网络请求,所以后来的软件有了驱动就说明它没有遵守权限最小化的原则。

至于你说到的如果标准用户可以不经过 UAC 申请就能窥探到其它用户的隐私文件的问题,我觉得这个不需要 UAC,NTFS 的分配权限就能实现,对相应的目录阻止特定用户,或者特定用户组的读取访问,就可以了。当然,文件名可能拦不住,但文件内容绝对是拿不走的。

开发商的技术水平参差不齐,也是现在权限滥用的一个原因。比如有些共享软件,必须有管理员权限才能读取硬盘序列号,然后他们也懒得更新代码,一直沿用下来,所以这类软件可能每次启动都必须要提权,或者装个服务。其实读取硬盘序列号并不需要 UAC 提权,但他们都是网上抄来的代码,哪里还管得了那么多呢?这也是造成现状的原因之一。
acess
2017-04-30 15:40:14 +08:00
@ahhui 我觉得 Everything 的做法类似于数据恢复工具直接打开\\.\PhysicalDrive0 这样的磁盘设备(换成 Linux 上就是直接打开 /dev/sda 这样的块设备),其实已经超出 NTFS 权限涉及的范畴,所以系统才要求必须有管理员权限才能执行这种操作。
实际上就算 Everything 仍然依赖内核中的 NTFS 驱动,它也可以直接绕过文件系统 minifilter ……
mozutaba
2017-04-30 15:43:50 +08:00
@acess 关设置什么事。客户自己电脑感染了病毒,损坏了文件,因为插到我们这电脑上被发现。他肯定认定问题在我们这里。他电脑上的杀毒软件肯定是报的安全的咯。

杀毒软件只要保证这些病毒不感染本机就好了,别自作多情的去清除,文件损坏算谁的。
acess
2017-04-30 15:45:44 +08:00
@ahhui 以前 IE 浏览器是最普及的,现在有开源的 Chromium、Firefox,各家都进来插一脚……
杨竞的解释就是出于兼容性考虑,通过开发插件覆盖市面上各种乱七八糟的浏览器很难,才做了内核里的监视驱动。
不过……我记得 Windows 已经提供了 WinSock 来在用户态实现这个功能,不知道迅雷为什么不用这个。
另外,WinSock 好像早在多年前就因为滥用问题广受诟病了(微软可能又会觉得这锅背得冤啊)……一直到现在,netsh winsock reset 仍然是修电脑必备技能😂
acess
2017-04-30 15:46:45 +08:00
@mozutaba 我是说,卡巴应该也可以改一下设置,让它别急着把文件杀掉,改成只提示下一步操作吧?这样就可以避免这种疑似碰瓷的问题了……
mozutaba
2017-04-30 15:48:23 +08:00
@ahhui 你这做法就像小区没有保安就不让人进。保安是为了更安全。
0TSH60F7J2rVkg8t
2017-04-30 15:51:40 +08:00
@acess 我不是很清楚 Everything 有没有直接打开 \\.\PhysicalDrive0 设备的行为,这里不好判断。不过可以假设一下,它确实有这样的行为,或者如楼主提到的,依然可以在内核中绕过 minifilter (不过有点疑问,它只是管理员权限—— system 的服务——不是 ring0 级的,如何绕过了运行于 ring0 层的驱动的限制?),这就存在一个信任问题了,用户要不要、能不能信任 Everything,它即使获得了某些看起来很危险的权限,它是否能克制不对用户做出侵入性的举动?安全和信任又有着很强的联系,当用户决定减少信任的时候,则什么行为都是可疑的,甚至用户可以怀疑杀毒软件本质上是个病毒(或者是个间谍软件),这样即使正常的行为,也会因为信任的崩塌而失去意义。而这个层次又是技术无法解决的。即使微软、苹果、谷歌都说,他们有用户隐私保护协议,都说明了采集数据的原因以及处理数据的用途,但肯定还有大把的人信不过他们。
0TSH60F7J2rVkg8t
2017-04-30 15:53:36 +08:00
@mozutaba 不,我觉得我这做法是严格要求保安你一定要保护安全,而不是打着保护安全的幌子,破坏安全啊。本质上证书就是保证数据在网络传输中不被截获、破解、篡改、监听的,那么它是你口里的保安,但用了过期的证书,就好像你雇佣了一个假保安,那要求按照正当程序重新换个合法的保安也和安全有冲突了?这观点就匪夷所思了吧。
mozutaba
2017-04-30 15:53:56 +08:00
@acess 那为什么不用 360 ?那时候除了 360,其他杀毒软件的每一个弹窗都需要我解释一遍。
acess
2017-04-30 15:56:00 +08:00
@mozutaba 其实我觉得,如果对方真的是恶意碰瓷,用 360 可能也是一样的结局……可能只要有窗口弹出来提示有毒,对方就可以耍流氓,说杀软把文件搞坏了云云……
感觉卡巴在国内知名度也蛮高啊,难道他们不承认卡巴是杀软么……
0TSH60F7J2rVkg8t
2017-04-30 15:59:20 +08:00
@acess 你说的多种浏览器适配确实是个问题。但是这开发商太懒了,基于兼容性考虑就需要完全接管网络通讯么?正如你说的,WinSock 有有实现的接口,但他们没用。这其实是个态度问题,开发商能不能做到,即把功能完整实现了,又不对用户产生过多的干扰和影响。这一点很多开发商做不到。
mozutaba
2017-04-30 16:00:30 +08:00
@ahhui 还是这个比喻。保安就现在不在,可能路上掉井里了,你下班回家不让回,因为保安不在,只能等到明天早上换班保安来了才能进。你什么感觉?

浏览器只需要让用户知道目前是不安全的,就够了,不能阻挡用户访问这个网站。
acess
2017-04-30 16:04:16 +08:00
@ahhui
我已经打 Linux 下 /dev/sdX 的比方说明过了…… Windows 也允许用户态程序直接打开磁盘扇区。
至于 Everything 的确切工作原理,我也不太懂。但它能绕过内核里的 minifilter,是我亲眼所见的经验。
我说这些,只是想说明 Everything 干的事情已经超出了 NTFS 权限能管得着的范围……

我觉得 UAC 能起的作用明明可以比现在更大。因为滥用管理员特权的程序太多,导致用户提权点到麻木,这个状态是不正常的。正常情况下的确应该是用户看到 UAC 提示就警惕起来,无论是安装一个陌生软件,还是软件执行了一个敏感操作都应该警惕不是么?麻木地点“是”,这种状况是不正常的。
至于 HIPS 频繁弹窗……我觉得这可能是 HIPS 的规则不够完备,也可能说明了 HIPS 的局限性——程序已经跑在内存里,如果拦截敏感操作,你可能很难区分这是正常的行为,还是系统进程被注入劫持“黑化”产生的恶意行为。
0TSH60F7J2rVkg8t
2017-04-30 16:04:23 +08:00
@mozutaba 这个比喻不恰当啊。保安不在是保安公司可以预料的(其实你这个比喻就是说证书过期,证书过期当然是网站管理员可以预期的),那么它应该雇佣另一个保安继续保障小区的安全(保障用户和网站之间的连线安全)。而不是让保安长时间就不在,还破罐破摔,不在就不在了,你难道不回家了?这其实是保安公司(也就是网站)的责任。你不能因为用户要回家,就把保安公司的责任完全推掉了啊,毕竟这是它必须做的啊。如果说,一开始这个小区就没有保安(不走 https ),那就没有证书,用户知道没有保安,它会小心的,会关好门窗的。但如果小区有保安,保安却过期了不上班了,这和前者不能混淆一起说才对啊。你同意吗?
0TSH60F7J2rVkg8t
2017-04-30 16:06:33 +08:00
@mozutaba 刚才回复快了,补充一句。

>>浏览器只需要让用户知道目前是不安全的,就够了,不能阻挡用户访问这个网站。

问题是,这样的网站,浏览器显示的是“安全”,而并不是“不安全”的警告。
mozutaba
2017-04-30 16:07:26 +08:00
@acess 是科普的问题,放 07 年父母那辈有多少知道什么是杀毒软件?
卡巴斯基的弹窗他们是不敢接的,360 反而会提示你点了这个会有什么后果,不点会有什么后果。
这点 360 还是很有“权威”的。

这个碰瓷不担心,都是周边厂子里的,但是出问题是要自己担损失的。
0TSH60F7J2rVkg8t
2017-04-30 16:13:53 +08:00
@acess 其实麻木地点“是”这种状态,从某种角度说,反而是正常的。你看,当很多用户需要用 KMS 激活系统的时候,杀毒软件报告病毒了,甚至删除了,他们肯定也会关掉杀毒软件,重新解压,非要双击执行。我明白楼主想说 UAC 可以做更多,但我觉得,即使做得更多,用户还是会忽略。难道杀毒软件把木马病毒杀了这样严重不算更多了么?一样被用户放过了啊。更有甚者,运行就是强需求,风险再大用户也要做,如果微软 UAC 到各种细节的拦截,虽然可以让高级用户提高警惕,但对于开发这类流氓的软件开发商来说,一样有办法诱导用户绕过限制,甚至关闭限制。一个简单的例子,你在 Android 下使用的微信,关了定位权限、关了电话号码访问权限,它直接就拒绝启动了。难道说 Android 提供的权限控制还不够细吗?然而当用户必须做出二选一的时候,不是每个用户都那么理智,甚至他们还不得不“不理智”地选择为了使用软件而放弃控制权。
mozutaba
2017-04-30 16:16:10 +08:00
@ahhui 最后这点我一直有疑问,是推广上的不是技术上的。
用户用上了我的安全全家桶,我因为安全证书显示网站不安全而又不能解决,我岂不是很没用?

那只有等我给用户普及了这个不是我的锅的时候,或者用户知道有证书这个东西的时候我再弹提示。
mozutaba
2017-04-30 16:27:08 +08:00
@ahhui
@acess
关于 UAC 的,我觉的它很尴尬。它把对程序行为的判定交给了用户。比如我双击运行了还要弹出是否允许运行,肯定是允许啊。那它的提示有什么用?只能在程序极度异常的情况下,才能得到一个“否”。

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

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

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

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

© 2021 V2EX