Android DropBox SDK漏洞(CVE-2014-8889)分析

wyzsk發表於2020-08-19
作者: 小荷才露尖尖角 · 2015/03/16 14:17

0x00 前言


本文是對IBM ISS安全團隊對DropBox SDK漏洞詳細分析的翻譯。

原文見http://www.slideshare.net/ibmsecurity/remote-exploitation-of-the-dropbox-sdk-for-android

如今個人資料儲存在雲端,這使得像照片備份或通用儲存那樣的服務不僅可以被使用者訪問,也能被代表使用者的app所訪問。在許多方面,包括訪問控制功能的app與服務之間的互操作總是具有挑戰性的,為了解決訪問控制來來的挑戰,OAuth1和2等授權協議陸續被提出,它們可以安全地授予app訪問特定服務中個人資料的許可權,而又不洩露使用者的個人憑據。為便於開發,這些服務通常為app提供一個框架或SDK,使app能夠和服務進行通訊。對於app開發者而言,SDK是具有吸引力的,因為其對內部細節進行了抽象,給開發者提供了簡單的客戶端API。從安全的角度來看,SDK則提供了極具吸引力的攻擊面,因為其一旦出現可供利用的漏洞,可以影響大量使用該SDK的app。

本文介紹了Android Dropbox SDK 1.5.4-1.6.1版本中存在的一個嚴重漏洞(CVE-2014-8889),該漏洞使基於Dropbox SDK的app暴露於嚴重的本地和遠端攻擊。作為概念證明(POC),我們開發了針對包括Microsoft Office Mobile和1Password等流行app的遠端攻擊程式。我們負責任地將該漏洞報告給了Dropbox,Dropbox也及時提供了一個修復的SDK(1.6.2版)。在此,強烈建議開發者下載SDK並更新其app。

0x01 背景


Dropbox SDK是一個供開發者下載並用於其產品的庫,它透過一組簡單的API,提供了輕鬆使用Dropbox服務,如下載或上傳檔案等功能。

AppBrain的統計資料表明了在Android中使用Dropbox SDK的流行程度[1 ],在全部應用中,有0.31%使用了Dropbox SDK。而在Google Play前500的應用中,1.41%使用了Dropbox SDK。有趣的是,按照安裝量統計,分別有總量的1.32%和前500應用安裝量的3.93%使用了Dropbox SDK。

儘管Dropbox SDK不是一個高度流行的基礎軟體庫,某些非常流行的Android app仍然使用Dropbox SDK持有敏感資料,包括擁有10,000,000下載量的[Microsoft Office Mobile](https:// https://play.google.com/store/apps/details?id=com.microsoft.office.officehub),以及擁有100,000下載量的AgileBits 1Password

我們發現的這一漏洞影響使用Dropbox SDK 1.5.4-1.6.1版的所有Android app。我們分析了使用Android Dropbox SDK的41個app(它們使用了1.5.4-1.6.1版),其中有31個app(76%)能夠被攻擊成功)。需要註明的是,其餘app仍然具有漏洞,可以被造成同樣後果的更加簡單的攻擊所利用,只不過這些app沒有升級到修復漏洞的1.5.4版。

本文結構如下,第二章介紹了Android中跨應用通訊(IAC)的背景,第三章介紹了IAC如何被惡意程式碼本地利用和遠端drive-by攻擊利用的技術,第四章描述了Dropbox SDK如何使用OAuth為Android app提供授權,第五章深入分析我們所發現的Android Dropbox SDK用於OAuth程式碼中的漏洞,第六章描述了我們稱之為DROPPEDIN的利用該漏洞的真實攻擊,第七章我們提供了反映真實威脅的案例,最後在第八章中我們提供了該漏洞的修復建議。

0x02 Android中的跨應用通訊(IAC)


Android應用在沙箱環境中執行,沙箱確保應用資料的機密性和完整性,如果沒有配置適當的許可權,某一應用無法訪問其他應用中的敏感資訊。例如,Android Stock瀏覽器中的敏感資訊,如cookie、快取和歷史記錄,不會被第三方的app所訪問。沙箱機制依賴於多種技術,包括基於應用的Linux user-id分配,因此在預設情況下,某一應用的資源(如檔案),不會被其他應用所訪問。儘管沙箱機制有利於安全,對於有時在app之間需要通訊的場合,也犧牲了部分互操作性。回到前述Stock瀏覽器的例子,當使用者使用瀏覽器訪問到Google Play網址時,可能需要開啟Google Play app,為了支援這種型別的互操作,Android提供了一種高層的跨應用通訊(IAC)機制,通常使用了封裝有關載荷和目標應用元件的資訊、被稱之為Intent的特殊訊息。Intent可以是顯式指定,此時必須明確指定目標應用元件,也可以隱式指定,此時目標應用無需明確指定,而由Android系統根據Intent引數中的URI scheme、action或category決定。

0x03 利用跨應用通訊的攻擊


如果攻擊者可以控制Intent載荷,直接啟動應用元件,那麼攻擊面將被拓寬,特別對於處於匯出(exported)狀態的應用元件。這些匯出的一個用元件易於遭受惡意應用的本地攻擊。負責UI螢幕的Android元件Activity也可以遭受遠端的drive-by攻擊技術,見[2,3]。

在本地攻擊中,如圖3.1所示,惡意應用透過惡意Intent(即包含惡意資料)啟動匯出的目標應用,這隻需要簡單的呼叫API,如Context.startActivity(intent)

image

圖3.1 惡意應用的本地攻擊

而在圖3.2所示的遠端drive-by攻擊中,使用者被欺騙瀏覽惡意網址,惡意網址的網頁使瀏覽器傳送惡意Intent,啟動目標activity。

image

圖3.2 遠端Drive-by攻擊

0x04 OAuth與Dropbox


為了授權app使用一個指定的Dropbox賬號,Dropbox SDK使用了OAuth協議,這個過程始於app在Dropbox網站的帶外註冊,接著app就可以從Dropbox收到app key和app secret,並將其硬編碼於程式碼中。

然後app將在Android Manifest檔案中匯出Dropbox使用的AuthActivity,如下所示。

#!html
<activity android:name="com.dropbox.client2.android.AuthActivity" ...> 
    <intent-filter>
        <data android:scheme="db-<APP_KEY >" />
        <action android:name="android.intent.action.VIEW" /> 
        <category android:name="android.intent.category.BROWSABLE" /> 
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter> 
</activity>

圖4.1描述了Dropbox OAuth協議各方及通訊過程,這一過程首先開始於app攜帶必須的資料(即app key和app secret)呼叫Dropbox SDK AndroidAuthSession中的靜態方法start{OAuth2}Authentication,該方法使用一個Intent啟動AuthActivity,接著AuthActivity產生一個nonce隨機數,並再次透過一個Intent啟動瀏覽器或者Dropbox app(如果已安裝),對使用者進行認證和對app進行授權。這一過程將使用到前面產生的nonce。瀏覽器或者Dropbox app將利用指向app唯一URI scheme(db-

相關文章