本篇內(nèi)容主要講解“SDK不加固會有哪些安全隱患”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SDK不加固會有哪些安全隱患”吧!
公司主營業(yè)務(wù):網(wǎng)站建設(shè)、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出城區(qū)免費(fèi)做網(wǎng)站回饋大家。
SDK不加固會存在哪些安全隱患?
1.易被競品或惡意者窺視內(nèi)部實(shí)現(xiàn)細(xì)節(jié)或內(nèi)部調(diào)用流程,甚至有可能泄露隱私數(shù)據(jù)
安卓平臺SDK絕大部分都是Java語言編寫,容易被反編譯。如果只是簡單的混淆,很容易被窺探到內(nèi)部實(shí)現(xiàn)細(xì)節(jié);如果SDK內(nèi)部有一些涉及隱私的數(shù)據(jù),很容易被泄漏。更重要的是,如果這些細(xì)節(jié)涉及到關(guān)鍵技術(shù)實(shí)現(xiàn)點(diǎn)的話,無異于泄漏核心技術(shù)。
2.被惡意者通過字節(jié)碼注入等手段植入惡意廣告或惡意代碼然后重打包發(fā)布
由于SDK的特殊性,不像App那樣存在簽名校驗(yàn)邏輯,因此一旦惡意者在你的SDK中植入了一些惡意代碼或惡意廣告然后重新發(fā)布的話,將很難察覺,嚴(yán)重影響開發(fā)廠商的品牌形象與口碑。
3.被破解者繞過關(guān)鍵邏輯造成經(jīng)濟(jì)損失
如果SDK存在支付功能,被惡意者分析找到付費(fèi)邏輯,恰巧涉及付費(fèi)相關(guān)邏輯也未很好的做服務(wù)端校驗(yàn)的話,一旦惡意者通過AOP手段去除這些付費(fèi)邏輯,意味著將可免費(fèi)使用付費(fèi)服務(wù)。
4.SDK本身可能存在漏洞,易被惡意者利用
SDK開發(fā)者在開發(fā)中往往把開發(fā)重點(diǎn)聚焦在了功能的實(shí)現(xiàn)上,在安全性上一般不會過多重視,因此很難保證自己開發(fā)的SDK不存在任何漏洞。因此一旦SDK出現(xiàn)一些安全漏洞,同時(shí)這些漏洞被惡意者知道進(jìn)而利用,那就如同埋下了一顆隨時(shí)可能引爆的地雷。不僅危及用戶的數(shù)據(jù)及隱私安全,一旦出現(xiàn)事故將會嚴(yán)重影響SDK開發(fā)廠商的口碑,甚至造成經(jīng)濟(jì)賠償。
如何解決
通過上面對安全隱患分析可知,問題的關(guān)鍵在于惡意者容易窺探到SDK的實(shí)現(xiàn)邏輯。因此建議開發(fā)者做如下防護(hù)措施:
1.關(guān)鍵數(shù)據(jù)的修改必須通過服務(wù)端校驗(yàn):例如前面提到的付費(fèi)相關(guān)邏輯,涉及余額或支付的金額等數(shù)據(jù)的修改必須先通過服務(wù)端校驗(yàn),然后將結(jié)果同步到客戶端;
2.關(guān)鍵邏輯放到Native層實(shí)現(xiàn):將Java層的一些關(guān)鍵邏輯轉(zhuǎn)移到JNI層用C/C++實(shí)現(xiàn),提高反編譯門檻;
3.字符串進(jìn)行加密:代碼中的字符串,尤其是敏感信息的字符串必須加密,運(yùn)行時(shí)解密。
但是做到了上面幾點(diǎn)還不夠,只能防住一般的開發(fā)者。在專業(yè)的破解者面前,我們辛辛苦苦開發(fā)的SDK很可能淪為了他們手中的炮灰,進(jìn)而造成經(jīng)濟(jì)損失。
因此建議接入第三方的安全服務(wù),比如易盾的SDK加固服務(wù)。
易盾SDK加固介紹
在介紹易盾SDK加固之前,先介紹下目前市面上絕大部分開發(fā)者使用的混淆的方式——Proguard。Proguard是安卓平臺使用最廣泛的混淆,通過抽象語法樹從語法層面進(jìn)行處理,使得處理后的代碼難以閱讀和理解。如下所示:
不過將類名和方法名修改為一些無意義的隨機(jī)字符串,比如“a,b,c”,雖然能夠提高破解者閱讀與理解成本,但是很顯然作用是極其有限的。對于破解者而言,分析出代碼的意圖只是時(shí)間的問題。
那么易盾的SDK加固解決方案是什么樣呢?接下來為大家介紹:
1.易盾SDK加固VMP方案
將待保護(hù)類的方法進(jìn)行抽空,并對抽取的指令加密處理,在運(yùn)行時(shí)通過自定義虛擬機(jī)執(zhí)行,從而使得破解者無法得到原始代碼邏輯。
效果如下:
2.易盾SDK加固Java2c方案
該方案是將待保護(hù)類的方法Native化,同時(shí)將原函數(shù)實(shí)現(xiàn)邏輯轉(zhuǎn)為Native層對應(yīng)的C/C++代碼,運(yùn)行時(shí)直接執(zhí)行對應(yīng)的Native函數(shù)。效果如下:
加固前示例
加固后示例
從靜態(tài)分析角度看,和Proguard混淆相比,很明顯加固后的方法已Native化,實(shí)現(xiàn)邏輯在Java層已完全不可見。Java層原函數(shù)邏輯轉(zhuǎn)為了JNI層的C/C++代碼實(shí)現(xiàn),同時(shí)會對生成的Native層SO進(jìn)行加密,全方位提高破解難度。
(注:上圖為了更清楚的看到加固后的方法已經(jīng)轉(zhuǎn)為對應(yīng)Native層實(shí)現(xiàn),未對生成的Native層SO進(jìn)行加密,實(shí)際情況易盾SDK加固Java2c方案會對加固后生成的Native層SO進(jìn)行加密)
到此,相信大家對“SDK不加固會有哪些安全隱患”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!