该漏洞涉及到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. Atitit.js图表控件总结

    Atitit.js图表控件总结 1. 为什么要使用图表1 2. 图表分类1 3. 数据可视化的优点1 4. 流行的js图表类库1 5. 参考2 1. 为什么要使用图表 因为要可视化 2. 图表分类 条 ...

  2. SpringIOC&AOP

    Spring是为简化企业级系统开发而诞生的,Spring框架为J2EE应用常见的问题提供了简单.有效的解决方案,使用Spring,你可以用简单的POJO(Plain Old Java Object)来 ...

  3. python多线程生成缩略图

    在img目录下7张图片 分别是 11.jpg 22.jpg 33.jpg 44.jpg 55.jpg 66.jpg 77.jpg #encoding=utf-8 import os import ti ...

  4. [C#HttpHelper]类1.4正式版教程与升级报告

       [C#HttpHelper]类1.4正式版教程与升级报告 导读 1.升级报告 2.HttpHelper1.4正式版下载 3.HttpHelper类使用方法, 4.最简单的Post与Get的写法 ...

  5. 用VisualC++建立SOAP客户端应用(一)

    用VisualC++建立SOAP客户端应用(一) SoapSerializer对象用来构建一个向Web服务发送的SOAP消息.在与服务器连接前,SoapSerializer对象必须与SoapConne ...

  6. python 与数据结构

    在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂, ...

  7. web项目总结

    web项目 Webroot下面的index.jsp页面的内容: <%@ page language="java" pageEncoding="UTF-8" ...

  8. linux 下 取进程占用内存(MEM)最高的前10个进程

    # linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  9. 如何配置ssh免密码登录

    [TOC] 如果你在管理一堆unix机器,每次登录都要输入密码是挺烦的事情,一方面为了安全我们一般不会将所有机器的密码都设置成一样,另一方面就算一样每次都输入一遍也很麻烦. 这种情况下我们一般是用ss ...

  10. 增加Xss过滤步骤

    1.往项目web.xml中增加以下的代码: <!-- xss param过滤开始 bgy 2014-12-25 --> <filter>  <filter-name> ...