屎蛋 · 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…

Hotpatch潜在的安全风险相关推荐

  1. 平方沙龙|如何识别与管理创业合伙人之间的关系和潜在的法律风险

    记者:歌子 当当网"庆俞年"之争中,北大的高材生,李国庆先生,可谓年度普法大使,上演了一幕幕生动的关于婚姻风险.公司控制权争夺的"组合拳"以及股权代持的现实版案 ...

  2. 郭盛华:警惕家庭智能扬声器中潜在的窃听风险

    一名安全研究人员因识别Google Home智能扬声器中的安全问题而获得了107500美元的漏洞赏金,这些问题可能被用来安装后门并将其变成窃听设备. 国际知名网络黑客安全专家.东方联盟创始人郭盛华在一 ...

  3. 警告:面临潜在的安全风险_HTML5网站展示:48个潜在的Flash演示

    因此,您听说过有关HTML5的所有谣言都将取代Adobe Flash. 尽管大多数网络社区都认为有可能实现,但您必须徘徊于何处使HTML5如此强大,以至连巨型公司Apple都希望使用它来代替Flash ...

  4. 我当DeFi农民的一个月:浅谈Balancer流动性挖矿的风险与潜在收益

    在最近爆火的DeFi农耕潮当中,像红薯YAM.意大利面.小龙虾.葡萄等千奇百怪的项目吸引了很多人的眼球,而这些农耕活动显示的上千百分比年化收益(APY指标),确实有些让人感到窒息,但笔者却一直都没有心 ...

  5. 【译】保护 Consul 在特定设置中免受 RCE 风险的影响

    2018年11月27日 Consul 团队 介绍 我们最近注意到了一组恶意软件,它们主要针对具有允许远程执行代码这一特定配置的 Consul nodes . 我们的社区成员也 (负责任地) 报告了此恶 ...

  6. IPSec ***和SSL ***两种***的安全风险比较

    虚拟专用网络(***)已经成为了公司合作伙伴或员工远程安全访问公司资源的事实标准.在本文中,我们将试图解释两种特定的***类型,即IPSec ***和SSL ***,以及这两种类型应该如何选择. 然而 ...

  7. 移动金融业务风控框架及设备风险识别的意义(上)

    移动金融服务(MFS)指传统金融机构通过移动设备为客户提供的产品或服务.移动渠道给金融机构带来了新的机会,使其可以最大限度的获取新客户,并且降低运营成本. 在中国市场,5年前的O2O泡沫完成了移动支付 ...

  8. 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!

    编:夕小瑶 几个月前,小屋推送了一期上帝视角看新型冠状病毒(COVID-19)对公众出行影响的顶会论文解读--<这篇顶会paper,讲述了疫情期间憋疯的你和我>,这篇有趣的paper来自百 ...

  9. 软件问题造成的经济损失案例_公司印章管理使用哪些行为会造成法律风险隐患...

    公司在印章管理当中,如果因印章管理使用不当,会给企业带来那种法律风险和责任?企业又有哪些方法可以避免此类问题:针上述两个问题,在回答问题之前我们先来看一下传统公司印章管理模式到底存在有哪些分风险隐患? ...

最新文章

  1. 深度学习未来发展的三种学习范式:混合学习,成分学习和简化学习
  2. 京东方网络推广外包将为三星提供OLED 屏幕可造成韩国显示产业动荡
  3. 用findstr查找特定文件里面的字符串
  4. Home界面的ListView
  5. java二维码生成并可以转换
  6. angular5项目端口冲突之解决办法
  7. python3程序设计基础刘德山答案_Python 3 程序设计学习指导与习题解答
  8. 必须掌握的八个cmd命令行
  9. 一个程序员开始优秀的 3 种迹象
  10. 在Python中使用try-except-else是否是一种好习惯?
  11. Atlassian发布Bamboo 6.0和Bitbucket Server 5.0
  12. sed用法详解(转载)
  13. linux降调软件下载,o的发音有几种
  14. 大一下c语言笔记本电脑,大一新生上大学笔记本电脑推荐
  15. 谈用户裂变,社群裂变的重要性
  16. Jackson 解析j@JsonIgnorePropertiesson数据之忽略解析字段注解
  17. 在Ubuntu16.04 中安装g2o并运行g2o_viewer
  18. 世界五百强企业网站(二)
  19. 蘑菇街支付架构 PDF 下载
  20. 关于python语言、下列说法不正确的是-以下关于Python语言中“缩进”说法正确的是:...

热门文章

  1. 5条出人意外的大脑秘密,奇奇怪怪的知识又增加了!
  2. 为什么很难创造出新的处理器?
  3. 一幅图读懂量子力学(数学的判决)
  4. 【前沿】MIT搞了个进取型机器人!能研究学习对象操纵的基础
  5. 半导体行业必将再火十年!两大趋势成发展新动能
  6. 学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡
  7. 通信测试:5G 时代的“卖水人”
  8. 权威发布 |《科学美国人》:2018全球十大新兴技术
  9. 专家把脉,深入分析八种前景看好的物联网业务形态
  10. 怎么请假显智商高?评论区亮了! | 每日趣闻