最近疫情期间,除了疫情相关的热点新闻被大家关注,在网络安全圈又爆出了一个”惊天”新闻,一种新型的”克隆攻击”能轻松盗刷你的支付宝!!
这个新闻大概是这样的,近期,腾讯安全玄武实验室负责人”TK教主”于旸就用短信为载体,现场披露了”应用克隆”这一移动攻击威胁模型。玄武实验室以支付宝App为例展示了攻击效果:在升级到最新安卓8.1.0的手机上网页文件名是指什么,利用支付宝App自身的漏洞,”攻击者”向用户发送一条包含恶意链接的手机短信,用户一旦点击,其支付宝账户一秒钟就被”克隆”到”攻击者”的手机中,然后”攻击者”就可以任意查看用户账户信息,并可进行消费。
受此威胁模型影响,支付宝、携程、饿了么等近十分之一的安卓版应用都有信息、账户被盗的风险。黑客可以克隆出一个你的支付宝(头像、ID、花呗、芝麻信用等等完全一样),然后花你的钱。而短信只是一种诱导方式,二维码、新闻资讯、红包页面等都可能被黑客用作为攻击手段。
看到这里一定会有很多小伙伴担心自己中招,钱被刷走!其实大家不用这么紧张,今天小编我就用本篇内容给大家分享一下”克隆攻击”的实现原理!以及我们该如何防范此类攻击!
克隆攻击实现过程及原理:
在分析漏洞之前,我们先来了解两个相关知识点,跨域和URL scheme。
一、URL Scheme
URL Scheme是一种页面内跳转协议,就是通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。1.URL Scheme应用场景客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如商品详情页、活动详情页等等。也可以执行某些指定动作,如完成支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下几种:● 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面● H5页面点击锚点,根据锚点具体跳转路径在APP端跳转到具体的页面● APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面● APP根据URL跳转到另外一个APP指定页面2.URL Scheme协议格式URL Scheme协议格式和我们打开网页输入的网址类似。一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:
://:
/
其中scheme既可以是Android中常见的协议,也可以是我们自定义的协议。Android中常见的协议包括content协议、http协议、file协议等,自定义协议可以使用自定义的字符串,当我们启动第三方的应用时候,多是使用自定义协议。
如下是一个自定义协议的URI:
xl://goods:8888/goodsDetail?goodsId=10011002
通过上面的路径 Scheme、Host、port、path、query全部包含:
● xl网页文件名是指什么,即为Scheme,代表该Scheme 协议名称● goods,即为Host,代表Scheme作用于哪个地址域● 8888,即为port,代表该路径的端口号● goodsDetail,即为path, 代表Scheme指定的页面● goodsId,即为query,代表传递的参数3.使用方法URL Scheme的使用方法简要言之就是先在manifest中配置能接受Scheme方式启动的activity;当需要调用时,将Scheme协议的URi以Data的形式加入到Intent中,隐式调用该activity。1). 在AndroidManifest.xml中对标签增加设置Scheme
android:host=”auth_activity”>
上面的设置中可以看到,MainActivity包含多个设置,第一个是正常的启动,也就是在应用列表中启动;第二个是通过URL Scheme方式启动,其本身也是隐式Intent调用的一种,不同在于添加了属性,定义了其接受URL Scheme协议格式为
urlschemel://auth_activity
这里需要说明下,URL Scheme协议格式中,组成URI的这些属性在标签中都是可选的 ,但存在如下的依赖关系:
● 如果没有指定scheme,那么host参数会被忽略● 如果没有指定host,那么port参数会被忽略● 如果scheme和host都没有指定,path参数会被忽略当我们将intent对象中的Uri参数与intent-filter中的标签指定的URI格式进行对比时,我们只对比intent-filter的标签指定的部分,例如:● 如果intent-filter中只指定了scheme,那么所有带有该sheme的URI都能匹配到该intent-filter。● 如果intent-filter中只指定了scheme和authority(authority包括host和port两部分)而没有指定path,那么所有具有相同scheme和authority的URI都能匹配到该intent-filter,而不用考虑path为何值。● 如果intent-filter中同时指定了scheme、authority和path,那么只有具有相同scheme、authority和path的URI才能匹配到该intent-filter。需要注意的是,intent-filter的标签在指定path的值时,可以在里面使用通配符*,起到部分匹配的效果。2). 使用URL启动Activity
Uri data = Uri.parse(“urlschemel://auth_activity”);
Intent intent = new Intent(Intent.ACTION_VIEW,data);
//保证新启动的APP有单独的堆栈,如果希望新启动的APP和原有APP使用同一个堆栈则去掉该项 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivityForResult(intent, RESULT_OK);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, “没有匹配的APP,请下载安装”,Toast.LENGTH_SHORT).show();
}
当然可以在网页中调用
打开新的应用
或者是在JS中调用
window.location = “urlschemel://auth_activity”;
二、Webview跨域
要了解什么是跨域,先得知道一个概念——同源。所谓同源是指,域名,协议,端口均相同。如果Android的webview当前页面要加载一个不同源的页面,那就是跨域,示例如下:
调用 (非跨域)
调用 (主域名不同:123/456,跨域)
调用 (子域名不同:abc/def,跨域)
:8080/index.html 调用 :8081/server.php (端口不同:8080/8081,跨域)
本文到此结束,希望对大家有所帮助!