楼主: liweihuo
收起左侧

[讨论] 360沙箱与sandboxie谁更安全

  [复制链接]
CiInitialize
发表于 2013-5-12 14:50:07 | 显示全部楼层
dl123100 发表于 2013-5-12 14:44
我测试了对admin和system都不行,对任意名为avp.exe的进程,Win7下是返回STATUS_INVALID_HANDLE。
因为我 ...

对服务进程来说,直接用普通的SYSTEM权限(比如psexec -s )是不行的,要准确偷那个服务进程的token,可以参考我之前写的win7X64DSEBypass的代码。
CiInitialize
发表于 2013-5-12 14:58:35 | 显示全部楼层
本帖最后由 CiInitialize 于 2013-5-12 15:03 编辑
dl123100 发表于 2013-5-12 14:44
我测试了对admin和system都不行,对任意名为avp.exe的进程,Win7下是返回STATUS_INVALID_HANDLE。
因为我 ...


我写了个demo,主要是修改下我之前的win7X64DSEBypass的偷token代码,可以duplicate任意服务进程的句柄为PROCESS_ALL_ACCESS,win8下测试OK

程序要用psexec -s运行先提权到SYSTEM(懒得偷两次token了。。)

用法 : psexec -s x:\dupxxz.exe pid

注意psexec只支持绝对路径

如果不是duplicate服务进程,则不需要提权,直接用dupxxz.exe pid gogo,就可以duplicate了 ,在win8下测试了也没问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
dl123100
发表于 2013-5-12 15:06:17 | 显示全部楼层
CiInitialize 发表于 2013-5-12 14:48
invalid handle是不是你close handle了再去取的last error~~

是我看错了,返回的是access denied,ObDuplicateObject->ObpGrantAccess->ObCheckObjectAccess->SeAccessCheck返回access denied。
CiInitialize
发表于 2013-5-12 15:16:39 | 显示全部楼层
dl123100 发表于 2013-5-12 15:06
是我看错了,返回的是access denied,ObDuplicateObject->ObpGrantAccess->ObCheckObjectAccess->SeAcces ...

是对System进程?看52楼
CiInitialize
发表于 2013-5-12 15:30:56 | 显示全部楼层
本帖最后由 CiInitialize 于 2013-5-12 15:42 编辑
dl123100 发表于 2013-5-12 15:06
是我看错了,返回的是access denied,ObDuplicateObject->ObpGrantAccess->ObCheckObjectAccess->SeAcces ...


这个的原理在ObDuplicateObject的代码这里:

对于未实现私有的Security Procedure的对象(实现了私有的例如文件、注册表),如果target想获取source没有的权限,会允许获得这个权限,当然前提是进程的token允许获得这个权限。
对于实现了的(比如文件/注册表)就不行。

    //
    //  If the access requested for the target is a superset of the
    //  access allowed in the source, perform full AVR.  If it is a
    //  subset or equal, do not perform any access validation.
    //
    //  Do not allow superset access if object type has a private security
    //  method, as there is no means to call them in this case to do the
    //  access check.
    //
    //  If the AccessState is not passed to ObpIncrementHandleCount
    //  there will be no AVR.
    //

    if (TargetAccess & ~SourceAccess) {

        if (ObjectType->TypeInfo.SecurityProcedure == SeDefaultObjectMethod) {

            Status = SeCreateAccessState( &AccessState,
                                          &AuxData,
                                          TargetAccess,       // DesiredAccess
                                          &ObjectType->TypeInfo.GenericMapping );

            PassedAccessState = &AccessState;

        } else {

            Status = STATUS_ACCESS_DENIED;
        }

    } else {

        //
        //  Do not perform AVR
        //

        PassedAccessState = NULL;

        Status = STATUS_SUCCESS;
    }

从代码可以看到,如果目标句柄要求的权限,是来源句柄拥有的权限的子集或相等,那么不需要做任何权限验证

如果目标句柄要求的权限,是来源句柄拥有权限的超集,那么会检查来源句柄的对象,是否是私有的Security Procedure 还是默认的,如果是私有的,直接就拒绝了。

如果不是私有的,则会给它建立Access State,后面的ObpIncrementHandleCount会用ObCheckObjectAccess对AccessState做access check(即检查进程的TOKEN是否可以拥有这个权限)

也就是说,如果没有保护,那么只要你可以获得这个权限,对进程等无私有处理例程的对象就可以通过duplicate handle获得

上面这个是wrk的代码,win7下也是类似,只是win7下是先ObpIncrementHandleCount(不在这里面检查权限了),然后创建AccessState,用ObpGrantAccess来检查

ObpGrantAccess其实就是把过去ObpIncrementHandleCount的检查权限代码扒出来用,对DuplicateHandle类型的调用,实际还是调用ObCheckObjectAccess检查AccessState,实现方法有点区别,本质是一样的

评分

参与人数 3魅力 +2 人气 +2 收起 理由
heaven888 + 2 版区有你更精彩: )
怎么样了 + 1 +1
Flameocean + 1 技术流,吓呆了

查看全部评分

dl123100
发表于 2013-5-12 15:50:34 | 显示全部楼层
CiInitialize 发表于 2013-5-12 15:16
是对System进程?看52楼

原poc对admin下进程也会失败,在SepMandatoryToDiscretionary那里会返回access denied。具体access check我现在忘得差不多了,等会还得重新看下。
测试了dupxxz可以过这里的检查,然后成功duplicate,多谢提供帮助验证。
CiInitialize
发表于 2013-5-12 15:52:33 | 显示全部楼层
唉,这些卖这么贵的国外杀软,哪怕每家肯拿出卖一份激活码的价钱收购一个彻底突破它防御的漏洞,我也早赚到百万美金了~
Flameocean
发表于 2013-5-12 15:53:35 | 显示全部楼层
CiInitialize 发表于 2013-5-12 15:30
这个的原理在ObDuplicateObject的代码这里:

对于未实现私有的Security Procedure的对象(实现了私有 ...

MJ你太强悍了!!
Flameocean
发表于 2013-5-12 15:56:08 | 显示全部楼层
CiInitialize 发表于 2013-5-12 15:52
唉,这些卖这么贵的国外杀软,哪怕每家肯拿出卖一份激活码的价钱收购一个彻底突破它防御的漏洞,我也早赚到 ...

没事,让老周给你千万期股不过MJ真心厉害
CiInitialize
发表于 2013-5-12 15:56:26 | 显示全部楼层
dl123100 发表于 2013-5-12 15:50
原poc对admin下进程也会失败,在SepMandatoryToDiscretionary那里会返回access denied。具体access check ...

原Poc你测试得不对吧?它用的是limit information,这个xp下无效,我的不提权下除了用query information代替外和他的一样
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-30 16:12 , Processed in 0.099777 second(s), 15 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表