网站建设 企泰科技公司,网站招牌模板,网站名称和域名有关系,wordpress登不上屎蛋 2016/06/22 10:11author:[email protected]0x00 “Hotpatch”简介IOS App的开发者们经常会出现这类问题#xff1a;当一个新版本上线后发现存在一个严重的bug#xff0c;有可能因为一个逻辑问题导致支付接口存在被薅羊毛的风险#xff0c;这个时候能做的只能是赶快修复…屎蛋 · 2016/06/22 10:11author:[email protected]0x00 “Hotpatch”简介IOS App的开发者们经常会出现这类问题当一个新版本上线后发现存在一个严重的bug有可能因为一个逻辑问题导致支付接口存在被薅羊毛的风险这个时候能做的只能是赶快修复完安全问题并提交到appstore审核在急忙推送用户尽快更新避免为此导致的严重安全后果买单。为了解决此类问题遍有了实现给App应用”实时打补丁”这类方案目前大致有两种主流的“热修复”的项目。根据基本原理可以分为下面两种原理同为构建JS脚本与Object-C语言之间转换的桥梁。WaxPatch(Lua调用OC)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安全传输也没有对传输数据进行防篡改如以下几种场景传输过程没有使用Https传输过程使用了Https但是对Https的证书没有做正确校验。传输过程没有使用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