太阳集团2138备用网址

  • 防弹少年团金泰亨蓝发登各国热搜 玩儿转红粉金黑棕各种发色实力演绎“有颜任性”【组图】 2019-04-25
  • 龙烨为袁竹逍遥画派配画诗欣赏之三 2019-04-25
  • 因应增值税下调 多个豪车品牌在华降价 2019-04-25
  • “小屏论”话两会:“习语”暖人心 2019-04-25
  • 低价 贴心 保障 国美3.15,为消费者保驾护航低价贴心保障 国美315,为消费者保驾护航-国美 2019-04-25
  • 中央政治局同志向党中央和习近平总书记述职 2019-04-25
  • China Daily Website 2019-04-25
  • 【守护好我们的美丽家园】新疆的明天一定会更好 2019-04-25
  • 22年后紫霞仙子归来 可至尊宝已经不是他了 2019-04-25
  • 【独家V观】你好 意大利 2019-04-25
  • 合肥一文化公司人去楼空老板跑路 老人购买保健品被骗上万元 2019-04-25
  • 北京二手房交易实现一网通办 20分钟就办完 ——凤凰网房产北京 2019-04-25
  • NBA史上最牛的9大名帅 波波在这里只能排倒三 2019-04-25
  • 《阿丽塔》要和《流浪地球》抢票房 2019-04-24
  • 百城住宅均价环比涨幅持续收窄 变化大多在1%内 2019-04-24
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    看我如何绕过 iPhone XS 中指针验证机制(下)

    来源:本站整理 作者:佚名 时间:2019-02-28 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 上一章中,我们对当前的PAC机制在理论上提出了一些可能的漏洞,这一章结合实际的 A12 设备进行验证。该篇可能会比较长,如果大家没有耐心,可以直接跳转到 一节。
     
    寻找内核代码执行的入口点
    现在我们已经对如何在 A12 设备上绕过和伪造 PAC 有了一些理论的想法,接下来,我们将要研究如何真正的绕过 PAC 来执行内核中的任意代码。
    传统的读写内核代码的方法是 Stefan Esser 在Tales from iOS 6 Exploitation中提到的 iokit_user_client_trap 策略。此策略需要 patch IOUserClient 实例的 vtable 来调用用户态的函数 IOConnectTrap6(),它可以调用任意函数,并且传入最多7个参数。这样就能在内核中调用 iokit_user_client_trap() 函数了。如果想要了解其工作原理,可以参考下面 XNU 4903.221.2 中 iokit_user_client_trap() 的实现:
    kern_return_t iokit_user_client_trap(struct iokit_user_client_trap_args *args)
    {
       kern_return_t result = kIOReturnBadArgument;
       IOUserClient *userClient;
       if ((userClient = OSDynamicCast(IOUserClient,
               iokit_lookup_connect_ref_current_task((mach_port_name_t)
                   (uintptr_t)args->userClientRef)))) {
           IOExternalTrap *trap;
           IOService *target = NULL;
           trap = userClient->getTargetAndTrapForIndex(&target, args->index);
           if (trap && target) {
               IOTrap func;
               func = trap->func;
               if (func) {
                   result = (target->*func)(args->p1, args->p2, args->p3,
                                            args->p4, args->p5, args->p6);
               }
           }
           iokit_remove_connect_reference(userClient);
       }
       return result;
    }
    如果我们能够 patch IOUserClient 实例,使得 getTargetAndTrapForIndex() 返回的 trap 和 target 是我们可控的值,那么下面调用 target->func 将可以调用任意内核函数,并且传入最多7个参数(p1 到 p6 加上 target 本身)。
    为了了解这个策略在 A12 设备上能否成功,让我们来看看 PAC 引入的对这个功能的更改。
    iokit_user_client_trap
       PACIBSP
       ...        ;; Call iokit_lookup_connect_ref_current_task() on
       ...        ;; args->userClientRef and cast the result to IOUserClient.
    loc_FFFFFFF00808FF00
       STR        XZR, [SP,#0x30+var_28]  ;; target = NULL
       LDR        X8, [X19]               ;; x19 = userClient, x8 = ->vtable
       AUTDZA     X8                      ;; validate vtable's PAC
       ADD        X9, X8, #0x5C0          ;; x9 = pointer to vmethod in vtable
       LDR        X8, [X8,#0x5C0]         ;; x8 = vmethod getTargetAndTrapForIndex
       MOVK       X9, #0x2BCB,LSL#48      ;; x9 = 2BCB`vmethod_pointer
       LDR        W2, [X20,#8]            ;; w2 = args->index
       ADD        X1, SP, #0x30+var_28    ;; x1 = &target
       MOV        X0, X19                 ;; x0 = userClient
       BLRAA      X8, X9                  ;; PAC call ->getTargetAndTrapForIndex
       LDR        X9, [SP,#0x30+var_28]   ;; x9 = target
       CMP        X0, #0
       CCMP       X9, #0, #4, NE
       B.EQ       loc_FFFFFFF00808FF84    ;; if !trap || !target

    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。
    • 最新更新
      • 相关阅读
        • 本类热门
          • 最近下载