4. 用 OWASP Mobile Top 10 檢驗 APP - Anfa

另一篇  http://sls.weco.net/node/28000

 

林庭宇,王薪嘉,林佳穎,呂威里

OWASP (Open Web Application Security Project):10年前以Web為主,後來也有做Mobile等等

Top 10 Mobile Risks(程式有多少與外界接觸,就要注意多少地方)

OWASP Top 10 Mobile Risks - 2014

https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_10_Mobile_Risks

M1:伺服器端安全控制脆弱,例如app前後端分包給不同單位,造成伺服器端疏於對前端進行安全性的維護。

M2:不安全的資料儲存於用戶端,將敏感資料存放於用戶端,而沒有進行適當的保護。

M3:傳輸層保護不足。例如:http

M4:非故意地造成資料外洩。當mobile端程式在處理機敏資料時,可能造成該資料被放置在一個不安全的區域

M5:身分鑑別和授權機制不嚴謹,含前後端。

M6:在加密過程中,因為科技越來越強,若使用舊的加密機制,容易被快速破解。

M7:針對客戶端的程式碼注入攻擊(SQL、JS)

M8:對於不受信任之輸入來源的檢測處置

M9:連線階段處理不適當,例如不同連線使用相同的session識別,造成系統暴露於重送(reply)攻擊。

M10:程式的主要安裝檔不夠安全,程式被反組譯,造成程式碼被公開

 

OWASP Top 10 Mobile Risks - 2016

https://www.owasp.org/index.php/Mobile_Top_10_2016-Top_10

M1:作業系統平臺使用不當,是否向系統要求過大的權限。

M2:不安全的資料儲存

M3:傳輸的方式多元化,要注意protocol是否安全。

M4:不安全的身份驗證

M5:加密失效

M6:不安全的授權

M7:用戶端程式碼品質問題,包括用戶端程式碼所開發問題,如行動應用APP存有緩衝區溢位弱點或XSS問題。

M8:竄改APP程式內容,比如驗證身分時不論對錯都回傳true

M9:逆向工程,應用程式會不會被反組譯?因為JAVA是相對好反組譯的語言。

M10:程式是否包含額外功能,比方log、後門(以為只有開發者知道的後門)

 

Software Stack

android 使用 linux 為核心,其 open source 的特性有好有壞。

程式是人寫的,沒有人可以保證他寫出的系統萬無一失,而 open source 對外開放讓使用者自由修改的機制使得程式中的缺點與漏洞更容易被發現,或許可以透過程式設計者社群的共同開發而快速修正、改善,卻也可以以此作為入侵途徑。

Applications通過Components互動 ,其中包含四種不同的Components

  • Activities:single screen UI 會自己釋放
  • Services:No UI
  • Broadcast receivers:只觀察XML是不夠的,還需要看原始碼才能確定是否推播
  • Content providers:Android將聯絡人設計成可以共享,可以透過權限設置。

Applications使用特定的API(相機、gps等等)需要先經由使用者同意存取權限

Access to sensitive user data available only through protected<br />
APIs

 

Platform Versions

Android因為版本眾多且沒有強制更新,開發時需要顧慮多種版本族群,為了顧及舊版本的使用者,新功能可能無法使用,使得攻擊者可以用舊手法達到攻擊目的

當 Android 裝置廠商對產品的系統更新不夠及時,會導致用戶無法盡快應用到 Google 對 Android 系統的更新和修復。

比如:

Android作業系統5.0以上的版本存在著能夠繞過鎖定畫面的安全性漏洞,攻擊者可以利用特殊的手法,在不輸入解鎖 密碼的前提下,直接繞過鎖定畫面並操作手機,讓被害者的手機資料受到威脅。

1. 在裝置的鎖定畫面中開啟緊急撥號(Emergency Dialer)功能,並隨意輸入數字或符號,並用複製貼上的方式填滿欄位。

2. 複製最終的長串字串

3. 在鎖定螢幕中啟用相機App。

4. 拉下通知中心,點選設定圖示,這時候會要求輸入密碼。

5. 將先前複製的字串不斷貼上至密碼欄位,直到系統當機並重回相機App。

6. 回到相機App後,等到相機當機,就能繞過鎖定,進入系統主畫面。

http://www.techbang.com/posts/26218-android-5-security-vulnerabilities-n...

操作流程的影片:https://youtu.be/J-pFCXEqB7A

 

又比如:

Stagefright(怯場漏洞)

影響版本:android 2.2 以上

而Stagefright本身並不是一種漏洞,而是Android操作系統的核心組成框架之一,主要用來處理、播放和記錄多媒體文件。

它不像網路釣魚等攻擊手段,需要打開攻擊者發送的檔案或連結才會感染,即使是受害者不做任何事情,它也能偷偷地入侵裝置並在使用者發現前將證據抹掉。

1. 駭客透過 MMS 多媒體簡訊,夾帶一個「圖片」或「影像」,送給 Android 手機使用者。

2. 收件人只要預覽(preview)圖片或影像視頻,被值入的漏洞軟體就已經開始執行。

3. 後面如果再開影片、圖片等,被植入的漏洞軟體,同樣會繼續執行。

4. 更有甚之,精緻或完整一點的攻擊設計,連上述 preview 都不用,攻擊就已經完成,並直接刪掉簡訊;受害只會看到「簡訊通知」,但點進去沒有簡訊,卻已經被入侵。

5. 承上,也就是說,這個攻擊,可能在「你睡覺的時候」 --> 收到一個 MMS 訊息 --> 攻擊就完成!

防禦:

1.不要點擊來路不明的網頁。這些網頁可能會包含被植入了惡意代碼的多媒體文件,所以在瀏覽網站時要注意偵別網頁來源。

2.避免使用公共WiFi。當你的手機連入公共WiFi 後,駭客總有辦法入侵你的手機,因此切斷惡意代碼傳播的管道是一種明智的選擇。

3.及時更新系統。若不更新操作系統,再好的安全更新也不會為你的手機提供防禦。

 

 

Security

Application Signing:應用程式安裝、更新的時候需要sign

Android application package (APK):概念上等同於ZIP、GZ等

res:應用程式與介面相關的xml

classes.dex:反組譯針對的檔案

AndroidManifest.xml:定義整個APP服務的宣告

Permission:APP的權限要求列表

android:debuggable:設定後可以透過指令debug,不要將開發中的debuggable放入APK中

android:allowBackup:決定是否可以打包的參數

android:exported:對外開放,外界的應用程式可以跟他互動

 

Intent

具資料收送的部分有機會成為程式漏洞,如果APP的功能沒有指定執行者時,用廣播的方式讓所有能夠執行功能的執行者都有機會可以執行,很容易被攻擊者覆蓋、填充造成危害,可用指定執行者的方式避免。

例如:有一個遊戲的APP,並沒有指定第三方帳戶驗證,用廣播的方式讓所有能夠驗證的程式都有機會可以執行,讓使用者自由選擇第三方帳戶驗證的方式,而攻擊者就有機會覆蓋、填充原本Intent內的值,可能將帳戶資訊多傳一份給攻擊者等等,以此取得使用者資料。

PendingIntent

Settings本身是一個高權限進程,將自己的PendingIntent傳給不可信的第三方程序是不安全的。

Settings初始化PendingIntent的時候傳入的是一個沒有內容的new Intent,所以攻擊者在調用PendingIntent.send的時候,允許調用者填充Intent的值,可以隨意設置Intent中的部分內容。

漏洞修復:

1.簡單地將PendingIntent所關聯的Intent中的component、action、action中初始化了一個無意義的值。

2.設定完整的intent資料,直接指定執行者。

總之不要給空白的intent,避開被攻擊者覆蓋、填充的危機,這樣一來就不能夠藉助Intent.fillin對intent的值進行二次填充了。

 

Storage

Space:分外部(SD card)、內部。基本權限無法存取內部空間。現階段較新的產品已經沒有SD卡

Type:Shared Preferences(xml)、Database(SQL Lite)、RAW(最原始的檔案寫入方式,可根據自己的使用方式作使用)

 

WebView

1. 遠端代碼執行 (Remote Code Execution)

風險:木馬跳板,個資被盜

因為沒有正確限制使用WebView.addJavascriptInterface方法

該方法通過預先設定好的介面,讓網頁能呼叫指定的公開函式並取得函式回傳的結果。

攻擊者可通過遠端使用Java Reflection API利用該漏洞執行JAVA任意代碼

Google Android <= 4.1.2 (API level 16) 均會受到此漏洞的影響。

2. 繞過同源策略 (Same-Origin Policy bypass)

風險:個資被盜

為防止網頁在載入外部資源時引發安全問題,瀏覽器會實作同源策略以限制程式碼和不同網域資源間的互動。

 

Android的安全政策如何被定義

  • 使用Inter Component Communication(ICC)
  • menifest檔案可以定義存取components的存取權限
  • 例外狀況:components可為公開或私人
    • 安全漏洞:components可能在不知情的情況下開放權限給其他applications
    • 解法:永遠記得設定exported欄位為false
  • 例外狀況:manifest檔案沒有定義存取權限,公開的component能被任何applications存取
    • 安全漏洞:沒有被授權的component擁有存取權限
    • 解法:沒有被授權的components應該被當作特例處理,且輸入的資料應該要被詳細檢查
  • 例外狀況:廣播intent的程式碼可以設定存取權限,限制特定的接收器可以存取intent
    • 安全漏洞:如果沒有設定准許標籤,所有不該存取的application都可以接收廣播
    • 解法:永遠記得設定intent廣播的存取權限
  • 例外狀況:系統使用准許標籤來存取特定api
    • 安全漏洞:給予系統或使用者太底層的權限
    • 解法:明智的使用可以存取受保護api的准許標籤

參考資料:

http://www.cnblogs.com/vendanner/p/5114414.html

http://www.mas.org.tw/spaw2/uploads/files/1050811-6.pdf

http://devco.re/blog/2014/10/13/android-webview-left-shortcuts-for-hacker/

http://siis.cse.psu.edu/slides/android-sec-tutorial.pdf

https://mobilesecuritywiki.com/

https://www.owasp.org/index.php/Mobile_Top_10_2012

http://squaremax.pixnet.net/blog/post/86780972-%E6%B7%BA%E8%AB%87owasp-top-10-mobile-risks