苹果的iOS应用内购买系统曾被一些人攻击,以欺骗应用程序免费提供内容。他们后来改善了相关系统,试图限制这种情况。
我已经阅读了苹果提供的StoreKit参考文档,并对工作流程、需要进行的检查等有了一个大概的了解。但是,可能存在我不知道的安全问题。
是否有人可以提供针对应用内购买机制可能尝试的所有窃取攻击的完整列表,开发人员可能会错误地允许这些攻击,以及预防它们的最佳实践?
苹果的iOS应用内购买系统曾被一些人攻击,以欺骗应用程序免费提供内容。他们后来改善了相关系统,试图限制这种情况。
我已经阅读了苹果提供的StoreKit参考文档,并对工作流程、需要进行的检查等有了一个大概的了解。但是,可能存在我不知道的安全问题。
是否有人可以提供针对应用内购买机制可能尝试的所有窃取攻击的完整列表,开发人员可能会错误地允许这些攻击,以及预防它们的最佳实践?
以下是我所知道的攻击,包括过去和现在:
假应用商店
这种攻击由俄罗斯程序员Alexey Borodin发明,只影响直接通过应用商店验证购买收据的应用。通过修改设备的DNS设置并安装伪造的安全证书,验证请求被发送到一个假的应用商店服务器,该服务器自动返回购买有效。不知情的应用将接受这些验证调用并向用户提供内容。
评论
在2012年7月这个漏洞被公开后,苹果公司发布了更新的文档和建议,以确保这种攻击不会继续发生。根据苹果公司更新的API和最佳实践指南,Borodin在各种网络文章中被引用为表示“游戏结束”。
预防措施
Apple有一整个文档专门介绍这个漏洞here。(编辑:链接失效,如果你愿意可以用Wayback...尽管该文档只覆盖了iOS 5.1及以下版本。)他们提出的最大问题是让你的应用程序将收据发送到你拥有的外部服务器,然后让你的服务器与Apple验证收据。但是,如果您直接从应用程序将收据发送到App Store,则建议进行以下检查:虚假验证服务器
如果您的应用程序向您的服务器发送交易收据,然后将其转发到App Store,则攻击者有一种选项可以伪造您的验证服务器。通过某种方法(更改DNS表、更改URL等),将收据发送到另一个位置,并返回“成功验证”。通过这种方式,收据永远不会到达您的服务器,您也没有机会与App Store进行检查。显然有各种Cydia应用程序可以做这样的事情。您可以通过其product_id
与您在应用程序中使用的任何内容完全不同来识别虚假收据。 显然,最著名的欺骗性id是com.zeptolab.ctrbonus.superpower1
。来源:Hussulinux博客。
预防措施
在我发现此攻击的链接中,博主建议您在将收据发送到App Store之前(base64_decode)在验证服务器上拆包收据并检查product_id
。 但是,在此文章中,苹果建议您首先将收据发送到App Store,然后读取返回的信息以确保收据有效。
总之
这些是我所知道的攻击方式,如果我有任何错误,请随时纠正或提出其他攻击和解决方案。
请注意,有一个网站http://www.in-appstore.com/声称可以免费进行应用内购买,无论是在iOS 5上还是在越狱的iOS 6设备上,并且截至2013年7月5日仍然活跃。虽然我不确定他们是如何做到的,但它肯定涉及DNS重定向和伪造的安全证书,这意味着假应用商店或假验证服务器,这还意味着仍然存在未受到这些攻击保护的应用程序。
资源
编辑:
额外信息
看起来有一两个人来到这里并发现这篇文章很有用,我很高兴。
关于这个主题还有更多的信息可以获得,无论是在其他帖子、书籍中,或者如果你有能力的话,搜索互联网的底层。这里只是一些我想要了解但还没有机会的网站、帖子等等。当我找到有趣的信息时,我会添加更多链接。
http://www.se7ensins.com/forums/threads/tut-how-to-hack-ios-games-and-apps.701845/ http://www.iapphacks.com/
几个立即的收获:如果您不希望某些青少年编辑您的数据,请不要将玩家数据存储在简单的plist中。如果他们可以通过编辑磁盘上的文件来给自己增加金币或类似物品,那么人们就不必黑入您的IAP系统了。也许通过加密这些文件,您可以阻止某些攻击者。根据se7ensins链接,攻击者还可以分解您的二进制文件并对其进行操作,以实现与编辑plist文件相同的目的,甚至更多,但这需要稍微高一些的技能水平。也许设置越狱检测就足以阻止大多数人采取这种行动。
再次强调,本节内容主要是推测,但它可能会对某些人有所帮助。实际上,您拥有的保护级别取决于开发人员愿意走多远(深入安全和加密的兔子洞)来保护他们的底线。