SDK不加固會有哪些安全隱患

sdk不加固會存在哪些安全隱患?

1.易被競品或惡意者窺視內部實現細節或內部調用流程,甚至有可能泄露隱私數據

安卓平臺SDK絕大部分都是Java語言編寫,容易被反編譯。簡單的混淆可能會暴露內部實現細節,而SDK內部涉及隱私數據則更易泄漏。如果這些細節揭示了關鍵技術的實現方法,那么就等于泄露了核心技術。

2.被惡意者通過字節碼注入等手段植入惡意廣告或惡意代碼然后重打包發布

由于SDK的特殊性,不像App那樣存在簽名校驗邏輯,因此一旦惡意者在你的SDK中植入了一些惡意代碼或惡意廣告然后重新發布的話,將很難察覺,嚴重影響開發廠商的品牌形象與口碑。

3.被破解者繞過關鍵邏輯造成經濟損失

如果SDK存在支付功能,被惡意者分析找到付費邏輯,恰巧涉及付費相關邏輯也未很好的做服務端校驗的話,一旦惡意者通過AOP手段去除這些付費邏輯,意味著將可免費使用付費服務。

4.SDK本身可能存在漏洞,易被惡意者利用

SDK開發者在開發中往往把開發重點聚焦在了功能的實現上,在安全性上一般不會過多重視,因此很難保證自己開發的SDK不存在任何漏洞。因此一旦SDK出現一些安全漏洞,同時這些漏洞被惡意者知道進而利用,那就如同埋下了一顆隨時可能引爆的地雷。SDK開發廠商的口碑不僅僅會因數據及隱私安全受到威脅而受到影響,一旦出現問題還可能需要承擔經濟賠償責任。

如何解決

從上述安全隱患分析可以看出,問題的癥結在于惡意用戶可以輕松地獲取SDK的實現邏輯。因此建議開發者做如下防護措施:

1.關鍵數據的修改必須通過服務端校驗:例如前面提到的付費相關邏輯,涉及余額或支付的金額等數據的修改必須先通過服務端校驗,然后將結果同步到客戶端;

2.關鍵邏輯放到Native層實現:將Java層的一些關鍵邏輯轉移到JNI層用C/C++實現,提高反編譯門檻;

3.字符串進行加密:代碼中的字符串,尤其是敏感信息的字符串必須加密,運行時解密。

但是做到了上面幾點還不夠,只能防住一般的開發者。我們辛辛苦苦開發的SDK可能會成為專業破解者手中的炮灰,從而導致經濟損失。

因此建議接入第三方的安全服務,比如易盾的SDK加固服務。

易盾SDK加固介紹

在介紹易盾SDK加固之前,先介紹下目前市面上絕大部分開發者使用的混淆的方式——Proguard。Proguard是安卓平臺使用最廣泛的混淆,通過抽象語法樹從語法層面進行處理,使得處理后的代碼難以閱讀和理解。如下所示:

SDK不加固會有哪些安全隱患

不過將類名和方法名修改為一些無意義的隨機字符串,比如“a,b,c”,雖然能夠提高破解者閱讀與理解成本,但是很顯然作用是極其有限的。對于破解者而言,分析出代碼的意圖只是時間的問題。

那么易盾的SDK加固解決方案是什么樣呢?接下來為大家介紹:

1.易盾SDK加固VMP方案

將待保護類的方法進行抽空,并對抽取的指令加密處理,在運行時通過自定義虛擬機執行,從而使得破解者無法得到原始代碼邏輯。

效果如下:

SDK不加固會有哪些安全隱患

2.易盾SDK加固Java2c方案

該方案是將待保護類的方法Native化,同時將原函數實現邏輯轉為Native層對應的C/C++代碼,運行時直接執行對應的Native函數。效果如下:

SDK不加固會有哪些安全隱患加固前示例

SDK不加固會有哪些安全隱患
SDK不加固會有哪些安全隱患

SDK不加固會有哪些安全隱患

加固后示例

從靜態分析角度看,和Proguard混淆相比,很明顯加固后的方法已Native化,實現邏輯在Java層已完全不可見。Java層原函數邏輯轉為了JNI層的C/C++代碼實現,同時會對生成的Native層SO進行加密,全方位提高破解難度。

(注:上圖為了更清楚的看到加固后的方法已經轉為對應Native層實現,未對生成的Native層SO進行加密,實際情況易盾SDK加固Java2c方案會對加固后生成的Native層SO進行加密)

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享