Windows 下 attach 需要权限吗?

2019-07-15 23:54:52 +08:00
 vrqq

我觉得这个问题很奇怪,Windows Server 2019,我用的普通用户不是 Admin,用户仅属于一个 Users 组。 测试程序 testproject.exe 先双击点开,然后双击点开 x32dbg 去 attach 进程,全程没有要输密码,直接就可以看到内存。。

testproject 代码:

char cipher[128];
std::cout << "Hello World!\n The address of cipher is "<< static_cast<const void*>(cipher)<<std::endl;
std::cin >> cipher;

http://tva1.sinaimg.cn/large/0060lm7Tly1g50ya9hd72j30hf0lpjsq.jpg

testproject.exe 是双击点开的,也不是从 x32dbg 里启动的。。 我记得在 Linux 下 attach 是要 root 权限的。。系统哪里设置有问题吗。。内存没有隔离开。。

UAC 开的默认那个挡位(不知有没有影响)

另外:本地安全策略->用户权限分配 这里面只添加过关机权限

3201 次点击
所在节点    Windows
20 条回复
hx1997
2019-07-16 00:55:33 +08:00
附加到普通用户进程不用特别的权限吧,附加到管理员进程才要。
geelaw
2019-07-16 03:33:25 +08:00
调试自己的代码当然不需要额外的权限…否则你要怎么让开发者日常用受限用户,要怎么在 UAC 全开模式下安全编程…

调试用户自己身份运行的程序最多对用户自己造成损害,通常操作系统都不会完全封死用户搬起石头砸自己的脚的行为。

调试的权限( SeDebugPrivilege )是允许调试任意进程,但并不是所有进程都需要该特权。
mingl0280
2019-07-16 05:16:34 +08:00
调试普通用户进程不需要特殊权限,提权只适用于低权限调试程序需要访问高权限进程的时候……
ThirdFlame
2019-07-16 08:13:39 +08:00
linux 下 attach 也不需要 root 权限的。 但是只能 attach 你自己的进程。
windows 下 一样,你 attach 自己的进程能有什么问题,凭啥不让你 attach
acess
2019-07-16 10:39:09 +08:00
微软自己都说过,UAC 不是安全功能,只是防手贱功能( forcing function )。

看看 UACME,有很多歪点子能绕过 UAC 的。一开始最高档“总是通知”被理解为无法绕过,后来又增补了绕过最高档的办法。而且微软不把这些当作漏洞来补,只是大版本更新的时候可能顺带补一下。

真想降权,需要开一个真正的非管理员账户。
acess
2019-07-16 10:40:16 +08:00
其实就像 LZ 这贴一样,很多敏感的操作,本来就是畅通无阻的,UAC 压根不会阻拦,连“如何绕过 UAC 获得真·管理员权限”都不需要考虑。
acess
2019-07-16 10:53:12 +08:00
UAC 这个梗,“万恶之源”就是知乎洛晓晓的那个“ UAC 是否有必要”的答案吧。

像是安装软件、自启、截屏、监听键盘、读取文件、联网、弹窗……等等等等“流氓”行为,如果只是针对当前用户而不是本机所有用户,那本来就是畅通无阻的。
acess
2019-07-16 10:54:12 +08:00
以前还有种说法是“开 UAC 可以防 Flash 漏洞”,这个有一定道理,因为 Office、IE 这些应用的沙箱模式和 UAC 是否开启是绑定的。

沙箱模式是根据文件上的 MOTW 标记来决定是否开启的,比如浏览器下载的文件就会自动打上这个标记。这个标记是利用 NTFS 的 ADS 特性做的,可以在文件属性里去除掉(也就是“解除锁定”按钮)。

如果启用沙箱模式,Flash 是不显示的。然而,如果你随手点了一下“启用编辑”按钮,就退出沙箱模式了。
如果你关了 UAC,那沙箱直接就被禁用了。

insights.sei.cmu.edu/cert/2015/07/the-risks-of-disabling-the-windows-uac.html

后续版本的 Windows 好像在 UAC 方面又有很大改动……比如从 Win8 开始,在控制面板拉到底“从不通知”也并不是关闭 UAC,而是有提权请求时默认通过(所以才会出现 QQ 的远程协助不能碰任务管理器这类奇葩问题)。只有编辑注册表修改 EnableLUA 值(或者修改组策略)才是真正的关闭 UAC。
本来这么做还会带来 UWP 应用打不开的副作用,后来 Win10 1703 (还是 1709 来着?记不得了)把这个问题也解决了。
geelaw
2019-07-16 11:01:57 +08:00
@acess #5-#8 提示一下楼主的用户不是 Administrators 组的😅
acess
2019-07-16 11:07:23 +08:00
@geelaw 嗯,我看到了。
vrqq
2019-07-16 14:55:40 +08:00
@geelaw @mingl0280 感谢!
一个新的疑问,怎么区分是“自己的程序”,只能通过启动这个程序的用户区分吗?就是理论上来说,任意一个双击点开的程序,都可以控制其他程序,因为都是以我的用户名运行的。。。

我之前以为 debug 是在自己的内存空间里给 target 申请空间。。看来理解错了。。
stephen9357
2019-07-16 18:15:45 +08:00
跟是谁的程序没关系,只要你可以用 PROCESS_ALL_ACCESS 权限打开目标进程,就可以调试它。当然,你有 SE_DEBUG_NAME 的话,你就可以调试任意进程了。
vrqq
2019-07-16 21:14:06 +08:00
@ThirdFlame @hx1997 我明白了,以其他 uid 运行的程序才会需要 root 权限。。

@acess 私以为 “针对所有用户” 本来就意义不大,正常使用的话,打开软件都是同一个用户名。另外您提到的“真正的非管理员账户”,是可以将各个进程限制不能互相访问吗?
我理解的是像 Android 系统那种,每个 app 有独立的 uid gid,不能互相访问。。在 windows 下能做到这样吗?

@stephen9357 我似乎明白了,但是我想一个问题,如果说系统不限制 debug 所有我打开的程序,对于个人使用者来说,没有后台服务,那每一个 userspace 下运行的程序和拿到了 kernel 权限无异了??。。。。。。
Buges
2019-07-16 21:22:26 +08:00
你理解的对。像 Windows,Linux,也包括 macos,这些古老的系统,对桌面这种单用户使用来说其“面向用户”的权限管理就跟废物差不多。所以才用安全软件,hips 规则,沙箱等破布打补丁的办法,毫无安全性可言。
像新一代的操作系统,Android,iOS 就完全不同。只要留住权限,我可以放心的运行不信任的程序。等下一代 Windows core,彻底对 win32 不兼容,这个问题才能解决。
acess
2019-07-16 22:34:19 +08:00
@vrqq
Windows 的 UWP 应用是用容器隔离的,大概比较接近你想要的。
其他传统桌面应用,都是这么鸡肋,就像楼上 @Buges 说的一样……
acess
2019-07-16 22:43:28 +08:00
@vrqq 有一位安全专家 Alex Ionescu 曾经开发过一个工具 r0ak(ring0 军刀),只要有管理员权限就能在 ring0 读 /写 /执行代码。
如果没有这个工具,想这么做就很麻烦,因为有 DSE,所以需要找一个带漏洞且数字签名有效(实际发现过期证书签的也能加载)的驱动,先加载它,让它当跳板。
项目介绍里他说这个工具利用的原理微软是知道的,没有被视为安全漏洞,所以可以当一个比较正当的专业工具使用。
不过后来过了一段时间微软还是把这个地方改掉了,工具在新版 Win10 上不能用了,Alex Ionescu 也把它从 github 上撤下了。
acess
2019-07-16 22:48:23 +08:00
@Buges 最近才看到的,感觉 android 有些权限限制可能也未必那么靠得住:
www.solidot. org/story?sid=61282
Buges
2019-07-16 23:20:01 +08:00
@acess 这种情况比较少见。
Android 的问题主要是国内应用不给权限不运行,只能想办法欺骗( hook )
还好这系统不是出场有 root,不然像微信这些流氓就强制要 root 了,就像它们在 Windows 上强要 UAC 一样。
其他的主要是新技术和历史遗留问题,比如运动传感器收集步态信息锁定自然人,为了向前兼容保留的 /sdcard 被国产应用写 deviceID 文件进行“进程间通讯”等。

至于 UWP 嘛…真可惜,微软就不能再坚持一下么…
acess
2019-07-16 23:39:08 +08:00
@vrqq 还有,既然你用的账户不是 Administrators 组的,那已经是“真正的非管理员账户”了。然而这样也只是免疫 UACME 里的那些歪招而已,截屏 /监听键盘 /读写文件……等等这些,如果你只开一个账户,那还是老样子,畅通无阻……
或者说,还是有一些阻碍的,比如你右键管理员权限运行的时候,输入密码,这个貌似因为 UIPI 的隔离,是无法监听键盘的。
然而我觉得这样是不是真的能防 UAC 绕过,还是比较可疑的,我拍脑袋想到的办法(不一定成立):劫持正常的进程,等你需要提权的时候,弹一个假的界面,偷到你输入的密码,然后再拿着这个密码去提权,这样既能做到让你没有察觉,管理员权限也等于是偷到手了。
vrqq
2019-07-20 11:28:41 +08:00
@Buges 所以就是说 例如 meltdown 漏洞,kernel 隔离 其实对于普通的桌面用户,完全没有意义。。。也就是说,如果杀毒软件识别不出来 attach/inject 的话,就真和没有一样了。。

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

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

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

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

© 2021 V2EX