该漏洞涉及到app所使用的intent和intent filter。

intent是一个可用于从一个app组件请求动作或处理事件的“消息对象”。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

intent主要包括隐式意图和显式意图。调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中intent-filter设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

移动应用app和支付客户端app之间的通信存在一个漏洞:移动应用app使用隐式意图,可以被恶意应用通过一个高优先级的intent-filter拦截。Google IAP 2和3版本以及支付宝SDK 1.0版都存在该漏洞。

Google Wallet SDK的漏洞

使用Google Wallet SDK进行交易,app必须与设备上的Google Play app进行通信,以便Google Play把交易情况反馈给用户同时要求用户进行确认。

确认信息

然而, IAP SDK使用了隐式意图ACTION=”com.android.vending.billing.MarketBillingService.BIND”,可以被意图过滤器(intent-filter)action android:name=”com.android.vending.billing.MarketBillingService.BIND.”拦截,这样,一个恶意app就可以使用同样的intent-filter拦截该意图然后启动钓鱼界面,如下图所示:

钓鱼页面示例

支付宝sdk钓鱼

支付宝sdk与Google Wallet的支付过程相似。当用户点击“支付”按钮后,app就会与支付宝sdk进行通信以便支付宝sdk通知用户确认支付。同样,恶意app可以使用action android:name=”com.alipay.android.app.IAlixPay.”的intent-filter来拦截通信,然后向用户发送伪造消息。

伪造支付宝消息

第三方app为了完成支付,需要借助Google Wallet SDK或支付宝SDK,这些SDK的目的是发送支付intent到Google Wallet或支付宝。在这个过程中,恶意APP可以取代真正的Google Wallet或支付宝接收支付intent。用户通过第三方应用程序进行支付的时候,他们希望看到真正的Google Wallet或支付宝登录界面。然而在这个时候网络钓鱼APP就像真正的Google Wallet或支付宝一样出现在用户眼前,用户很可能不会产生怀疑从而输入他的密码和银行账号信息。

前面的例子表明了网络钓鱼攻击的可能性。然而,钓鱼攻击可能只是一个开始。一旦网络罪犯能够访问用户帐户,他们就可以继续窃取用户帐户上存储的其它信息,包括信用卡和其他支付信息。然后,他们可以自己使用或者在地下黑市贩卖这些信息。

此外,用户可能不会对这些恶意信息产生怀疑。由于APP需要处理支付,他们可能会认为这些消息只是在实际支付前简单的对账号进行确认。

修复建议

开发人员应该使用显示意图来处理敏感信息,这样,只有指定的app组件才能够接收和处理这些信息。但这是不够的,在与其它app通信之前,开发者应该检测其它app的签名以证明其调用来源的合法性。

参考链接:

http://blog.trendmicro.com/trendlabs-security-intelligence/vulnerability-in-in-app-payment-sdks-may-lead-to-phishing/

支付SDK的安全问题——隐式意图可导致钓鱼攻击的更多相关文章

  1. 隐式意图启动一个Activity

    隐式意图是通过指定一组动作或者属性实现,主要用于跨应用使用. 1.创建一个意图对象 Intent intent = new Intent(); 2.设置意图过滤器 intent.setAction(& ...

  2. Android 隐式意图和显示意图的使用场景

    本文实现一个隐式意图的应用,激活短信应用 public void click4(View view) { Intent intent = new Intent(); intent.setAction( ...

  3. Android 隐式意图的配置

    本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址. <Android 显示意图激活另外一个Actitity>一文介绍 ...

  4. Android 隐式意图激活另外一个Actitity

    上篇文章<Android 显示意图激活另外一个Actitity>最后谈到显示意图激活另外一个Actitity会有一些局限性和弊端 本文介绍另一种方法:隐式意图激活另外一个Actitity ...

  5. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  6. 隐式意图Intent

    在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...

  7. 基础学习总结(八)--Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...

  8. android intent 隐式意图和显示意图(activity跳转)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  9. android 21 隐式意图启动系统预定义activity

    Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...

随机推荐

  1. [jQuery学习系列三 ]3-JQuery学习二-字典操作

    前言:如果看过了第一篇和第二篇, 相信大家会对jQuery有个初步的认识了, 对于jQuery的选择器和数组的操作都已经很熟悉了, 这一篇就单独罗列jQuery中字典的操作相关的内容. 1. 数组中添 ...

  2. 理解Certificate、App Id、Identifiers 和 Provisioning Profile

    做真机测试的时候,按照网上的流程,走通了,当时没有注意各种证书等的意思.现在做消息推送,需要各种证书.APP ID信息,为了更好的理解这个过程,所以整理了网上关于证书等的相关资料.方便自己和有需要的朋 ...

  3. Velocity模板引擎入门

    类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...

  4. 用自己的算法实现startsWith和endsWith功能

    package hanqi; import java.util.Random; import java.util.Scanner; public class zuoye { public static ...

  5. text-size-adjust属性

    在慕课上无意中看到-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%;这两段代码,居然发现自己完全不理解,然后就去问度娘了,以下是一些 ...

  6. 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策

    上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策上海达策为电子行业企业提供了多样的ERP信息化管理系统.基于多营运中心的管理架构体系,构造了以供应链.生产管理.财务一体化为核心,协同HR.B ...

  7. UHF桌面式发卡器

    UHF桌面式发卡器: http://www.rr-rfid.com/index.php/pro_view/95  本文用菊子曰发布

  8. iOS开发中使用CocoaPods来管理第三方的依赖程序

    之前也碰到类似的问题,怎样去管理这些第三方的文件,虽然手动添加也不算麻烦. 写这篇文章主要参考了唐巧的博文,链接如下: http://blog.devtang.com/blog/2012/12/02/ ...

  9. 使用cow将socks5代理转为http代理(Windows版)

    自己租vps架设shadowsocks服务器,再配合chrome的SwitchyOmega插件科学上网一直很稳定,但是windows很多软件都不支持socks5,经常也会需要配置http代理做更新上传 ...

  10. cocos2d-x.0创建工程

    $ python create-multi-platform-projects.py -p PompaDroid -k cn.philon.pompadroid -l cpp