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

Windows 下 attach 需要权限吗?

  •  
  •   vrqq · 2019-07-15 23:54:52 +08:00 · 3203 次点击
    这是一个创建于 1992 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我觉得这个问题很奇怪,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 开的默认那个挡位(不知有没有影响)

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

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

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

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

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

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

    像是安装软件、自启、截屏、监听键盘、读取文件、联网、弹窗……等等等等“流氓”行为,如果只是针对当前用户而不是本机所有用户,那本来就是畅通无阻的。
    acess
        8
    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
        9
    geelaw  
       2019-07-16 11:01:57 +08:00 via iPhone
    @acess #5-#8 提示一下楼主的用户不是 Administrators 组的😅
    acess
        10
    acess  
       2019-07-16 11:07:23 +08:00 via Android   ❤️ 1
    @geelaw 嗯,我看到了。
    vrqq
        11
    vrqq  
    OP
       2019-07-16 14:55:40 +08:00
    @geelaw @mingl0280 感谢!
    一个新的疑问,怎么区分是“自己的程序”,只能通过启动这个程序的用户区分吗?就是理论上来说,任意一个双击点开的程序,都可以控制其他程序,因为都是以我的用户名运行的。。。

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

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

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

    至于 UWP 嘛…真可惜,微软就不能再坚持一下么…
    acess
        19
    acess  
       2019-07-16 23:39:08 +08:00
    @vrqq 还有,既然你用的账户不是 Administrators 组的,那已经是“真正的非管理员账户”了。然而这样也只是免疫 UACME 里的那些歪招而已,截屏 /监听键盘 /读写文件……等等这些,如果你只开一个账户,那还是老样子,畅通无阻……
    或者说,还是有一些阻碍的,比如你右键管理员权限运行的时候,输入密码,这个貌似因为 UIPI 的隔离,是无法监听键盘的。
    然而我觉得这样是不是真的能防 UAC 绕过,还是比较可疑的,我拍脑袋想到的办法(不一定成立):劫持正常的进程,等你需要提权的时候,弹一个假的界面,偷到你输入的密码,然后再拿着这个密码去提权,这样既能做到让你没有察觉,管理员权限也等于是偷到手了。
    vrqq
        20
    vrqq  
    OP
       2019-07-20 11:28:41 +08:00
    @Buges 所以就是说 例如 meltdown 漏洞,kernel 隔离 其实对于普通的桌面用户,完全没有意义。。。也就是说,如果杀毒软件识别不出来 attach/inject 的话,就真和没有一样了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2263 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.