閱讀319 返回首頁    go 阿裏雲 go 技術社區[雲棲]


淺談Android應用保護(零):出發點和背景

近幾年來,無線平台特別是Android平台的安全逐漸成為各廠商關注的重點。各種新的思路和玩法層出不窮。所以,筆者基於前一段時間的學習和整理,寫了這係列關於Android應用安全和保護的文章。

這5篇文章主要關注客戶端代碼和數據的保護,介紹了幾種針對Android應用的逆向分析、攻擊和防護的方法。內容比較淺顯,適合沒有Android安全研究背景的同學入門和科普閱讀。

無線端應用對抗的出發點和背景

根本上來說,手機客戶端是完全控製在使用者手上的,是不可信的,不應該依靠客戶端來實現任何安全、邏輯、業務相關的控製。客戶端應該是極“瘦”的,不做任何安全相關的邏輯上的操作和判斷,不存儲敏感信息,甚至像瀏覽器一樣簡單,所有邏輯都由服務端處理然後下發結果。


1.為了用戶體驗,本地必須保存登陸者的認證信息,避免每次打開都需要輸入密碼登錄

2.為了用戶體驗和減少服務器負載,展示給用戶的頁麵大多需要本地繪製

3.有一部分安全邏輯必須由本地控製,如本地手勢密碼的設置和驗證


所以必須要賦予本地客戶端部分安全相關和邏輯控製相關的功能。而這些功能和邏輯一旦在本地客戶端實現,就一定會麵臨著請求偽造、邏輯篡改、代碼泄露等的風險。(可以類比於B/S架構中的以Js為代表的本地腳本:Js在本地運行,可能會被修改、注入、繞過,Js代碼會被攻擊者直接看到)。


不過好在安全本身就不是絕對的,是和場景和價值結合起來討論的。如果能通過一些方法,讓應用分析者分析應用的難度提升到一個非常高的水平,或者說讓應用分析者分析的過程消耗的資源大於其成功之後獲得的回報,再或者說是讓應用逆向分析、攻擊者獲得的成果對用戶的資金和安全感的造成的影響很小到可以忽略的話,我們也可以認為是安全的。


無線客戶端分析和保護的出發點就是基於上述背景。實現邏輯的控製和繞過,敏感數據的加密和竊取等。在應用攻防中,雙方各有優劣。無線應用因為自身所能做的事情有限,在防禦中是處於劣勢地位。


攻防

攻擊者可以使用root權限,可以使用特殊構造的操作係統(TaintDroid等),可以獲取並修改應用的動態代碼(Xposed,cydia substrate)、係統的環境(Xposed),可以修改重打包應用的靜態代碼(smali/baksmali/dex2jar)。


而在在防禦中,開發者為了保護自己的應用,也相應采取了各種方法,把自己應用的安全性寄托在了各種地方。

1.寄托於破壞攻擊者的工具。

2.寄托在java層代碼逆向、調試、閱讀的難度和java自身的機製上。

3.寄托在Native層(c/c++)代碼逆向、調試、閱讀的難度上。


這就分別對應了無線客戶端攻防的三個維度。

一般而言,對於無線客戶端的安全攻防上,企業或開發者由於精力有限可能無法滿足應用的安全需求,如鯁在喉般的遏製著應用的健康發展。




阿裏聚安全開放平台,擁有移動安全、數據風控、內容安全、實人認證等產品解決方案,其中移動安全方案中的應用加固及安全組件功能,可以讓您的應用擁有金融級的安全防護。

標簽

  • 短信 
  • 積分兌換 
  • 仿冒應用
  • 漏洞分析 
  • 漏洞預警 
  • 年度報告
  • 安全報告 
  • 病毒分析
  • 阿裏聚安全
應用更安全,用戶更放心! 立即登錄 

最後更新:2017-04-10 22:15:11

  上一篇:go Android應用安全開發之淺談加密算法的坑
  下一篇:go 4月10日雲棲精選夜讀:一篇文章搞懂人工智能、機器學習和深度學習之間的區別