咨询:13529513104

许多流行App都存在隐私数据泄漏的问题,我们在谷歌应用商店中发现了一款名为Camera360的摄影App。该App虽然能够让用户的照片变得十分漂亮,但是在无意之间泄漏了用户的隐私数据:恶意攻击者可以不经过授权就能够访问到Camera360用户的云账户和相册。

在此之前,FireEye研究人员在Camera360以及其他一些主流应用中 发现了SSL漏洞 ,这些漏洞可以使用中间人攻击进行利用,并且其对用户的隐私数据构成严重的威胁。

安卓应用开发者应该提高自己安全意识,为用户提供更安全的移动体验!

概要及简介

Camera360有多种相机拍摄模式,能拍摄出不同风格、不同特效的照片,特效相机里还提供了丰富的特效滤镜,不会PS可轻松拍出大师级照片。它还支持拍后照片的编辑,并且可以把照片分享到微博、微信等主流社交网站。Camera360全球用户近4.5亿,Camera360还提供云服务:用户创建一个云账户后可通过登录cloud.camera360.com进行访问。

Camera360通过验证用户名和密码来保护云,但是当访问云时,Camera360 App将会在安卓系统日志(logcat)以及网络通信中以加密方式泄露用户隐私数据。应用可以读取logcat,或者获取网络通信从而盗取数据。假设恶意攻击者现在与你处在同一WiFi环境,可以使用WiFi sniffing轻松盗取你的数据!

 

泄漏的隐私数据可用于下载该用户除“私密专辑”外的所有照片 ,这个“私密专辑”是用户另外设置的一个密码。

在安卓应用中不能看到这些“私密专辑”照片, 值得一提的是:所有从设备上传到云上的数据默认情况下都是非“私密专辑”,这就意味着:隐私数据泄露后,从设备上传的照片都存在被黑客盗取的风险!

技术细节

我们分析了Camera360最新版本的6.2以及之前的 6.1.2, 6.1.1 和 6.1版本,发现所有版本都存在数据泄漏的问题。

泄漏的数据可以通过下述方法不经授权访问用户照片:

1)使用泄漏的凭证创建一个新的登陆会话,接着从服务器抓取图片的keys,并通过其下载照片。
2)劫持登录会话,使用泄漏的token下载照片
3)使用泄漏的图片keys不通过身份验证直接下载照片

当然,捕获的网络通信中的照片可轻易的提取预览。

下面提供了更多的细节。

创建一个登录会话

Camera 360应用使用HTTPS协议访问服务器,这也意味着敏感的登录数据无法在网络通信数据中轻易读取。在登录过程中,该App会向logcat记录敏感数据(该文件可以通过在设备上运行的其他其他应用读取)

Camera 360记录用户邮箱地址,密码hash以及其他相关数据。这个数据一旦泄露,它就可以创建一个单独的的登录会话。作为登录请求的回应,服务器会返回一个token,用户id以及账户其他信息。这个token和用户id可以从服务器抓取所有非“私密专辑”照片的key。使用这个keys目录下的所有照片你都可以进行下载了!

以下为测试时生成的log信息

 

通过逆向:我们发现它HTTPS登录地址,上述log信息中的数据可以通过这个HTTPS请求来创建一个登录会话。

以下为不带测试参数的URL地址

 

任何App都可读取logcat,盗取其登录数据并创建专属我们自己的登录会话。Logcat可以通过捕获READ_LOGS许可进行读取,在Android 4.0版本及以下所有的应用都可以进行访问,但在Android 4.1 (Jelly Bean)谷歌就开始禁止第三方App使用了。但是在已经root了的设备,应用可以通过提升权限来获取这个许可。

通过逆向我们还发现:密码hash为双MD5。通过字典攻击,攻击者获取原始密码。利用彩虹表或者brute force生成一个字符串与hash值进行匹配。密码破解相当重要,因为hash可以直接用来创建一个登录会话。密码hash以及获取的邮箱地址可以用来登录Camera360应用或者云。

泄漏的token劫持会话

作为应用登录请求的回应,服务器返回一个token,用户id以及账户其他相关信息。Camera 360应用使用这个token和用户id来进行验证。

以下为我们测试账号获取到的服务器返回信息:

 

这个token是一直不变的,即使用户登出之后依旧有效,因为会话变量仅仅只是从客户端进行了删除,而没有在服务端进行删除。因此,无论何时何地使用这个token都可以成功的发送请求。

Camera 360应用在logcat和网络通信数据中泄漏这个token,用户id,app和设备相关信息。任何安卓App都可读取logcat,所有运行网络嗅探器设备或者与目标设备在同一WiFi环境下的设备都可以盗取这些数据。这些泄漏的数据可以用来向服务器发送未经授权的请求,并从云端下载照片。

logcat中泄漏的数据

在登录过程中Camera 360在logcat泄漏的数据,以及用户打开他们的云账户进行操作。

以下为这两种情况收到的log信息的示例:

 

在上述信息中, "uid" 和 "userId"都为相同的用户id,"userToken" 以及 "localkey"的值也是相同的token值

网络通信中泄漏的数据

App通过HTTPS协议发送登录请求,但是在接下来的验证token和用户id却使用HTTP协议。在网络通信数据中这种未加密的数据十分好读取。

下面为获取的HTTP请求:

 

使用token和用户id下载照片

利用泄漏的token,用户id以及应用其他的相关数据,使用下述HTTP请求可以获取用户照片

 

这些HTTP请求可以使用两种不同的方式下载照片,下面我们就来讲一讲:

*抓取照片keys

上面提到的所有HTTP请求都可以用来从服务器抓取照片keys,下面为服务器返回的测试请求:

响应"http://cloud.camera360.com/v2/page/timeline?…."

 

响应"http://cloud.camera360.com/v2/page/getNew?…"

 

 

响应"http://cloud.camera360.com/v2/page/getNew?…"

 

 

绕过网络云登录页面

HTTP GET请求既可以用来抓取照片keys,也可用来用来绕过Camera 360的网络云登陆"https://cloud.camera360.com/login"。在浏览器中执行任何一个请求都可以获取用户登录,因为这些请求中包含了身份验证token。用户在浏览器选项卡中键入其中一个URLs,得到的是一个已经登录的云端首页。

使用泄漏的照片keys进行下载

Camera 360的云相册中可以获取最新的照片keys。其记录了收到的服务器响应logcat信息,下面为详细信息:

 

这些记录的keys可以通过有权限读取logcat的应用来盗取。这些keys是由userID,随后跟着的image id组成,正如前面提到的,可以使用这些keys配合HTTP请求下载照片:

 

这是照片的永久链接,不会过期的。可以不提供凭证或者身份验证的token直接下载照片。

从捕获的通信数据提取照片

从服务器收集的照片,可以从捕获的网络通信数据中提取。这些都没用进行加密,提取操作十分简单

 

小编结语

从应用厂商知道连接服务器使用安全的HTTPS协议,我们还是能够看出厂商是知道安全这个东西的。

这里小编想问了,既然自家是搞移动应用的,难道安卓的logcat 公司没有一个人去注意过?

* 参考来源 FireEye ,译者/鸢尾 转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)


【责任编辑:(Top) 返回页面顶端