知乎、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 之前非得看看数字签名是否有效等麻烦的习惯,不过这似乎也不会给自己带来太多实在的好处……
18896 次点击
所在节点    随想
169 条回复
billlee
2017-04-30 01:27:23 +08:00
@Domains #38 Vista 那个弹窗才叫多啊
Domains
2017-04-30 01:29:38 +08:00
@acess 微软作风,只能四不象,至于原因,上面我也说了。 是 HIPS 模式的,在最开始的 Vista 和 Windows 7 版本的 UAC,就是 HIPS,最典型就是安装新软件会有很多提示,要你同意确定的,当然也因为这个麻烦,被骂了很久(主要其实是不够智能,同样的文件同意过一次了,在没有更新过版本情况下,同样文件名同样路径,下一次仍然再提示,当然烦了),毕竟知道和了解 HIPS 的用户还是少数,后来 8 以后,为了提升安全,windows 改了很多权限的设置,administrator 根本不够用,system 用户才是最高的( 7 以前也是有 system 用户的,但用不上只能在进程里看到),有很多文件操作都要提权,UAC 在权限方面提示才多了起来(其实在提权提示窗口,我并不确定这到底是 UAC 在起作用呢,还是系统本身就存在的),单纯 HIPS 的反而没多少了
Domains
2017-04-30 01:31:35 +08:00
@billlee 嗯,一下子忘了 Vista 这一版本,所以上面补充上了,windows7 也减少提示了
Felldeadbird
2017-04-30 01:36:15 +08:00
安全带是保命的东西,为什么总有人不上车不戴呢?理解好这个问题,自然知道安全是什么东西。
wevsty
2017-04-30 01:39:42 +08:00
@hx1997 权限控制是依赖于内核的安全性的,只要内核保持在最新(打补丁)的状态这种安全性并不脆弱。如果打破内核的权限控制基本上就是内核的漏洞。在这一点上来看,安全性基本上可以保证,并不脆弱。如果有人能突破,可以致电微软领取奖金。

@acess
IE 的保护模式实际上就是对 IE 做了一些限制。在 IE 的保护模式下,IE 进程设置了 Administrators 组为拒绝,并且设置了 Low Mandatory Level (低进程完整性级别)。IE 进程想对系统做出修改就必须提升权限,实际上也就是标准账户提升到管理员账户的过程,并且由于一般用户默认的都是 Medium Mandatory Level (中进程完整性级别)所以实际上 IE 在保护级别下得到的权限比一般标准账户的权限更低一些,当然要提权也会更加困难。
浏览器存在漏洞是无可避免的,所以才需要经常更新。微软也好 Google 也好,保证的就是公开的能导致安全问题的漏洞都会被修复,所以只要保持更新“不下载、运行就是安全的”这种印象是基本上正确的。退一步,即使浏览器存在漏洞导致了代码被执行,也会有 DEP,ASLR 这样的安全机制来妨碍代码的执行,虽然这些保护是可以绕过的,但是毫无疑问的提升了代码的执行难度,有相当多的漏洞可能因为绕过这些安全机制的必要条件无法实现而导致实际上无法利用。(并不是说有漏洞就一定能被利用,并且成功入侵,这样的理解是不正确的)我们在退一步,即使有漏洞,能绕过 DEP,ASLR 这样的安全机制,成功的运行起来了,代码仍然会运行在低权限下,想对系统进一步进行修改,那么就必须提高权限,想要提高这样的权限,如果没有用户许可又必须使用内核漏洞来实现。虽然这些安全机制单点都是可以破解的,但是复合起来很显然会发挥更强大的功效。
一种安全机制的出现与其说是为了彻底杜绝某类攻击,不如说是大幅提高攻击成本。就像楼主举得例子,Windows 要求加载的驱动必须有数字签名,那么攻击者去签发一个带数字签名的证书不就得了?说起来很容易,可是数字证书是要花钱的,并且个人不能申请对代码签名用的证书,一般要求是公司进行申请,申请成功之后,如果证书被发现用于恶意软件,那么证书还可以被吊销。
我不能说要求驱动必须进行数字签名是一个好方法,但是这样的手段确实提高了攻击者的攻击成本或者攻击难度。
acess
2017-04-30 01:39:55 +08:00
@Domains
按我的理解,HIPS 的作用是让管理员不再是系统的上帝,比如直接 Hook 掉 SSDT 里的函数地址,管你是 SYSTEM 还是 TrustedInstaller,想拒绝的话,返回一个 STATUS_ACCESS_DENIED 就拒绝掉了。

HIPS 可以灵活配置规则,UAC 可能就死板一些,好像只能改改组策略,静默提权带数字签名的程序。
至于白名单……如果 LZ 没理解错,默认档 UAC 能被找出绕过漏洞,就是因为系统开了不够安全的白名单……

@billlee LZ 很好奇 Vista 时代的 UAC 弹窗多是个什么概念……
好像是 Win7 以后,PPPoE 拨号等不再需要弹 UAC 了(相当于开一个服务来做需要特权的事情,然后只允许没特权的进程对其进行有限的控制),但同时也开了容易被利用的提权后门?
acess
2017-04-30 01:48:31 +08:00
@wevsty
http://www.m5home.com/bbs/blog-4158-34.html
按照这篇文章说的,数字证书花钱不是问题,黑产愿意花钱,而且黑产甚至可能使用伪造的身份申请证书、给驱动签名(这一点我不知道是不是普遍现象)。
而且,微软没有及时封堵有漏洞的驱动(可能是他们受限于兼容性、厂商配合等因素不能这么做),甚至允许过期证书签名的驱动在系统启动时加载进内核——去年年底发生的天翼客户端蓝屏事件算是活生生的例子,签名驱动的是奇怪的 Beijing Kate Zhanhong Technology Co.,Ltd.。
acess
2017-04-30 01:49:52 +08:00
@wevsty 可以看见那个恶意驱动的数字签名没有时间戳,而且数字证书早在 2014 年就过期了。
acess
2017-04-30 01:52:01 +08:00
@wevsty ASLR、DEP 等缓解技术能有效提高攻击的成本,但不能完全避免漏洞被利用,这一点我自认为已经理解了。
TakaLv
2017-04-30 02:02:10 +08:00
UAC 这东西能有什么安全的,只是强制性的提供一个用和不用的选择,不清楚具体危害给了权限自然会直接挂掉。
hx1997
2017-04-30 02:04:59 +08:00
@wevsty 但是权限并不能管到所有的东西啊,比如窗口就是不在权限约束范围内的,虽然 UIPI 对窗口攻击做了一定限制,但是大部分进程默认都是中完整性级别,根本无法防范诸如键盘记录器的威胁。还有就是文件系统和注册表权限,如果你遇上勒索软件,把全盘能加密的文件都加密了你能咋办,你平常的文档总不会设置权限的吧,要是用低完整性级别有时又会有兼容性问题了。再极端点的,如果不是 NTFS 文件系统那磁盘文件根本就不受权限保护。。。再再比如著名的所谓白加黑,信任程序加载恶意 DLL,程序运行时弹出 UAC,用户一看是个正常程序就放行了,却不知道程序已经黑化。所以我说脆弱的意思倒不是说权限机制本身不安全,而是说还有其他攻击面呀。

你们都不睡觉的吗?
TakaLv
2017-04-30 02:06:35 +08:00
这就好比谷歌费心费力给安卓搞优化,但没有限制应用耍流氓的途径,所以安卓用起来还是卡。UAC 也同理,只是让用户察觉到危险,但不能让用户完全避免危险。
wevsty
2017-04-30 02:07:09 +08:00
@acess 对,花钱当然是没问题的,但是至少提高了攻击成本。本来我写一个驱动,抛开人工成本,电费成本,开发出来基本上不用花钱就能做出来攻击一大批人。需要数字签名的话,那么我就得额外多花一个数字签名的费用,并且大规模的攻击就不太容易实现了,因为大规模的攻击更容易被发现,导致数字签名被吊销。
至于证书的过期时间,我了解的不太多,但是据我了解,证书本身有过期时间,可是签名出来的文件是没有过期时间这一说法的。如果签名用的证书过期了就不允许加载这个驱动,那可能你会发现某一天突然你的电脑无法启动了,因为证书过期了没有更新。
至于吊销列表微软完全有能力发布更新来解决,但是说到底,封堵第三方应用的漏洞就不是微软该干的工作。不怕神一样的对手就怕 X 一样的队友,放在安全上尤为适用,因为安全问题永远出在最薄弱的地方。
TakaLv
2017-04-30 02:09:52 +08:00
@mikeven 知乎安卓粉更多一点,说句流畅度没法比都会被你没用过原生、XX 版本早不卡了、XX 厂商负优化素质三连,这明明是事实的说。
acess
2017-04-30 02:15:35 +08:00
@hx1997 LZ 正是了解到这些威胁才开始反应过来:杀软实际上扮演了一个非常重要的角色,虽然我们常常吐槽杀软是安慰剂……

@wevsty 封堵第三方应用的漏洞不是微软的工作,但维护 Windows 的“信任根”(不知道我用没用错术语)应该是微软的职责吧。

天翼客户端蓝屏事件其实才是刷新 LZ 三观的起点,LZ 本来以为有了 DSE,这种内核驱动木马应该近乎绝迹了,没想到搞定数字签名对那帮人来说还是接近 0 成本……
然后…… Win10 的 PatchGuard 在恶意驱动 Hook NTFS 驱动的时候整出了大面积蓝屏循环,把这件事搞成了大新闻,也许在这个意义上 PatchGuard 确实立功了(虽然很多用户好像压根没理解到这个层面)……
acess
2017-04-30 02:19:46 +08:00
@TakaLv 我觉得逛完知乎很容易形成一种印象:360 等国产免费杀软就是病毒,现在的病毒就是流氓全家桶,开 UAC 就可以防住流氓全家桶……
还有人推荐过 IObit 的 Advanced SystemCare 等软件,不过 LZ 上网搜了一下,好像这个 IObit 也是个国内的公司,而且好像有刷好评等黑历史……
wevsty
2017-04-30 02:28:20 +08:00
@hx1997
权限始终是用来保障控制的一种手段,对于无法覆盖到的地方自然是没有办法,但是也不应该用脆弱来形容。
对于窗口确实没有太多办法,毕竟权限不是主要用于处理窗口方面的问题的。
至于其他的攻击面,其实是和使用方法有关系。如果能做到更为细化的权限控制,那么这些问题其实并非不能解决,比如勒索软件,如果创建一个用户拒绝访问文档有关的目录,并且使用该权限来运行勒索软件的话,那么很显然勒索软件尝试加密的操作将会直接失败。(当然如果你一定要谈使用不支持 ACL 的其他磁盘格式那也是没办法的)
注册表的问题也是一样。

我开发 wesuex 这个产品的目的就是希望能更加细化一些权限方面的管理,通过这个产品我们可以让不同的程序运行在不同的权限或者用户下,这样我们就可以拒绝不必要的权限加以限制。比如创建一个拒绝访问 D 盘的用户,那么用这个用户来运行一个程序,这个程序就不能扫描到 D 盘的隐私内容了。这个是我理想中的用法,当然虽然现在做的不好,但是还是可以努力一下。
TakaLv
2017-04-30 02:28:51 +08:00
@acess 除了 iOS 这样系统外,日常防毒是全靠自己的,不过 iOS 要是中毒一般人也对付不了。至于 UAC 这玩意,我记得某某人的公司里禁止应用获取 UAC 权限以及安装应用,但已经获取 UAC 权限的搜狗输入法还是强行安装了搜狐浏览器。
TakaLv
2017-04-30 02:32:56 +08:00
@acess 所以讲我感觉这个逻辑上很蛋疼,防君子不防小人的防毒能力还不如 iOS 那样的呢。
wevsty
2017-04-30 02:36:26 +08:00
@acess
微软一直都有做根证书更新这件事情,从未停止过。
进入了 RING0 层,在驱动级别的对抗是永无止境的,事实上也没办法阻止驱动干点什么事情,最根本的还是阻止加载驱动。

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

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

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

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

© 2021 V2EX