大家好接下来这个议题由我给大家进行分享我给大家带来的这个议题叫Bridge Attacked 乔杰攻击首先做一下自我介绍吧我是来自腾讯移动安全实验室Rizetim的一名安全研究员我叫韩子东我主要的研究方向是移动EPP的安全以及ROT相关的安全在去年2018-2024极棒的比赛中参加了黑客屋的挑战赛也是成功完成了挑战那么参加完那个项目之后就对ROT和EPP他们之间的安全以及他们的一个共用性做了一些思考和整理那么今天也是有幸能带给大家能有这么一个机会给大家进行这个相关的分享好我今天要分享的这个议题流程首先会带大家来了解一下我们的这个Bridge Attacked 乔杰攻击的一个概念随后会给大家介绍为什么选择Bridge Attacked这么一个方向来进行这个研究那么它跟其他的这个攻击有什么区别那么第三块会给大家展示如何去利用Bridge Attacked完成一次完整的攻击以及一些真实的利用案例最后会给大家介绍一下如何去针对这种Bridge Attacked的这种风险那么我们要去做什么样的一个防范措施好 首先我们来看一下Bridge Attacked的一个定义首先我们要了解一下什么是Bridge说到Bridge我们就不得不提在近几年快速发展的移动开发以及ROT相关领域那么左边这张图是Hybrid APP也就是混合性APP的一个开发那么它其实是传统的Native APP和Web APP的一个结合那么它利用了H5使得开发周期以及开发效率变得更快更高基本上成为了现在很多头部应用开发的一个主流那么右边的ROT就是物联网了这个大家都应该比较清楚了那么我们的Bridge其实就是围绕这样两个背景衍生而来的那我们来看一下这个Bridge其实是一个抽象的概念那在这个浏览器和移动APP以及ROT的设备当中其实它们是存在这样一个抽象的Bridge用来做数据也好或者说通信就是认证的这种通信的方式那么对于这个移动APP来说比较熟知的就是安卓上的WebView这个WebView就是把GS和Java进行了H5到Native的一个通信那其实在iOS上也一样存在这样的一个WebView像以前的UI WebView到后来的WK WebView那对于ROT device来说我们要考虑的这么一个Bridge抽象的Bridge是什么呢其实是很多底层的一些基础协议比如像DLNA投屏协议UPNP集差机用协议或者说像一些厂商借助WebSocket或者TZP它自己去定义的这样一个协议来进行通信交互那我们这里也是给出了关于BridgeAttack的一个非官方的定义其实就是利用APP当中的GSBridge以及ROT当中实现的抽象的协议层那么使得攻击者有这样一个机会利用这个Bridge达到它对移动APP或者说ROT设备的这样一个攻击的效果那我们来看一下为什么说我们要选择这个方向的攻击来作为研究点呢首先我们来看一下在WebView过去WebView爆出的安全分析我们从过去的分析的角度来做一个回顾那在2012年的时候CVE-2012-6336披露了经典的Adjavascript interface这个接口导致的远程利用这个算是比较早期的一个WebView的远程执行漏洞了那么到后来WebView又爆出跨域的这个分析由SetalofaXS一系列相关的导致的私有文件被访问到也是出了很多经典的漏洞甚至到前两年有英雄克隆这么一个经典的案例其实也是借助了这样一个分析做了一个衍生那么最后一个就是UIL Scammer的一个攻击这个其实在近几年的很多安全大会上也有不少的研究人员去做分享那么其实UIL Scammer的这个攻击方式在BridgeAttack里面是一个很好的切入入口这个我们一会会说到那我们来看一下对于BridgeAttack来说它有什么区别那么首先它跟之前的WebView相比WebView的攻击方式相比它有更多的攻击面那么其次它的产生的漏洞效果和抽象的Bridge它本身的能力是一个正相关的也就是说你的Bridge能力越强那么你产生的漏洞的效果可能就会越大那么最后一个就是说它不仅涵盖了这个移动的APP也涵盖了ROT的安全好 那我们来看一下如何去利用这么一个BridgeAttack以及一些真实的案例首先以移动APP移动应用作为一个切入点我们来看BridgeAttack的一个攻击面那么从浏览器作为一个攻击跳板攻击者可以从外部Payload发起攻击借助Scammer解析的过程切入到WebView以及手机对Scammer解析的后续操作里来那么在这个地方有一个问题由于WebView的安全性问题很多的厂家APP开发者对这块是有重视的那么它会做一个相对来说会加一层身份的教验它不会让随随便便的攻击者就可以去随意的调起它WebView所提供的接口能力那么我们就要来考虑如何去绕过这样一个身份间别的过程那么这里面列出了三个比较常用也是比较好用的方案那么第一个就是差SS攻击这个基本上是屡间不显的Web攻击的手法了然后第二个也就是通过对域名检查的一个审计那么你可以去发现它在过滤域名的时候其实很多的开发者或者说厂家都是没有做到一个严格的保护的那么你可以通过这样发起这个夸展请求那么第三个就是通过中间人攻击比如说通过GTDP的请求下发的JS Bridge的这个文件你是可以去通过中间人去给它进行篡改的那么我们来看一下首先是第一个关于不安全的教验域名导致的这样一个问题的一个案例在这个案例当中这名开发者这是一个头部应用这是一个国内的一家头部应用的APP那么他在教验从SCAMER解析过来的这个攻击者的身份的时候他做了一个判断他认定说如果对方的这个域名是包含有一个他信任的子域名的时候用了Countance作为一个过滤条件那么如果含有他信任的域名的时候他就认为这个是安全的如果不包含在那的话那么他就把所有的这个JS能力全部给关掉那我们实际上可以通过这张图片上方的这个攻击项链可以看到当你使用Countance和Android作为这个域名过滤的方案的时候其实是没有办法防御前面这个虚假的域名的也就是说你的这个绕过bypass是无效的而且这种情况在我们的研究研究结果里来看其实还是占了很多的比重的那我们绕过了这样一个域名检测之后我们就需要去进一步的逆向分析它的代码那我们可以看到它这个地方提供的JS Bridge在这个APP里它提供了这么一个能力叫做Send Client Request也就是通过客户端向服务器发送这个请求那么我们借助这样一个JS API的这个能力我们就通过一个简单的Web级别的一个攻击可以达到一个深层次的快语攻击那么我们借助这个接口可以给服务器发送伪造的请求从而拿到这个证明用户的这个订单信息以及它的个人身份包括身份号这样信息那其实大家看这样一个攻击仅仅是从一个URL出发那么最终其实是把Web的攻击和APP的攻击给串联连接到了一起也是一个头部应用这个级别比之前的那个还要高这个在审计的过程当中发现它很少存在说它的域名教研跟刚才不一样它有很严格的一个域名教研的一个过程但是它的问题在于它没有有效的去防御XSS当然了XSS这个东西不是说防就能防住的那在这个APP的这个审计的过程当中我们就发现它的某一个域名下有这么一个XSS这个XSS如果从简单的Web角度来考虑我们就是说去拿了它的Cookie做一个登录去做一些事情但是这里就存在一个问题现在的很多头部厂商当你拿到Cookie值去做一个登录的时候在客户端都有很多的二次教研比如说二次密码或者说二次的这种票据的这种教研那么你很难去达到更深层次的一些信息的获取比如说支付的信息比如说订单或者说一系列的东西那这个地方我们要怎么去进一步的扩大这个攻击呢那么我们来考虑这样一种Payload的设计方式我们利用这个XSS从外部引入一个JS文件那么这个JS文件当中我们要去利用它本身提供这个APP本身提供的Bridge的能力那么我们发现了一些非常敏感也非常危险的JSAPI暴露在外面那么最后我们利用一个恶意的URL就可以达到去获取到这个敏感的信息那这里是一个简单的POC首先导入了外部的JSAPI文件然后呢找到一个第一个敏感的这个JSBridge提供的接口叫做GetUserInfo来获取Cookie以及Cookie当中的一些key那么利用这个key再次从这个APP里的一个另一个敏感的接口SunderRequest去进行一个深层次的调用配合上第一轮的这个key我们就可以拿到这个用户的支付信息那最后做一个总结在这个APP层的BridgeAttack里面攻击者可以通过一个简单的URL借助这个虚拟的JSBridge它把WebView和Native层的这个安全风险给融合到了一起那么导致更多的攻击面被暴露出来那么它有更多更好的这个条件借助这个JSBridge的Bridge的这个能力去达到窃取信息以及代码执行甚至说如同传播的这么一个可能性那说完了这个APP的这个BridgeAttack我们来看一下在这个IoT的Bridge里面它跟这个APP有什么区别呢那么我们这里面提出在IoT的Bridge当中它更测重于两个特点那么第一个特性呢是对内网的穿透那么可以借助像DNS充满定这样一个攻击手段或者说借助对中控APP也就是对于每一个智能意念来说它都要有相应的这个APP来作为它的管理中心这个大脑APP那么我们对这个中共APP进行攻击也是可以同样达到穿透的一个效果那么还有一个特性呢就是说在IoT的Bridge的利用当中它可以达到一个更好跟持久的效果那么这样一来就带来两个优点第一个呢就是说你可能在一个局域网内有更多的肉机进行选择那么第二呢就是说你有更多的这个时间来帮助你去设计还有这个构想这个攻击的结果以及攻击的思路那我们来看一下IoTBridgeIoTBridge呢其实跟这个架构是有一定关联的那么对于这个有云服务器的这种IoT厂商它的Bridge 虚拟Bridge很多情况下是在跟这个云端进行一个交互那么这种情况下的这个Bridge啊其实很多时候不是我们这一个话题所关注的那我们更关注的是没有这种云服务器也就是说由这个APP啊和这个IoT设备是先协商好的这么一个协议它可能是UPMP它可能是Websocket它也可能是其他一些厂商自定义的这种协议用来作为一个Bridge用来作为一个他们数据通信过程的一个桥梁那我们来看一下在IoT的设备当中它的一些Bridge攻击面那么首先这里只列出了以DNS重绑定为例我们借助DNS重绑定达到第一步渗透到了内网接下来我们可以对这个硬件啊进行这个分析查看开放的端口我们来判断出它的这个Bridge实现的这个协议比如说UPMP比如说DLNA或者说一些其他的这个协议那么当我们达到这层协议之后呢我们就可以更好的去在每一个协议的格式下去构造这种攻击的这种请求达到我们的目的那么可以看到它跟APP的这个攻击面有一个不同点在于它少了这么一块身份认证的过程这个是因为在IoT的厂商当中相对来说意识到这一点做身份认证的这个厂商相对来说出来还不是很多也就是说他们的重视程度比APP第一个level那我们举第一个IoT的这个Bridge Attack的一个案例那这个案例是一个DLNA的案例DLNA是投评协议就是手机或者说一些多媒体往这个电视上投了这里的这个IoT设备目标对象呢就是一台智能电视那么这台智能电视呢首先它在DLNA的这个协议实现上它没有去做身份教验那么我们作为攻击者就可以随意的去利用它的基础功能比如说你在家里看电视我可以入侵进去随意地给你播放一些其他的画面或者说一些其他的视频那么除了这种方式来看的话那似乎DLNA的威胁也不是很这种方式的Bridge Attack的攻击也不是很大但是这家厂商呢除了在这个基础的这个协议处上它还做了一些扩展也就是说DLNA的协议为了自己的为了自己的一些一些方面吧它就做了一些扩展那么它在里面提供了一系列的接口可以达到远程下载执行安装以及运行的APP的一个过程那这样一来而且它这个接口呢没有进行身份教验那这样一来我们身为攻击者就可以同样的过造这么一个攻击链我们来利用它的这个不安全的这个Bridge达到我们的一个攻击的目的最终进入到丝网种下我们的这个木马那这里呢是第二个BridgeBridge attack的一个案例这个呢也是一个电视厂商但是这个电视厂商呢我们的攻击思路换了一个角度我们首先去逆向分析了它的这个中控APP那分析了这个中控APP之后我们发现它是没有经过这个代码保护的那么我们很容易的就获取到了它实现的这个协议以及它协议当中的一些具体的格式最后我们通过WireShake的抓包发现它是通过了WebSocket以及这个一些协议字段都是明文在里面的那我们就很轻易的就是说同样以同样的方式复制前面这一轮的攻击达到远程安装下远程下载安装以及运行的过程当然这个同样也是没有做任何的这个教验的那看完了这个APP以及ROT的这个Bridge attack我们来想一下我们如何去防御这种Attack那么我觉得就是首先从这个对于APP来说也就是JSBridge这一层来说我们需要去严格的教验这个身份就像刚才这种CountanceAntWiz至少来说不要再出现了那么第二呢就是说我们要对这个Bridge的能力做一个约束比如说有XSS的攻击你说我就是没有办法防御把所有的XSS全堵住没有关系那这个每一个域名的全线设置得很大那么你可以你可以把全线做一个细细度的划分即使他拿到了某个子域名的XSS他也没有办法拿到所有的这个Bridge的能力这样的话就也可以做了一个约束的限制最后呢就是说尽量使用这种IgTTPS或者一些加密的信道来保证防止中间人攻击那对于ROT的这个Bridge来说呢我们更多的考虑的是同样的策略跟JSBridge另外呢我们也需要去当心就是对于厂商来说我们还是不要去尽量的去滥用Bridge的能力去扩展这种基础协议随意地扩展如果真的想要扩展的话那确保你一定是加上了可信的这种教验的这么一个环节那最后也是给这个方向做一个总结关于Bridge IgTTPS这么一个概念首先呢它有更多的目标作为选择比如说更多的这个APP以及ROT都可以作为你的选择目标那么第二呢对于我们攻击者来说从Bridge Attack的这个角度去分析这个分析我们有更多的攻击面来考虑我们很轻易地就把外部攻击和APP以及ROT的安全给融合在了一起那么第三呢就是非常容易去利用仅仅是借助一个恶意的UIL它就可以达到传播速度很快以及很广的一个效果那最后呢就是说它利用之后的结果比如说像远程利用本地利用或者说这个信息泄漏甚至持续的这种攻击都是可以达到的好感谢大家这个就是我今天的分享