From:https://www.fireeye.com/blog/threat-research/2015/08/another_popular_andr.html

0x00 前言


很多流行的Android應用都泄露了隱私數據。我們發現另一款流行的Google Play應用,“Camera 360 Ultimate”,不僅對用戶的照片進行了優化,但也不經意間泄露了隱私數據,可以讓惡意的用戶不經過認證就接觸到用戶Camera 360的云賬戶和照片。

在這個發現之前,FireEye的研究者發現了在Camera 360應用和其他應用中大量使用的SSL協議漏洞。這些漏洞被通過使用中間人攻擊的方法利用,并且對用戶的隱私構成了嚴重的威脅。

Android應用開發者應該采取更對的安全措施來為他們的用戶提供更安全的手機使用體驗。

0x01 概要和介紹


Camera 360是一個流行的照片拍攝和編輯應用。它在世界范圍內有數百萬的用戶。這個應用會為照片的存儲提供免費的云服務。為了使用這些云特色,用戶會創建一個可以通過www.cloud.camera360.com訪問的云賬戶。

云訪問是通過用戶名和密碼來進行限制的。但是當應用訪問暈的時候,它就會通過未加密的形式泄露隱私數據,比如在Android系統日志(logcat)和網絡通信過程中??梢宰x取logcat或者捕獲網絡通信的應用就可以偷取的這個數據。在你的WiFi網絡中的惡意用戶也可以通過WiFi嗅探來偷取這個數據。

泄露的數據可以被用來下載所有用戶的照片,除了在那些用戶隱私相冊中的照片。隱私相冊通常都會使用一個額外的密碼來保護重要的圖像數據。這個應用不會對這些隱私圖像進行操作,并且所有從設備上上傳的圖像都是默認為非隱私的。

0x02 技術細節


我們分析了Camera 360的最新的版本(6.2)以及先前的版本(6.1.2,6.1.1和6.1),然后在所有的這些版本中都發現了數據泄露。

泄露的數據可以被用來通過如下的步驟來對用戶的照片進行未授權訪問:

  • 通過使用泄露的證書來創建新的登錄會話。然后,從服務器獲取到圖像的密鑰并且使用它們來下載圖像。
  • 劫持登錄會話,使用泄露的token來下載圖像
  • 使用泄露的圖像密鑰來下載圖像而不需要認證

并且,捕獲的網絡通信內的圖像可以被很賤的提取和查看。

以下是所有的細節。

0x03 創建一個登錄會話


Camera 360應用使用HTTPS登錄到服務器,這也就意味著敏感的登錄數據不能被輕易的通過網絡通信來獲取到。在登錄的過程中,應用會把隱私數據記錄到logcat上去,而這些數據可以被在同一時間運行在這個設備上的其他應用讀取到。

Camera 360記錄了用戶的Email地址,password hash值和其他相關的一些數據。當這些數據泄露的時候,它們就可以被用來創建一個單獨的登錄會話。作為對登錄請求的回應,服務器會返回一個token、用戶ID和其他的賬戶信息。這個token和用戶ID可以被用來獲取服務器上所有非加密的圖像的密鑰。利用這些密鑰,所有相關的圖像都可以被下載下來。

下圖展示了我們測試過程中生成的日志信息:

通過對這個應用進行逆向分析,我們發現了他的HTTPS登錄URL。在上面提到的日志信息中的數據可以被用來在這個HTTPS請求中創建一個登錄會話。這個不帶參數的URL如下圖所示:

任何可以讀取logcat的應用都可以獲得這些登錄的數據并且創建它們自己的登錄會話。Logcat可以用READ_LOGS權限來讀,而這個權限對所有運行在Android4.0和以下的版本上的應用都是可以得到的。但是自從Android4.1(jelly bean)以后,這個權限不再會被授權給第三方應用。

通過逆向這個應用,我們也可以發現密碼的hash值是原始密碼的雙重MD5并且是unsalted的。攻擊者可以通過使用字典攻擊來獲取原始的密碼,使用彩虹表或者暴力破解來生成一個匹配hash值的字串。破解密碼并不是必須的,只要這個hash值可以被直接用來創建登錄會話。密碼的hash值和竊取到的Email地址可以用來登錄camera 360以及云(管理系統)。

0x04 使用泄露的tokens劫持會話


作為對應用登錄請求的回應,服務器返回一個token、用戶ID和其他賬戶信息。camera 360會在下一個驗證自身的請求中使用這個token和用戶ID。

對我們測試賬戶的服務器響應如下所示:

這個token是不會過期并且是固定的。它會保持有效即使用戶已經登出,因為會話變量只是被在客戶端刪除了而不是服務器端。因此,成功的請求可以在任何時候通過使用這個token來發送。

Camera 360把這些token,以及用戶ID、其他應用和設備相關的數據泄漏到了logcat和網絡通信上。任何可以讀取logcat的Android應用、任何運行在設備上或者在設備的WiFi網絡中的網絡嗅探器都可以偷取到這些數據。這些泄露的數據可以被用來發送未認證的請求給服務器,也可以笑在云端的所有非隱私圖像。

0x05 泄露到logcat的數據


Camera 360會在登錄的過程中和用戶打開云端賬戶相關的活動時泄露數據到logcat。

以下是日志信息的兩個例子:

在上面的信息中,uid和user Id被設置成了相同的用戶ID。token,user token和localkey被設置成了相同的token值。

0x06 泄露到網絡通信中的數據


這個應用使用HTTPS發送登錄請求,但是下一次的請求是通過HTTP發送的,一同發送的還有一個未加密的認證token和user ID。這些未加密的數據可以輕易的從網絡通信中讀到。

一個這種HTTP請求如下所示:

0x07 使用token和user ID來下載照片


泄露的token,user ID和其他應用相關的數據可以通過利用以下任何一種請求來獲得用戶的照片:

這些HTTP請求可以通過兩種方法被用來下載照片,如下所示:

FETCHING IMAGE KEYS

以上提到的任何HTTP請求都可以被用來從服務器上獲得照片的密鑰。服務器對我們測試請求的應答如下:

Response for “http://cloud.camera360.com/v2/page/timeline?….”

Response for “http://cloud.camera360.com/v2/page/getNew?…”

密鑰可以從服務器應答中提取,然后使用以下的HTTP請求來下載相關的圖像:

Bypassing login page of web cloud

被用來獲取圖像密鑰的HTTP請求同樣可以被用來繞過camera 360 云網站的登錄(https://cloud.camera360.com/login)。執行任何的這些請求都會讓用戶登錄到web服務,因為這些請求包含了認證token。用戶被提示去在一個瀏覽器標簽頁中輸入這些URLS,然后就直接登錄到了云網站的主頁。

0x08 使用泄露的照片密鑰下載照片


camera 360的云相冊進程會從服務器上獲取最近的照片(非隱私的照片)來向用戶展示存儲的云照片。它會把接收到的服務器應答記錄到logcat上。一個這樣的信息如下所示:

這些記錄的密鑰可以被那些能夠讀取logcat的應用竊取到。所有的密鑰都由user ID,和一個唯一的照片ID組成。正如上面所提到的,這些密鑰可以被用在以下的HTTP請求中來下載圖像:

這是一個指向照片的固定鏈接,并不會失效。這個鏈接可以被用來在不提供證書或者是認證token的情況下下載照片。

0x09 從捕獲的通信中提取照片


從網絡通信中收集到的這些圖像都是未加密并且可以被輕易就看到的。

0x0a 預防


云應用和Android應用安全需要提高,來預防那些更多的數據泄露和未授權數據訪問。以下是一些思路:

  • 不要在任何的產品中把一些隱私數據記錄到Android system log(logcat)上去
  • 通過使用以下的幾種方法來阻止會話被劫持:
  • 不僅僅把登錄進程加密,還要把涉及到隱私數據的比如token,userID,照片密鑰和照片文件等進行加密
  • 對token設置到期時間戳
  • 當發送一個登出請求時,最好從服務器端刪除掉所有的session variables。不要再次接受以前發布過的token。
  • 服務器可以在每個請求中都改變token的值。這樣就可以限制攻擊者的攻擊。
  • token可以和IP地址綁定,但是對那些使用動態IP地址的用戶可能不是很方便。
  • 指向照片的固定連接應該需要認證,或者讓這個鏈接有時效性。

0x0b 結論


camera 360在網絡通信和Android系統日志中泄露了很多未加密的隱私數據,這會讓用戶的隱私受到威脅。

FireEye Mobile Threat Prevention Platform可以檢測數據泄露和Android應用中已發現的漏洞,并且幫助用戶在和應用分享隱私數據方面做出更好的選擇。

0x0c Reference


http://en.wikipedia.org/wiki/Session_hijacking

http://resources.infosecinstitute.com/session-hijacking-cheat-sheet/

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞