Hotpatch潜在的安全风险

屎蛋 · 2016/06/22 10:11

author:[email protected]

0x00 “Hotpatch”简介


IOS App的开发者们经常会出现这类问题:当一个新版本上线后发现存在一个严重的bug,有可能因为一个逻辑问题导致支付接口存在被薅羊毛的风险,这个时候能做的只能是赶快修复完安全问题并提交到appstore审核,在急忙推送用户尽快更新,避免为此导致的严重安全后果买单。为了解决此类问题遍有了实现给App应用”实时打补丁”这类方案,目前大致有两种主流的“热修复”的项目。

根据基本原理可以分为下面两种,

原理同为构建JS脚本与Object-C语言之间转换的桥梁。

  1. WaxPatch(Lua调用OC)

  2. JSPatch(Javascript调用OC)

”热修复” 技术虽然极大的减少了开发者更新补丁的时间与商业成本,但却将Apple努力构建的安全生态系统——Apple Store对上架App的严格审查规则置于高风险下。通过这种技术可以在上线以后直接更新App原生代码,从而从某种意义上绕过了Apple Store的审查规则。

0x01 原理分析


这种手段是通过IOS内置的JavaScriptCore.framework 微型框架来实现的,它是Apple官方在IOS7以后推出的主要是用来提供一个在Objective-C中执行Javascript环境的一个框架。

JSPatch并没有使用JSExport协议与OC代码进行互调,而是使用了JSBinding(Javascript与OC代码交互的接口)与Objective-C中的runtime(运行时),采用了JavaScriptCore.framework框架作为解析javascript的引擎,与客户端的代码实时交互动态修改OC方法的一种方案。

对客户端整个对象的转换流程如下:

使用JavaScriptCore.framework作为Javascript引擎解析JavaScript脚本,执行JavaSript代码并与Objective-C端的代码进行桥接。另一方面则是使用Objective-C runtime中的method swizzling的方式和ForwardInvocation消息转发机制使得在JavaScript脚本中可以调用任意Objective-C方法。

总的执行过程:

Javascript-> JavaScriptCore Framework-> Objective-C->runtime->动态修改IMP

(更像与Android的Webview代码执行?)

下图展示了在客户端代码中如何嵌入JSPatch。

在此之后客户端每次启动时都会下载请求这段js脚本来更新客户端代码。

0x02 存在的安全隐患


JSPatch的确给IOS开发者们带来了很多好处,但是这么高的权限如果使用不当往往会有恶意用户会用它来做一些坏事。

可以预见的风险主要来自以下方面:

一 传输过程安全问题

服务端在下发JS的更新补丁时如果传输过程中如果没有使用Https或者对Https的证书未做严格校验,又或者没有做数据防篡改的方案,更新的补丁在传输过程中被恶意攻击者劫持篡改了传输补丁数据,就可以导致非常大的危害,比如命令执行什么的。。

实践出真知,由于没有找到合适的App做演示,我们使用虚拟机做跳板机来简单搭建一个中间人的场景:

虚拟机ip: 10.180.145.17 这台机器充当中间人的角色。

本机搭建一个简单的服务器,用于App的更新脚本服务器,用于下发jspatch脚本。

在测试App中的Object-C加入要更新补丁的url(嵌入到JPEngine中):

url:http://10.180.144.1:8081/static/js/test.js

这段js补丁本来是要在屏幕打印222 这几个数字,但是App在更新补丁时并没有使用Https安全传输,也没有对传输数据进行防篡改,如以下几种场景:

  1. 传输过程没有使用Https

  2. 传输过程使用了Https,但是对Https的证书没有做正确校验。

  3. 传输过程没有使用Https,也没有对数据做防篡改。

整个传输过程是明文可见的:

加载补丁后正常显示:

之后我们新建一个下发的更新补丁:

Apple默认是不允许调用私有api的(在App上线时会经过App Store的审查),但是在使用了JSPatch引擎后,可以直接调用私有的Api来获取设备私密信息。

这里加载了一个Accounts.framework, 用来获取设备中的帐号信息。

替换远程加载的Js:

之后成功利用JSPatch更新了客户端的代码,读取出设备的帐号信息:46个

46个帐号被显示在App中。

此外还有很多private frameworks 可以拿来调用,当然这只适合越狱手机了,这种权限是很可怕的。

二 恶意的第三方SDK

同传输过程安全一样,第三方的SDK极大的扩展了App的功能,但是不能保证这些SDK的开发者不存在恶意的开发者,恶意的SDK可以利用JSPatch下发恶意脚本,利用App的权限窃取敏感数据或者对系统做一些敏感操作。

三 本地篡改下载更新的javascript脚本

如果下载到了本地更新脚本没有做加密,通过篡改本地的更新补丁,可以修改为执行任意OC代码的js脚本,同样可以执行任意代码。

0x03 其他面临的风险


补丁传输安全

在使用JSPatch时一定要注意传输过程的安全,使用Https传输,或使用作者推荐的RSA检查下发的JS补丁,或者使用作者提供的Loader。

第三方SDK

在使用第三方的SDK时需要注意检查是否嵌入了JSPatch,防止利用App的权限来对系统做一些坏事,或者窃取App的用户信息。

本地存储

更新补丁在本地存储时需要对存储的补丁做加密,防止数据被篡改造成代码执行。

参考文献

  • www.fireeye.com/blog/threat…
  • github.com/bang590/JSP…

转载于:https://juejin.im/post/5aa119d2f265da239f06f388

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?

问题:spring中Inject和Autowired的区别?分别在什么条件下使用呢? 我在浏览SpringSource上的一些博客,在其他一个博客中,那个作者用了Inject,但是我觉得他用Autowired也行 下面是一部分代码: …

Objective-C语言的动态性

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading) 一、编译时和运行…

内存泄漏和内存溢出的区别

原文地址https://www.zhihu.com/question/40560123 简单来说,操作系统就像资源分配人员,你要使用内存的时候分给你,你用完了还给它。如果你使用了没有分配给你的内存就是内存溢出,如果你用完了没有还就是内存泄漏。会引起的问题&a…

怎么注销笔记本icloud_如何在笔记本电脑或台式机的Web浏览器中在线查看Apple iCloud照片

怎么注销笔记本icloudPicture this: you just returned from a beautiful vacation and want to show all those gorgeous photos to your family. But your phone just died. And since youre at a family dinner your laptop is nowhere to be found.想象一下:您刚…

棒棒糖 宏_棒棒糖图表

棒棒糖 宏AKA: lollipop plot又名:棒棒糖情节 WHY: a lollipop chart (LC) is a handy variation of a bar chart where the bar is replaced with a line and a dot at the end. Just like bar graphs, lollipop plots are used to make comparisons between diff…

ubuntu上如何安装tomcat

1. 在官网下载linux里面的tomcat 2. 放到DownLoads下面--把tomcat的压缩包放到DownLoads3. sudo mkdir /usr/local/tomcat/ -在usr/local/路径下新建一个tomcat的文件夹4 sudo tar zxvf tomcat。。。。tar.gz -C /usr/local/tomcat/---把解压后的tomcat放到usr/local/下的tomca…

leetcode 1734. 解码异或后的排列(位运算)

给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。 它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] perm[i] XOR perm[i 1] 。比方说,如果 perm [1,3,2] ,那么 encoded [2,…

ZooKeeper3.4.5-最基本API开发

2019独角兽企业重金招聘Python工程师标准>>> package cn.itcast.bigdata.zk;import java.io.IOException; import java.util.List;import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEven…

字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数

字符串转换整数pythonUnlike many other programming languages out there, Python does not implicitly typecast integers (or floats) to strings when you concatenate them to strings.与现有的许多其他编程语言不同,Python在将整数连接到字符串时不会隐式地将…

理解Java里面的必检异常和非必检异常

问题:理解Java里面的必检异常和非必检异常 Joshua Bloch在"Effective Java"里面说过 在可恢复的条件下和编程错误导致的运行时错误时,使用必检异常(第二版的第52页) 让我们来看一下我对这个的正确理解吧 下面是我对…

使用vim打开文件的16进制形式,编辑和全文替换

1、先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误。 vim -b file-to-open.dat 2、用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查看和编辑二进制文件了。 3、vim 单文件替换方法 :%s/old/new/gc 全文执行替换,询问是…

nlp自然语言处理_不要被NLP Research淹没

nlp自然语言处理自然语言处理 (Natural Language Processing) 到底是怎么回事? (What is going on?) NLP is the new Computer VisionNLP是新的计算机视觉 With enormous amount go textual datasets available; giants like Google, Microsoft, Facebook etc have…

opencv 随笔

装环境好累,python3.6,opencv3.4 好不容易装好了,结果 addweight的时候总是报错 The operation is neither array op array (where arrays have the same size and the same number of channels), nor array op scalar, nor scalar op array …

js打开飞行模式_什么是飞行模式? 它有什么作用?什么时候应该打开它?

js打开飞行模式If youve flown on an airplane in the last decade and you have a smart phone, youve likely had to put that phone in airplane mode before the plane takes off.如果您在过去的十年中乘坐过飞机,并且拥有一部智能手机,那么您可能必…

在Java 里面怎么比较字符串

问题:在Java 里面怎么比较字符串 到目前为止,我使用 操作符去比较字符串在我的程序里面。然而,却产生了一个bug,将这个改为了.equals()以后,就把bug修复了 是不是太辣鸡了?它什么时候应该被使用或者说是不…

中小型研发团队架构实践三要点(转自原携程架构师张辉清)

如果你正好处在中小型研发团队…… 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少。中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式&#xf…

时间序列预测 预测时间段_应用时间序列预测:美国住宅

时间序列预测 预测时间段1.简介 (1. Introduction) During these COVID19 months housing sector is rebounding rapidly after a downtime since the early months of the year. New residential house construction was down to about 1 million in April. As of July 1.5 mi…

zabbix之web监控

Web monitoring(web监控)是用来监控Web程序的,可以监控到Web程序的下载速度,返回码以及响应时间,还支持把一组连续的Web动作作为一个整体进行监控。 1.Web监控的原理 Web监控即对HTTP服务的监控,模拟用户去访问网站,对…

如何使用Webpack在HTML,CSS和JavaScript之间共享变量

Earlier this week, I read an article explaining how CSS-in-JS slows down the rendering of some React apps and how static CSS is faster. But CSS-in-JS is very popular because, among other features, you can style dynamically using JavaScript variables.本周初…

Java中获得了方法名称的字符串,怎么样调用该方法

问题: Java中获得了方法名称的字符串,怎么样调用该方法 如果我有以下两个变量 Object obj; String methodName "getName";在不知道obj的类的情况下,我怎么样才能调用该类的名叫methodName的方法呢? 这个方法被调用时…