2013-03-19 56 views
6

我正在使用Intent在新任務中啓動新的活動。該意圖在其附加內容中包含該活動所需的一些私人數據。這些數據不應該被其他應用程序讀取。 我們調查了這些數據是否確實沒有泄露。我們發現通過使用getRecentTasks()中的RecentTaskInfo,這個額外的數據可以被任何具有GET_TASK權限的任意應用程序讀取。 這不是很安全。 我們發現此泄漏後,我們停止搜索。有更多的方式泄露這些數據嗎? 而且,我如何確保額外的數據不可被其他應用程序讀取?保護Android中的額外數據意圖

回答

6

這種意向攜帶其額外

爲什麼由活動需要一些私人數據?將標識符傳遞給專用數據(以附加形式),將這些標識符解析爲專用數據(例如數據庫查詢)只能由活動完成。

我們發現,通過使用RecentTaskInfo從getRecentTasks()這個額外的數據是由具有GET_TASK許可

是的,我blogged about this兩年前任意應用程序讀取,和其他人可能沒有連在那之前。

有沒有更多的方式泄露這些數據?

所有啓動其他組件的請求都是通過OS進程進行的,所以數據一直被「泄漏」到OS中。

而且,根據您對Intent所做的操作,您可能會以其他方式泄漏它(例如,將Intent本身作爲Parcelable傳遞給其他應用程序)。

而且,如何確保額外的數據不能被其他應用程序讀取?

你不行。同樣,不要將私人數據放在活動附加資料中,而是使用可用於獲取私人數據的標識符。

+0

雖然我同意你的解決方案可以使用(順便說一下,它將適用於「所有」API級別),但似乎更新版本的Android實際上解決了您的博客中描述的問題。檢查我在我的答案中鏈接的提交。 – baske 2013-03-19 14:19:24

+0

我可以接受操作系統能夠讀取我的數據,問題出在非操作系統應用程序。如果我正確解釋您的解決方案,這意味着設置一個ContentProvider。這只是將安全問題轉移到不同的位置:如何確保查詢僅在預期活動訪問時返回答案?當多個應用程序需要向他們發送安全信息時,我不會將權限看作是可行的解決方案,但他們不允許看到其他信息。 – user2186703 2013-03-20 09:01:54

+0

@ user2186703:「如果我正確解釋您的解決方案,這意味着設置ContentProvider」 - 否。具有標識符的數據概念(如數據庫表中的主鍵)已經存在了數十年。由於Android幾十年來一直沒有出現,所以有些方法可以使用標識符來查找數據,而不使用像「ContentProvider」這樣的Android特定結構。所以,通過「標識符」,我指的是數據庫表的鍵,或者你的'HashMap'的鍵,或者CSV表的行號,或者你的'JSON'對象的鍵。 – CommonsWare 2013-03-20 11:56:14

1

您有專用的存儲空間,只有您的應用程序才能讀取。在無根的設備上,您存儲的信息只能在您的應用中使用。

您可以使用SharedPreference來存儲您的數據 - 數據存儲在應用程序的指定專用存儲中。

或者,你可以在那裏直接使用私有存儲設備和電線任意文件是這樣的:

FileOutputStream fos; 
try { 
    fos = openFileOutput (FILENAME, Context.MODE_PRIVATE); 
    fos.write (string.getBytes()); 
    fos.close(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
7

於Android 4.1.1開始加入額外的權限來保護額外就是BEING通過使用第三方應用程序讀取RecentTaskInfo。此權限(android.Manifest.permission.GET_DETAILED_TASKS)只能由系統獲取。沒有此許可,多餘的將在baseIntent通過RecentTaskInfo返回之前被換出。

從提交http://androidxref.com/4.2.2_r1/history/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#8238e717df4bc5eebf15f97172d68af3599a95bb的評論:

添加新的簽名級別的權限來獲得任務的細節。

第三方應用程序現在無法訪問與任務關聯的意圖 的附加內容,以防止其中的私人數據泄漏。

更改ID:I95af9e181ac42557bc8b981807e7ddd266a88d0e

如此看來,努力正在投入製作意圖額外的安全傳輸敏感信息。我不知道是否還有其他的方法可以泄漏這些額外的東西,但是至少額外的東西從JB上可以看出來。

+0

嗯,這當然很酷。我將不得不進一步調查。謝謝! – CommonsWare 2013-03-19 14:27:00