屎蛋 · 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. Hibernate Criterion
  2. Git CMD - push: Update remote refs along with associated objects
  3. Dinic最大流 || Luogu P3376 【模板】网络最大流
  4. mysql聚簇索引的页分裂原理实例分析
  5. centos6 mysql 导出sql_centos环境下如何导出数据库
  6. 30分钟通过Kong实现.NET网关
  7. Android 自定义Application
  8. 依赖注入模式中,为什么用对象而不是用数组传递?
  9. php 时间戳获取周几,PHP实现根据时间戳获取周几的方法,php戳获取周_PHP教程
  10. vlan划分不能上网_VLAN工作原理
  11. Java transient关键字(序列化避免被反序列化获取敏感信息)
  12. 张朝阳:社交是互联网的中原 做「狐友」是要逐鹿中原
  13. 关于NXP公司的IMX6系列芯片参考资料体系介绍
  14. python银行账户资金交易管理_Python实现银行账户资金交易管理系统
  15. 光耦隔离的作用是什么?
  16. A FastDetectionMethodviaRegion-BasedFullyConvolutionalNeuralNetworksforShieldTunnelLiningDefects-笔记
  17. (阿里云)Linux部署SSM项目全过程
  18. pytorch之深度神经网络概念全面整理
  19. java实现简单控制台出租房屋管理系统
  20. Shiro实战1-介绍

热门文章

  1. 基金委最新改革:9大科学部整合为4个板块资助布局
  2. 由内而外:大脑是如何形成感官记忆的
  3. 寒武纪开盘暴涨350%,市值突破1000亿,85后创始人身家超300亿!千亿盛宴背后隐忧不可忽视!...
  4. 计算机密码行业专题研究:网络安全最大弹性领域
  5. 全球及美国首张无人机配送商业化“驾照”先后落地,国内还要多久?
  6. 中国首篇Science机器人子刊!北航软体机器人实验室四年成果登上封面长篇
  7. 同样的工作年限,为什么有人年薪百万,有人月薪五千?
  8. 我拍了拍 Redis,没想到被移出了群聊......
  9. 你拖后腿了吗?工信部发布前 11 月软件行业经济报告
  10. 三星教父逝世!李健熙缔造的商业传奇和争议人生