美文网首页
Android StrandHogg漏洞原理分析

Android StrandHogg漏洞原理分析

作者: 浪够_ | 来源:发表于2022-03-02 16:36 被阅读0次
    • taskAffinity(任务相似性):用来标识activity与任务的联系,该属性如果没有被设置,就从自身的 Application 继承,Application 的taskAffinity,它的值为 Manifest 的包名,也就是taskAffinity默认属性为自身应用包名的字符串。那么该应用中的所有 activity 都具有同一相似性。具有相同taskAffinity属性的 activity归属同一任务(从用户的角度来看,则是归属同一“应用”),甚至可以在一个任务栈中放置不同应用中定义的activity。如果指定 activity 与任何任务均无相似性,可以将其设置为空字符串。
    • allowTaskReparenting(任务重编):这个属性会使该activity具有在任务栈被重新编排的能力,当下一次将启动 activity 的任务转至前台时, activity 是否可以从启动它的任务移动到和它具有相同taskAffinity属性的任务,转移的时机是在具有相同taskAffinity属性的任务转移到前台时,true代表能够移动,并且false如果它必须留在它所在的任务中。它不会立即将攻击者活动转移到其目标上。只是当下次启动目标任务时,Android 操作系统会评估所有任务和活动,并查找标记有此属性的活动并在启动相关任务之前移动它们。由于任务栈的taskAffinity值该栈中的根activity永远一致,具有“singleTask”或“singleInstance”启动模式的 activity 只能位于任务的根,因此android 的官方文档认为这两种启动模式对allowTaskReparenting是没有意义的,但该漏洞利用的就是看似没有意义的singleTask启动模式。这样可以使恶意的activity放到受害应用的任务栈的根位置。如果未设置此 allowTaskReparenting 属性,则元素的相应属性设置默认值为 false。

    漏洞原理:

    此漏洞与app的lanchMode和Android的taskAffinity控件设置有关,Android源码中对lanchMode的处理主要位于ActivityStack。cpp文件的startActivityUncheckedLocked函数中。该函数的执行流程如下,首先对sourceRecord进行判断(当应用从桌面启动时,该值为null),如果为null,则进行launchMode的判断。之后launchMode判定的关键代码显示,当launchMode为singleInstance或singleTask时将调用findActivityLocked()函数,其他情况将调用findTaskLocked()函数。当launchMode为standard或singleTop时,其执行流程如下,首先进入findTaskLocked()函数,该函数将对当前已有任务的栈顶Activity进行遍历。当任务affinity与当前启动Activity一致时,返回该返回栈栈顶Activity,并赋给intentActivity。

    在launchMode为standard或singleTop的处理流程中,将调用moveTaskToFrontLocked()函数将intentActivity所指后台任务移动到前台。最终系统将调用resumeTopActivity Locked()函数,该函数最终会调用当前返回栈栈顶Activity的onRestart()函数。当launchMode设置为standard或singleTop时,倘若后台有同名返回栈存在,将返回该返回栈栈顶Activity,且直接对当前栈顶Activity执行重启动请求。

    相关文章

      网友评论

          本文标题:Android StrandHogg漏洞原理分析

          本文链接:https://www.haomeiwen.com/subject/pzferrtx.html