知乎、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 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
2017-04-30 18:53:12 +08:00
@ahhui
@acess
知乎是“内行人肉、外行答案”的聚集地。

@Domains
“你以为微软写不好一个牛逼的浏览器?真的只能 IE8、IE10/11 那么鸡肋?是不敢”
反垄断法管的可不是说微软不能开发一个好使的浏览器,而是管的微软不能捆绑。
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
2017-04-30 19:46:33 +08:00
@acess

实际上如果你有本地管理员的权限,你可以 dump lsass,然后从里面挖出来域用户凭据缓存。之前那个场景是为了防止手贱的(就像是 UAC 也是一个防止手贱的功能),因为要搞出来这个名堂还是很困难的。
Domains
2017-04-30 21:10:57 +08:00
@acess 信任问题,要是信任 IDM,它的驱动级加载其实很好用,能真的完全拦截下所有下载请求,不管是前台还是后台偷偷下载的,包括木马下载器,一定程度也能防木马。当然用户首先也要会识别莫名的 URL 下载请求,不然也没用
acess
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
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
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
2017-05-03 11:42:25 +08:00
那么问题又回来了,,,数字签名校验就真的那么安全吗? 至少是说: windows 数字签名校验.
忘了迅雷数字签名了吗? 忘了 outlook MITM 了吗?
所以,你在担心什么?

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

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

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

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

© 2021 V2EX