移动云存储服务平台Parse下的iOS安全分析

Parse:专为移动应用提供后台服务的云平台

Parse是由 YC 孵化出来的、专为移动应用提供后台服务的云计算平台,为开发者包办繁琐的后台服务,让开发者只需专注于具体的开发工作。它提供任意数据保存、照片或其它文件存储、发送推送通知、创建用户帐号、使用地理位置数据、添加 Facebook/Twitter 帐号登陆等等服务。

Parse向移动端开发者提供了许多实用的功能,比如云数据存储,推送通知,使用情况报告,崩溃日志统计,代码托管,后台作业以及其他一些功能。相对于提供的这些功能来说,本文比较在意的是云计算的核心,云数据存储。

所有的云数据都是存储在所谓的定制类目中(普通的数据类表)

或许正是Parse这种简单的产品体验,让开发者遗忘了安全问题以及漏洞。

Parse安全性分析

你可以给这些类目设置不同的客户端权限:GET, FIND, UPDATE, CREATE, DELETE ,ADD FIELDS。在默认情况下所有都是公开的。当然,大多数开发者在配置表的时候往往都忽视了这一点。

我在Parse平台上有一个项目,在配置AOLs上面花费了大量时间,所以我十分感兴趣其他开发者是如何配置他们在Parse上的账户的。

有一对密钥是用来连接Parse账户与手机应用:Application ID 和 Client Key. 为了对云数据进行操作,我们必须找到这些密钥。这就让我们使用idb(一款令人惊艳的IOS渗透测试程序)[https://github.com/dmayer/idb]---破解应用的二进制文件吧。在解密过程中,我们可以检查下NSUserDefaults(一个常见的存储这些数据的地方)

正如你看到的,没有任何收获。让我们回到破解应用二进制文件的地方,使用Hopper(一款反汇编软件)我们将从一个应用中寻找到Parse的密钥

正如我们之前预料的,连接Parse的密钥就在这里。接下来我们将分析Parse数据结构以及客户权限。

下一步就是识别Parse的表名。实际上,我们在前面那张截图中就已经找到ClientKey了,这里有想当多的registerSubclass函数调用。每个类都有一个parseClassName函数用来返回一个对应的Parse表名。

我们这就来看看这些表的结构吧:

PFQuery *query =[PFQuery queryWithClassName:@"ParseClassName"];
[queryfindObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    NSLog(@"%@", objects);
}];

我们尝试获取访问许可,确定如何影响应用的运行状况。需要我们做的是向Parse提交一个查询,并分析其返回结果。为此,我写了一个小工具 ParseRevealer[https://github.com/igrekde/ParseRevealer]简化了一些操作,使得整个过程更加的方便快捷。

从权限列表中我们可以得知,开发者尝试将产品做的更安全,但是这点还是不够。这里就展示一下我们可以实现操纵的ChatMessage类。

一个十分危险的漏洞是攻击者可任意修改聊天内容:

PFQuery *query = [PFQuery queryWithClassName:@"ChatMessage"];
[query whereKey:@"message" equalTo:@"Привет, Хабр!"];
 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    PFObject *object = [objects firstObject];
    object[@"message"] = @"Хабр, я тебя ненавижу!";
   
    [object saveInBackground];
}];

更严重的漏洞在于错误的数据映射算法,造成可以遍历所有聊天信息。由于,不填写发件人字段,应用就会崩溃。如果发送一个无效的聊天信息,当有人打开聊天窗口的时候就会崩溃。

何为业界良心

当你发现你安装的应用存在这些问题,不要责怪Parse,它仅仅是为开发者节约了后端开发的成本,一切的一切都全凭开发者的良心!

[参考来源infosecinstitute,翻译/鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

升级IOS8游戏上传自定义头像功能失效的问题

为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了。

9820
来自专栏杨建荣的学习笔记

Oracle和MySQL的高可用方案对比(一)

关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说。通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识。O...

49170
来自专栏Vamei实验室

树莓派:光阴的故事

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

13320
来自专栏CSDN技术头条

常用物联网应用协议汇总

本文罗列下市面上物联网通信中的各类消息技术-即工作在网络通信的应用层协议,总结下它们各自特点、特定的物联网应用场景等。 这类协议都直接用于在无线或有线网络环境下...

40390
来自专栏FreeBuf

PRMitM:一种可重置账号密码的中间人攻击,双因素认证也无效

在今年的IEEE研讨会上,来自以色列管理学术研究学院的研究人员展示了一种新的攻击方法。这种攻击方法被命名为PRMitM,意为“密码重置中间人攻击(Passwor...

32950
来自专栏coding

程序员如何优雅使用mac

在折腾windows和linux一段时间内,饱经各种摧残的我,虽然掌握了一些不为人知的黑科技,终于对此感到厌倦,转投mac阵营。入手了2017款的Apple M...

22720
来自专栏张叔叔讲互联网

当妈妈在淘宝购物的时候,都发生了什么?(上篇)

网络购物已经成为了一种生活习惯,而每个家庭里面最爱网络购物的应该是你妈妈或者你姐姐吧。当他们通过电脑或者手机访问淘宝的时候,到底中间发生了什么事情呢?今天张叔叔...

12710
来自专栏知晓程序

小程序无法联网,发生什么事了?| 小程序问答 #6

13620
来自专栏木子昭的博客

用Python3薅"百度翻译"的羊毛

最近博主在https://unsplash.com搜索免费可商用图片的时候, 发现...

29930
来自专栏大内老A

WCF技术剖析(卷1)之前言

第一次邂逅WCF是在微软举办的一场关于Windows Vista技术推广培训上,时间大概是2005年10月份,当时对WCF可谓是一见钟情。如果读者也像我一样,之...

22990

扫码关注云+社区

领取腾讯云代金券