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.pswp.cn/news/391071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391071.shtml
英文地址,請注明出處:http://en.pswp.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的方法呢? 這個方法被調用時…