V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acess
V2EX  ›  随想

知乎、UAC 和 Windows 安全

  •  
  •   acess · 2017-04-29 20:44:38 +08:00 · 18350 次点击
    这是一个创建于 2555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先,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 之前非得看看数字签名是否有效等麻烦的习惯,不过这似乎也不会给自己带来太多实在的好处……
    第 1 条附言  ·  2017-04-30 00:57:08 +08:00
    LZ 承认刚开始刷知乎时确实有点优越感……
    不过,抛开装 B 不谈…… LZ 很好奇有没有真正权威、客观的信息来源(科普),能真正帮助对信息安全不懂的用户理解信息安全方面的常识,并规避当下的各种风险?
    知乎能胜任这个任务吗?如果知乎不行,那谁能胜任呢?
    第 2 条附言  ·  2017-10-07 08:17:27 +08:00
    LZ 火星了……
    UACME 已更新,揭示出 UAC 拉到顶(总是通知)也是没 X 用的:
    https://github.com/hfiref0x/UACME
    标准用户才能防范这些绕过。
    169 条回复    2017-05-03 11:42:25 +08:00
    1  2  
    acess
        101
    acess  
    OP
       2017-04-30 12:52:24 +08:00
    @TakaLv iOS 有很好用的 AirDrop,但 LZ 推测可能是苹果出于自己的私心,完全没有提供 SMB、FTP 等通用协议,或者类似 AirDroid 的那种基于 Web 的文件分析机制……
    acess
        102
    acess  
    OP
       2017-04-30 12:56:21 +08:00
    @ahhui 我觉得目前的确有不少开发者偷懒,一味地申请管理员权限,不过有些应用可能确实需要管理员权限才能正常工作。
    比如 Everything,至少需要管理员权限来安装一个服务(不过 LZ 觉得 Everything 这个例子不好,因为 Everything 把 NTFS 权限全给架空了,所以它只适合个人用户使用)。
    总之…… LZ 只是觉得不能简单粗暴地以 UAC 弹窗作为耍流氓的判断标准。
    magiclu
        103
    magiclu  
       2017-04-30 12:59:48 +08:00
    有个办法能解决几乎所有的 windows 的漏洞,就是用一般用户登录,然后大部分的软件运行时都要再输一次管理员密码
    acess
        104
    acess  
    OP
       2017-04-30 13:04:02 +08:00
    @ahhui
    UEFI 的 Bootkit 其实现在也已经有了,鉴于.efi 文件也存放在硬盘上,LZ 感觉地位可能和 MBR Bootkit 类似……
    比如 Kon-Boot,可以用 U 盘启动它,绕过开机密码。
    SecureBoot 可以阻挡 UEFI Bootkit,不过感觉只有购买品牌机的用户,或者比较有安全意识的用户能受到 SecureBoot 的保护。
    LZ 身为外行,感觉要理解 SecureBoot 的信任体系还是挺困难的,无论是电脑城装机小哥还是稍有经验的用户都是这样。所以,很容易想象出:为了重装系统、启动 WinPE 方便等目的而直接关掉 SecureBoot 可能会成为普遍现象……
    MFC
        105
    MFC  
       2017-04-30 13:07:47 +08:00
    知乎好像是腾讯有投资的,当然得给小白们营造一个系统安全的假像,方便他们的流氓软件更好地运作。。。
    kaneg
        106
    kaneg  
       2017-04-30 13:28:45 +08:00 via iPhone
    证书过期而签名不过期这个问题我在 java jar 签名中也遇到过。因为证书的有效期一般不会太长,一般就是 1 年,或几年,而签名后的产品不会因为证书过期就认为是非法的。所以说只要证书在有效期内,其签名是永久有效的。但如何保证有人把电脑日期调到一个已经过期证书之前从而利用该过期证书来签名呢,jar 签名中引入了一个利用权威 CA 在线验证时间戳的机制( TSA ),这样就可以避免回调时间的漏洞了。
    acess
        107
    acess  
    OP
       2017-04-30 14:02:39 +08:00
    @geelaw
    看上去开两个账号好像不能阻止已经搞定本地管理员的入侵者顺藤摸瓜搞定域上的资源?

    http://www.freebuf.com/articles/102500.html
    ( 1 )伪造 token
    一旦你能以管理员权限访问到一台计算机,你也可以使用其他用户的 token 去访问域管理上的资源。可实现该功能的两个推荐工具是 incognito [1]以及 mimikatz[2]中的“ token::*”命令。
    mozutaba
        108
    mozutaba  
       2017-04-30 14:33:50 +08:00
    @acess 被删了的文件显然被感染或者被替换了,恢复出来也打不开啊。这锅算谁的。
    而且几百 M 体积我记得是不备份的。
    mozutaba
        109
    mozutaba  
       2017-04-30 14:36:24 +08:00
    @ivvei 你把它当用户协议了,肯定是这个效果。
    mozutaba
        110
    mozutaba  
       2017-04-30 14:39:28 +08:00
    @acess 后台刷量仅仅是刷流量嘛?
    mozutaba
        111
    mozutaba  
       2017-04-30 14:49:15 +08:00
    @ahhui 那你还买不买火车票,要是网银这种到还可以理解。

    换句话说,为了不清楚存不存在的安全风险禁止掉正常的可访问的业务?
    ahhui
        112
    ahhui  
       2017-04-30 15:00:30 +08:00
    @mozutaba 这个关系反了,应该是督促正常可访问的业务符合安全标准。他不符合你迁就他他难道哪一天心情好了会符合么?然而在不符合的期间,风险自然转嫁给用户了。12306 的数据黑产手里应该都有。
    ahhui
        113
    ahhui  
       2017-04-30 15:03:05 +08:00
    @acess 如果攻击者可以用 U 盘启动你的机器了,那已经没有安全可言了啊。房门都打开了,所有防护哪里还能起效呢?
    电脑城的装机小哥帮忙装完系统后还会千叮咛万嘱咐,别打补丁,打补丁会卡。这真的无解啊。
    acess
        114
    acess  
    OP
       2017-04-30 15:05:05 +08:00
    @mozutaba
    锅是谁的……这个问题果然蛋疼😂
    不过感觉这个可以调设置解决吧?

    另外,记得在看雪还是哪个论坛里,有人说过 360 离线时基本不杀……

    至于 12306 ……可能和 WAPI、国密算法、火星 GPS 坐标一样是中国特色吧。
    不过就 12306 来说,用户可能并不是没办法,比如,可以在浏览器里给 12306 加个证书例外,这样访问其他网站也不受影响。
    acess
        115
    acess  
    OP
       2017-04-30 15:07:59 +08:00
    @ahhui 同理,其实如果用户连管理员权限都把守不住,也可以说“已经没有安全可言”了……
    但很多个人用户的机器上可能没啥商业秘密,所以,“事后”如何才能迅速发现系统不对劲、如何把恶意软件扫地出门,也是被用户关心的。
    ahhui
        116
    ahhui  
       2017-04-30 15:09:09 +08:00
    @acess Everything 把 NTFS 架空是什么意思?我没理解过来,请明示,谢谢!确实这个例子不恰当,早期的 Everything 每次启动都要管理员权限,后来有了服务就好多了。其实这说明随着安全性的提高,各种新技术的应用,软件必须跟上技术发展的规律做各种适应,而不能偷懒。有的懒是因为历史遗留问题产生的,更新新版后可以解决;但有的懒是故意而为之的。一个浏览器有什么理由加驱动?一个聊天工具有什么理由要加驱动?一个下载工具又有什么理由要加驱动呢?还有还有不少用户使用的系统,ghost 系统,或者安装版系统,装好就关闭了 UAC,即使没关闭,很多用户还主动关闭呢。其实这也是个技术适应问题,最理想的状态是,厂商和用户都要跟着技术进步走,然而这个状态并不存在。
    acess
        117
    acess  
    OP
       2017-04-30 15:13:06 +08:00
    @ahhui Everything 是无视 NTFS 权限的,感觉原理类似于 DiskGenius 直接解析文件系统,连某些在内核里挂钩的 Rootkit 都可以无视。
    确实,有些软件要管理员特权是流氓耍过头的表现,比如 UCGuard.sys ……但 Google Chrome 不也搞了个计划任务来静默自动更新么……所以我才觉得虽然安装 /运行时弹 UAC 有流氓嫌疑,但并不能说弹了 UAC 就一定是流氓……
    另外,Everything 不需要加载驱动就可以正常工作。
    ahhui
        118
    ahhui  
       2017-04-30 15:15:26 +08:00   ❤️ 1
    @acess 那么问题来了,管理权限到底是用户有权把守,还是系统开发商有权把守呢?总得有个人把守,平衡的点在哪里呢? UAC 肯定不是一个绝对安全的解决方案,甚至他的设计之初就不是用来干这个的。他只是增加了一道可以让用户做出决断的屏障,这个屏障要考虑到易用性、安全性的平衡。其实 HIPS 确实安全,可以把很多功能细化,可以弹出具体的提示,但真的很烦啊。我用卡巴的 HIPS 系统的时候,有时候联网不畅,他会把 Wininit.exe 改变到受限组里,我又使用的是交互模式,这时候几乎每个程序的每个行为都在弹窗,弹多了也就疲劳了,用户看到弹窗只能机械地点确定,这和你提到的“把守不住管理权”的结果是一样的。这其实是个人性问题,并不是个技术问题。
    ahhui
        119
    ahhui  
       2017-04-30 15:19:20 +08:00   ❤️ 1
    @acess Everything 没有绕过任何权限,它只是读 NTFS 的文件系统的 USN 日志而已。只是这个日志在操作系统里是隐藏不显示的。你可以用任何磁盘编辑软件,如 WinHex 打开任何磁盘,都能看到一系列$开头的目录,这些目录里存放的就是这些日志。Everything 要提权也是因为系统限制,只有提权了才能读这些日志,但它无法绕过 NTFS 的权限控制,他甚至不知道一个文件的大小,只能通过在窗口显示文件的时候,动态读取大小显示出来。他之所以搜索快,也是因为从日志里分析组织数据之后,比全盘扫描挨个查找文件快。楼主如果对原理感兴趣,可以阅读这篇博文: http://blog.csdn.net/wangjian223344/article/details/13502837
    acess
        120
    acess  
    OP
       2017-04-30 15:21:24 +08:00
    @ahhui
    下载工具还真有理由加驱动…… IDM 就搞了一个,把明文 HTTP 的文件下载请求拦下,然后拉起 IDM 主程序。迅雷也这么搞了,知乎杨竞的答案解释过。不过,确实有可能出 bug 影响正常使用,杨竞答案的评论区里说过,这个驱动可能导致 shadowsocks 等软件不正常……

    至于关闭 UAC ……我觉得 Windows 生态圈就是这个样子,如果真的把 SecureBoot、DSE 都收紧了,而且不让用户装应用商店之外的东西,那这个系统还能叫 Windows 么……感觉简直变成 iOS 或 Android 翻版了嘛,只是操作方面可能更适合台式机 /笔记本的键鼠而已。

    另外,其实我觉得什么时候弹 UAC,应该是软件开发者仔细研究后决定的事情。应该是注册服务 /计划任务来实现需要权限的操作免弹 UAC,但敏感操作仍然需要弹 UAC 请求用户确认。
    但现在,开发者的行为本身可能就让用户不爽了,而且不少开发者可能固守着 Win98 时代以来的系统文件随便动的刻板印象(大概就是因为这个,才有人吐槽关闭 UAC 等于回到 Win98 时代?),不愿意适应新系统,现状就是这么蛋疼……
    acess
        121
    acess  
    OP
       2017-04-30 15:24:21 +08:00
    @ahhui Everything 需要提权才能工作,我觉得这是正常现象。如果它不需要安装服务,或者不需要弹 UAC 申请提权就能工作,那标准用户就可以装一个 Everything 来偷窥其他账户的文件了……微软不会犯这种低级错误。
    ahhui
        122
    ahhui  
       2017-04-30 15:34:33 +08:00   ❤️ 1
    @acess 不赞同下载工具有理由加载驱动这个假设,不过要不要加载,加载了干什么,对用户来说没有发言权,只有开发商自己有发言权,只是这里开发商是否考虑用户的利益就无从知晓了。以前的网际快车,网络蚂蚁(好早了对吧)的软件,从来都不需要驱动啊,它们有插件模式,有 BHO,都能起到弹出下载窗口,无需接管用户的网络请求,所以后来的软件有了驱动就说明它没有遵守权限最小化的原则。

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

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

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

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

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

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

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

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

    那只有等我给用户普及了这个不是我的锅的时候,或者用户知道有证书这个东西的时候我再弹提示。
    mozutaba
        140
    mozutaba  
       2017-04-30 16:27:08 +08:00
    @ahhui
    @acess
    关于 UAC 的,我觉的它很尴尬。它把对程序行为的判定交给了用户。比如我双击运行了还要弹出是否允许运行,肯定是允许啊。那它的提示有什么用?只能在程序极度异常的情况下,才能得到一个“否”。
    ahhui
        141
    ahhui  
       2017-04-30 16:29:51 +08:00
    @mozutaba 我能理解你这个疑问。但“因为安全证书显示网站不安全而又不能解决,我岂不是很没用”这个结论不是很赞同。全家桶保护的是用户的安全,那么网站故意忽视用户的安全,这个全家桶的责任就是“告知用户风险”,如果用户决定忽略风险继续,那是用户自己的责任,但不能把这个责任改成“那个网站有风险,但我觉得我不能阻挡用户访问,那我就说这是安全的,让用户继续访问好了”这样。因为告知风险的前者是个“安全软件”应尽的义务;后者不是一个“安全软件”应该做的事情。

    换个例子来解释下我的观点,假设用户买了一台跑车,这跑车性能好,在出现危险的时候会弹出安全气囊 ,进入车门开车的时候会语音提示用户绑上安全带。那么这是一辆以“安全为重”,又兼顾了功能性的合格的跑车;而另外一辆,标榜自己是安全的,但安全气囊偷工减料,出事的时候,可能弹出也可能不弹出,上车也不要用户绑安全带,甚至还对零件老化可能产生的风险忽略不计。那么后一辆我们不能说他是以“安全为重”的跑车。他只是一辆跑车,在某些方面来说甚至还是一辆不合格的跑车。那对用户来说,哪辆更好呢?

    当然,你的例子里提到,要普及这不是“我的锅”很难,但这并不是把锅揽到自己头上的理由。就证书而言,提示过期的证书错误,禁止访问才是甩锅,因为那锅本来就是对方网站的;而允许访问造成用户浏览到虚假网站——使用中间人攻击的黑客的虚假证书——锅就揽到自身上来了。当然,无耻一点不承认就好了,反正用户没有技术能力能判断出来锅到底是谁的。但这是后话了。
    ahhui
        142
    ahhui  
       2017-04-30 16:31:42 +08:00
    @mozutaba 这点我赞同,UAC 确实太尴尬了。但是假设一下,如果微软来决定,直接弹出拒绝运行,用户恐怕也会怒砸键盘的。其实确实左右为难,尴尬的不得了。
    acess
        143
    acess  
    OP
       2017-04-30 16:39:01 +08:00
    @ahhui 我说 UAC “做得更多”确实可能产生歧义……我的意思并不是让 Windows 收窄未提权管理员用户的权限,而是说正规的开发者应该好好利用 UAC,在执行敏感操作时提醒用户,而不是像某些软件一样一双击就弹 UAC,不点“是”不给用。
    我只是吐槽现在 UAC,正规软件弹,流氓也弹,加在一起,用户能感觉到的就是各种弹,弹个不停……所以很多用户最后只能麻木地点“是”,让 UAC 真的变成没用的东西了……

    至于诱导用户关闭杀软之类的,UAC 和杀软都管不了那么宽……

    @mozutaba 我觉得很多情况下程序确实不需要弹 UAC 也可以正常安装、运行,但可能是因为抄代码、偷懒等原因,再加上关闭 UAC 实在太容易,所以 UAC 才因为弹得太多而在用户眼中变成了没用的东西。

    LZ 认为 UAC 有用的理由:如果恶意代码没有管理员特权,那在补丁打全的情况下,它也很难钻进 ring0、很难提升权限。
    这样一来,安全软件依靠自己的高权限就可以轻松秒杀各种恶意代码,只要它能正确检测到恶意代码就可以了。但现在,ring0 的驱动木马、Bootkit 都泛滥了,杀软即使能和它们对抗,也是没完没了的……
    至于用户自己的数据和隐私问题,也许可以举这个例子:UAC 虽然管不了一般的键盘记录器,但它可以挡住比较危险的内核级键盘记录器。
    mozutaba
        144
    mozutaba  
       2017-04-30 16:40:48 +08:00
    @ahhui 提示不安全,却不能解决,这点就会导致用户不相信这个产品,更可能走人了。
    那不如默默的装不知道。要是能有用户肯定选我们的底气,debug 给你看都行。

    出事的话,哪种解决方法用户都会认为是我们的锅。

    UAC 我认为就是甩锅行为,不然就是特殊条件下才起到用处。比如前面提到的,关了软件,却背着给我刷软件的安装量,这时候 UAC 就有用了。
    acess
        145
    acess  
    OP
       2017-04-30 16:41:31 +08:00
    @ahhui 微软的理想状况是用户看到软件乱弹 UAC 就各种吐槽软件开发商,然后开发商受不了就去改进,适应 UAC。
    但实际状况是大家一起吐槽微软的 UAC 就是个逗逼机制,纷纷把它完全关掉。
    wevsty
        146
    wevsty  
       2017-04-30 16:43:33 +08:00   ❤️ 2
    @acess
    @ahhui
    我解释一下 open \\.\PhysicalDrive0 这种行为。
    对于 File System Filter Drivers 来说,open \\.\PhysicalDrive0 这样的行为 Filter Drivers 会收到一个 IRP_MJ_CREATE 的请求,如果 Filter Driver 在针对这个请求直接拒绝,那么直接打开设备的操作明显会失败。这里不存在所谓绕过这么一说。只是取决于驱动怎么处理直接访问设备的请求,如果驱动对此没有拒绝,后续的操作因为直接是针对设备块的读写(其实就是直接向磁盘驱动发起了 IRP )并不涉及文件系统,所以 File System Filter Drivers 无法拦截后续的读写操作,这看起来就像是,绕过了,但是实际上只是驱动不想粗暴的拒绝而已。
    如果要拦截底层的磁盘访问的 IRP 请求当然也是有办法的,不过这又是另外一个话题了。
    ahhui
        147
    ahhui  
       2017-04-30 16:45:53 +08:00
    @acess 我的观点和你一样,只是期待开发商自己好好利用 UAC,在需要的时候才弹,这根本不现实。因为微软没有强制力,而对于开发商来说,他又有用户不得不用的粘合度,仰仗着这些,他完全不屌微软的规范是完全有可能的。所以归根结底还是系统太开放(从另一个角度说,用户也受益于这样的开放,也受害于这样的开放)导致的。

    对了,说个你可能没想到的情况。杀毒软件通常有自我保护,也自身运行在很高的系统权限等级之上。但是这不意味着杀毒软件本身是无懈可击的,有很多入侵甚至可以利用杀毒软件本身的漏洞。而恰恰由于杀毒软件本身是要和病毒做对抗的,保护严密,一旦被利用,后果也十分严重。比如我知道的,Avira XP 版本(老版本了,新的不知道)经常有开机弹广告的情况。这个广告是 http 访问的,使用的是 IE 内核。细思一下,可怕不可怕?还有以前老版本的杀毒软件,自动更新都不校验数字签名的,下载的文件直接 load,或者 run 的。是不是更可怕了?
    acess
        148
    acess  
    OP
       2017-04-30 16:46:30 +08:00
    @mozutaba
    LZ 觉得,UAC 管不了“刷量”,这压根不是它的职责范围。

    按 LZ 的理解,UAC 的职责范围差不多就是“一个标准用户中毒后系统仍然毫发无损,删除中毒账户就可以重新开始”,至于用户自己作死导致数据丢失、被盗等,那不是 UAC 要管的事儿。
    但 UAC 可以帮助用户把关系统管理员特权,可能确实能帮助用户阻挡最危险的内核 rootkit 等威胁。

    至于刷量问题,如果软件支持 per user install,那安装的时候其实可以不弹 UAC。
    如果不是现在的流氓安装起来都需要管理员特权,我觉得刷安装量是可以完全不打搅 UAC 的……
    而且,那个灰色软件可以不刷安装量,只刷点击量啊,这样就不会触发 UAC 了吧……
    acess
        149
    acess  
    OP
       2017-04-30 16:51:28 +08:00
    @wevsty
    我自认为大概理解你说的……能“绕过”,说明那个 filter driver 考虑不严谨。
    好比一个柜子上有好几个抽屉,其中一个抽屉上锁了,但其实只要抽掉上面没上锁的抽屉,就会发现里面是相通的……

    那个 minifilter 是一个恶意 rootkit 驱动,它的目的大概也只是躲过 360 等杀软的扫描而已吧……它还触发了 PatchGuard。
    可能写这个 rootkit 驱动的家伙不知道从哪里扒来了代码,只是抱着能跑就好的态度草草了事的。
    mozutaba
        150
    mozutaba  
       2017-04-30 16:52:07 +08:00
    @acess 我以为 UAC 的职责就是告诉你这个非正常运行的软件威胁到了本系统,怎么处理自己看着办,UAC 反正没办法。
    ahhui
        151
    ahhui  
       2017-04-30 16:55:31 +08:00
    @mozutaba 你这个说法我能理解的,只是我觉得这问题如果要这么看的话,那这个并不是一个合格的安全软件,因为他的首要目标不是安全,而是要让用户觉得自己好用。既然定了这样的目标,那与他谈安全就对牛弹琴了。这样的软件好不好?不懂的用户肯定觉得好,你看,别人都打不开的网站我能打开。那么我们再继续假设下去,这样的软件对用户来说是利大于弊还是弊大于利呢?这就值得讨论了。如果利大于弊,那就是劣币驱逐良币的问题了。因为这样的软件越普及,就越意味着更多的用户不需要安全。整体上看,都是有害的。隐藏的弊迟早要爆发出来的,后果可能很严重的。
    acess
        152
    acess  
    OP
       2017-04-30 16:55:58 +08:00
    @wevsty
    其实还是怪我没说明白……
    我说被绕过的是文件系统过滤驱动,不是磁盘设备过滤驱动。它可能拦截不到打开磁盘设备的 IRP 吧?
    ahhui
        153
    ahhui  
       2017-04-30 16:58:52 +08:00
    @acess 哈哈,吐槽这个结果你想的太理想了。事实上可能是,微软吐槽开发商,然后开发商说,这是微软最垃圾的一代系统,兼容性不好,建议大家换系统(比如从 Win10 换到 Win7 )。小白哪里分得清到底谁说的是真的呢?然而老系统运行的好好的,新系统不让用了,嗯,即使笔记本是正版,我也要换成盗版老系统用这个软件——小白们如是说道。
    wevsty
        154
    wevsty  
       2017-04-30 16:59:08 +08:00
    @acess
    这完全取决于开发者希望产生什么样的效果,比如我要开发一个文件透明加密的驱动,那么我就没有必要防程序直接读取或者写入磁盘的这种行为,因为不会影响到我的程序功能。
    一般安全产品在这方面的处理方法也是简单粗暴的,可能有些 HIPS 会直接弹个窗,警告一下,如果允许了剩下的事情 HIPS 也不管。
    这个是开发难度与产品功能之间做出的妥协,安全产品当然也可以直接接管更加底层的 IRP 请求,但是那又会面对一堆乱七八糟的问题,比如稳定性方面的问题。
    ahhui
        155
    ahhui  
       2017-04-30 17:00:43 +08:00
    @acess 其实我说小白用户换系统喷新系统兼容性不好的例子,还真的发生过。大名鼎鼎的 Vista 系统就是这样的下场。
    mozutaba
        156
    mozutaba  
       2017-04-30 17:06:32 +08:00
    @ahhui 首先他是一个公司,首要目标就是盈利,就看他们选择是保护 1%用户的 99%安全,还是保护 99%用户的 90%安全。选择后者要想办法甩锅,选择前者要想办法接锅。
    ahhui
        157
    ahhui  
       2017-04-30 17:08:47 +08:00
    @acess 对了,最近还有个例子很有代表性。苹果的系统算是很封闭吧,他对 AppStore 上的软件控制力够严格吧。不符合要求直接下架。嗯,这种情况下,该说他控制力很强了。可是,苹果要求微信的公众号打赏功能接入 IAP 系统架构里的时候,微信表示了拒绝,不改为 IAP,即使从 iOS 上撤下打赏功能也不改。此举赢得了很多微信网友的称赞和支持。当然,这不是个安全问题,这是另外一个涉及到经济利益的问题。但这个例子也能证明,开发商有底气不鸟你操作系统的!
    ahhui
        158
    ahhui  
       2017-04-30 17:09:46 +08:00
    @mozutaba 我觉得我俩都无法说服对方了,这个问题就此打住吧。
    wevsty
        159
    wevsty  
       2017-04-30 17:12:42 +08:00   ❤️ 1
    @acess
    应该是可以拦截到的
    从调用链就可以看出来。
    CreateFileW (\\.\PhysicalDrive0 )—》 ZwCreateFile->NtCreateFile
    NtCreateFile 会向驱动层的最上级驱动发起 IRP_MJ_CREATE,然后 IRP_MJ_CREATE 这个 IRP 会依次按照顺序发送到下级驱动中,直到最后发送到磁盘驱动。
    File System Filter Drivers 想拦截拦截文件的打开就一定会在这个调用链中,所以 File System Filter Drivers 有能力拒绝这样的行为。
    而对于直接向磁盘写入这种行为来说。
    WriteFile-》 ZwWriteFile-》 NtWriteFile
    NtWriteFile 产生的 IRP_MJ_WRITE 不会交给 File System Filter Drivers,因为要写入的并不是一个文件系统的对象,所以 File System Filter Drivers 并不会接收到这个 IRP_MJ_WRITE。
    wevsty
        160
    wevsty  
       2017-04-30 17:56:51 +08:00
    接楼上,做个更正 NtCreateFile 是调用 IoCreateFile,由 IoCreateFile 来发起 IRP 的。这个是我疏忽了。
    acess
        161
    acess  
    OP
       2017-04-30 18:27:44 +08:00
    @wevsty
    Minifilter 看上去确实可以拦截到 IRP_MJ_CREATE ……这一点一开始我理解错了。

    开了 Process Monitor,它的确拦截到了打开\Device\Harddisk0\DR0 的 IRP_MJ_CREATE。
    PCHunter 的文件系统->微端口过滤器可以看到属于 PROCMON23.SYS 的项目,包括 IRP_MJ_CREATE PreFun、IRP_MJ_CREATE PostFun 等。

    不过,调用链好像和您说的不太一样?
    Process Monitor 的内核调用栈看起来是这样的:
    FLTMGR.SYS!FltpPerformPreCallbacks
    FLTMGR.SYS!FltpPassThroughInternal
    FLTMGR.SYS!FiltpCreate
    ntoskrnl!IopParseDevice
    ntoskrnl!ObpLookupObjectName
    ntoskrnl!ObOpenObjectByNameEx
    ntoskrnl!IopCreateFile
    ntoskrnl!NtCreateFile
    ntoskrnl!KiSystemServiceCopyEnd
    下面就是用户层了:
    ntdll!NtCreateFile
    KernelBase.dll!CreateFileInternal
    KernelBase.dll!CreateFileW
    KernelBase.dll!CreateFileA
    ……

    结合这里的一张描述 Filter Manager 的图……
    http://bobao.360.cn/learning/detail/3403.html
    猜测到这里可能只是执行了 Minifilter 的 PreOperation,还没真正给下层驱动发送 IRP ?
    Cu635
        162
    Cu635  
       2017-04-30 18:53:12 +08:00
    @ahhui
    @acess
    知乎是“内行人肉、外行答案”的聚集地。

    @Domains
    “你以为微软写不好一个牛逼的浏览器?真的只能 IE8、IE10/11 那么鸡肋?是不敢”
    反垄断法管的可不是说微软不能开发一个好使的浏览器,而是管的微软不能捆绑。
    wevsty
        163
    wevsty  
       2017-04-30 19:24:56 +08:00
    @acess
    调用链方面中间有些省略,不过大致上是这样的。
    在 ntdll.dll 中 Nt*函数和 Zw*函数功能是相同的, Nt*函数是 Zw*函数的别名.
    ntoskrnl.exe 中 ZwCreateFile 会最终调用到 NtCreateFile
    在你看到的调用栈里
    NtCreateFile 这里使用 IopCreateFile,ObOpenObjectByNameEx 从名字上就能看出来,目的是把名字转换成 Object 对象,在这转换过程中触发了 IRP_MJ_CREATE
    geelaw
        164
    geelaw  
       2017-04-30 19:46:33 +08:00   ❤️ 1
    @acess

    实际上如果你有本地管理员的权限,你可以 dump lsass,然后从里面挖出来域用户凭据缓存。之前那个场景是为了防止手贱的(就像是 UAC 也是一个防止手贱的功能),因为要搞出来这个名堂还是很困难的。
    Domains
        165
    Domains  
       2017-04-30 21:10:57 +08:00
    @acess 信任问题,要是信任 IDM,它的驱动级加载其实很好用,能真的完全拦截下所有下载请求,不管是前台还是后台偷偷下载的,包括木马下载器,一定程度也能防木马。当然用户首先也要会识别莫名的 URL 下载请求,不然也没用
    acess
        166
    acess  
    OP
       2017-04-30 21:38:11 +08:00
    @wevsty
    又打开 Process Monitor 试了一下……
    看上去 Minifilter 还是可以拦截 IRP_MJ_WRITE 的? Process Monitor 中显示的路径确实是\Device\Harddisk0\DR0
    软件显示的内核调用栈如下:
    FLTMGR.SYS!FltpPerformPreCallbacks
    FLTMGR.SYS!FltpPassthroughInternal
    FLTMGR.SYS!FltpPassThrough
    FLTMGR.SYS!FltpDispatch
    ntoskrnl.exe!IopSynchronousServiceTail
    ntoskrnl.exe!NtWriteFile
    ntoskrnl.exe!KiSystemServiceCopyEnd

    我当时用 gdisk 打开了硬盘(\\.\PhysicalDrive0 ),稍微修改了一下 GPT 分区表,然后让 gdisk 写入了修改。

    我还尝试过用 PCHunter 摘除 PROCMON23.SYS 的微端口过滤器,不过看上去在我摘除过滤器后这个驱动又重新把它注册回去了,所以没能通过这个方法验证是不是微端口过滤器拦截了 IRP_MJ_WRITE。
    搜了一下,找到了 MSDN 上关于 Minifilter 的文档:
    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/ifs/filter-manager-concepts
    看上去 Windows 搞了一个 Filter Manager 专门来处理过滤、拦截有关的事情……
    acess
        167
    acess  
    OP
       2017-04-30 21:43:38 +08:00
    @wevsty
    我一直在说 File System Minifilter Driver,您说的却是 File System Filter Driver,可能我说的和您提到的压根不是一个东西……😂
    看上去 File System Minifilter Driver 是一种新的、更灵活的过滤驱动,微软希望用 File System Minifilter Driver 来取代老式 File System Filter Driver ……
    wevsty
        168
    wevsty  
       2017-04-30 22:31:42 +08:00
    @acess
    file system filter drivers 有好几种。
    微软的文档表示,legacy file system filter drivers can ’ t attach to direct access (DAX) volumes。
    我仔细翻阅了一下文档看来是我有点想当然了,File ​ System ​ Filter ​ Drivers 里面要看你把驱动 attach 到什么地方。
    如果只把 Filter Device Object Attach 到 File System,那么就只能拦截 IRP_MJ_CREATE 之类的不能拦截 IRP_MJ_WRITE。
    如果 Filter Device Object Attach 到 Volume 上,那么就可以拦截 IRP_MJ_CREATE。
    File System Minifilter Driver 也是类似的情况,看开发者怎么使用了
    我表示没有调试过,IRP_MJ_WRITE 的具体拦截情况,看文档应该是有办法拦的,但是实际上我会觉得拦截 IRP_MJ_CREATE 这样的请求意义不是很大,绝大多数的程序不需要直接进行底层磁盘写入,如果要驱动来判断直接写入扇区是不是应该允许未免是个巨大的工程。一般不需要在这一步进行拦截,如果只是为了防止写入,拦截 IRP_MJ_CREATE 就足够了。
    Vizogood
        169
    Vizogood  
       2017-05-03 11:42:25 +08:00
    那么问题又回来了,,,数字签名校验就真的那么安全吗? 至少是说: windows 数字签名校验.
    忘了迅雷数字签名了吗? 忘了 outlook MITM 了吗?
    所以,你在担心什么?
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5271 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:28 · PVG 09:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.