美文网首页
网络安全漏洞分析之重定向漏洞分析

网络安全漏洞分析之重定向漏洞分析

作者: 顶风作案7号 | 来源:发表于2022-05-23 19:53 被阅读0次

    <p><strong><strong>漏洞简介</strong></strong></p><p>本月初美国著名安全公司kryptowire在其网站上发布了一篇Blog,他们的安全工程师在某智能终端的某个应用上发现了一个高危漏洞。</p><p>通过该漏洞,终端上安装的恶意应用可以成功提权到system权限,实现启动任意Activity(LaunchAnywhere),进而执行本地拨打电话到任意号码,恢复出厂设置,安装和卸载应用和安装证书等功能。</p><p>本文对该漏洞进行了深入分析和复现,确认该漏洞模型为Intent重定向,同时快速排查了我司的相关应用,排除了存在相同漏洞。</p><p>由于该漏洞模型比较典型,不管是在Google
    AOSP代码还是各大厂开发的应用中每年都会发现类似的漏洞,这种漏洞往往危害性极大。安珀实验室将此漏洞做深入的分析,并提供防范方法。
    </p><p>【文中涉及的漏洞均已修复完成。】</p><p><strong><strong>原理介绍</strong></strong></p><p>Intent重定向,即应用从不可信Intent 中提取数据,取出其中包含的Intent,或对提取的数据进行封装生成新的Intent,再调用 startActivity、startActivityForResult、startService、sendBroadcast等方法来启动或传递该Intent。</p><p>由于Android的Intent类实现了Parcelable,</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/b2dcf1c7cecd76bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>因此可以将Intent类的对象作为Intent的 extra数据对象传递到另一个组件中。</p><p>攻击者原本是无法直接访问非导出的组件,但是通过Intent重定向,就可以用导出的组件作为跳板来访问非导出的组件,达到launchanywhere或者broadcastanywhere的目的。</p><p>Intent重定向违反了Android的安全设计,导致Android的安全访问限制(应用的沙箱机制)失效,造成以下安全问题:</p><p>1)普通应用和系统应用中的Intent重定向:</p><p>如果是普通应用,可以启动该应用中的任意组件包括非导出组件;</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/2a36b51ecf74f605.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>图1  普通应用中的Intent重定向原理</p><p>如果是system应用中存在这种漏洞,危害更大,可以启动手机中的任意组件(包括导出和非导出组件);</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/3695e90e673f25d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>图2 系统应用中的Intent重定向原理</p><p>2)通过非导出的contentprovider组件中的content://URI来窃取敏感文件。</p><p>3)通过IntentScheme URL漏洞模型访问任意组件。</p><p>4)通过PendingIntent越权漏洞模型,劫持和修改Intent来达到提权的目的。</p><p><strong><strong>详细分析</strong></strong></p><p>接下来详细介绍普通应用和报告中的系统应用中的存在的两个Intent重定向的例子。</p><p><strong><strong>• 普通应用中Intent重定向漏洞分析</strong></strong></p><p>某应用中存在一个导出的HomeActivity组件,该组件中存在Intent重定向漏洞,请参考代码中的注释。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/f632a849c8976c59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>在该应用中还存在一个非导出组件WebViewActivity,终端上安装的恶意应用无法直接访问。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/d94705959dd10f3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>该组件WebViewActivity中有以下代码,使用webview来加载URL。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/cabbf70b463fd06b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>攻击者可以通过导出的HomeActivity访问该应用中的任意未导出的Activity,显然WebViewActivity也在其中。</p><p>我们编写一个恶意应用嵌入一个指向未导出组件的Intent并发给HomeActivity,从而让WebViewActivity加载其传入的恶意网站链接,进而达成窃取应用token等目的。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/a7227d877e5e2cab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><h3/><p><strong><strong>报告中的系统应用中的Intent重定向漏洞分析</strong></strong></p><p>接下来,分析一下报告中的Intent重定向漏洞。该应用的AndroidManifest.xml配置文件中有android:sharedUserId="android.uid.system",使用的系统签名且安装在priv-app目录中,因此该应用为system应用,具有system权限。该应用的testUsaWpsManager类中,动态注册了一个广播,action为USER_SELECT_WIFI_SERVICE_CALL:</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/c137fc555948af95.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>  因此该receiver即为导出的,其onReceive方法可以接收从外部传入的Intent。然后在没有任何校验的情况下,获取Intent中的extra_call_intent,构造一个新的Intent,然后作为参数传入setCallIntent方法中。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/c29f20920a9c9819.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>setCallIntent为该Intent添加FLAG_ACTIVITY_NEW_TASK,然后将Intent作为mtestTelecomManagerAdapter的makeCall方法的第二个参数。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/7f02b1e6ebb5f052.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>makeCall方法最终会调用到startActivityAsUser方法,作为该方法的第一个参数. 而第二个参数为 UserHandle.CURRENT。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/b6aa64ccf5049f5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>该漏洞中的Intent的流转如下图所示:</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/a8d011973a5f2640.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>图3  Intent流转过程</p><p>在终端上安装和运行的零权限的恶意应用,可以实现在本地通过上述Intent重定向漏洞,在用户无感知情况下以system权限实现拉起任意终端上任意Activity,实现如拨打电话到任意号码,恢复出厂设置,安装和卸载应用,安装证书等高危操作,几乎完全控制了用户的终端。</p><p><strong><strong>• Intent 重定向漏洞的修复方法</strong></strong></p><p>方法 1:将被拉起的应用组件设为专用组件,即不对外暴露。如果被拉起的应用组件不需要接收来自其他应用的 Intent,则可以将此应用组件设为专用组件,只需在清单中设置android:exported="false" 即可。</p><p>方法 2:确保提取的 Intent 来自可信的来源。可以使用getCallingActivity等方法来验证源Activity是否可信,只适用startActivityForResult。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/0e9903d8bc7942ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>方法 3:确保要重定向的Intent 安全。应该验证重定向的Intent,确保该 Intent不会被发送到应用的任何专用组件,以及不会将 URI 权限授予应用的某个专用contentprovider。在重定向 Intent 之前,应用可以先使用 resolveActivity等方法检查将使用哪个组件来处理该 Intent。</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/9495a41871563d3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>应用可使用 getFlags 等方法来检查 Intent 是否会授予 URI 权限。例如:</p><p class="image-package"><img class="uploaded-img" src="https://img.haomeiwen.com/i26472780/87a8e5bbc8ff1ab5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><h2/><p><strong><strong>总结</strong></strong></p><p>攻击者结合了系统应用中的动态广播注册漏洞模型和Intent重定向漏洞模型,对终端造成了极大的威胁。Android应用漏洞利用的常态,是攻击者会结合若干漏洞,形成一个完整的攻击链,造成更大的危害。要防范Android终端中应用的漏洞,对安全从业人员和开发者提出了更高的要求,需要熟悉常见的漏洞模型和防范措施。</p><p>
    </p>

    相关文章

      网友评论

          本文标题:网络安全漏洞分析之重定向漏洞分析

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