iOS应用内购买的攻击保护

33

苹果的iOS应用内购买系统曾被一些人攻击,以欺骗应用程序免费提供内容。他们后来改善了相关系统,试图限制这种情况。

我已经阅读了苹果提供的StoreKit参考文档,并对工作流程、需要进行的检查等有了一个大概的了解。但是,可能存在我不知道的安全问题。

是否有人可以提供针对应用内购买机制可能尝试的所有窃取攻击的完整列表,开发人员可能会错误地允许这些攻击,以及预防它们的最佳实践?

1个回答

74

以下是我所知道的攻击,包括过去和现在:

假应用商店

这种攻击由俄罗斯程序员Alexey Borodin发明,只影响直接通过应用商店验证购买收据的应用。通过修改设备的DNS设置并安装伪造的安全证书,验证请求被发送到一个假的应用商店服务器,该服务器自动返回购买有效。不知情的应用将接受这些验证调用并向用户提供内容。

评论

在2012年7月这个漏洞被公开后,苹果公司发布了更新的文档和建议,以确保这种攻击不会继续发生。根据苹果公司更新的API和最佳实践指南,Borodin在各种网络文章中被引用为表示“游戏结束”。

预防措施

Apple有一整个文档专门介绍这个漏洞here(编辑:链接失效,如果你愿意可以用Wayback...尽管该文档只覆盖了iOS 5.1及以下版本。)他们提出的最大问题是让你的应用程序将收据发送到你拥有的外部服务器,然后让你的服务器与Apple验证收据。但是,如果您直接从应用程序将收据发送到App Store,则建议进行以下检查:
  • 检查用于连接到App Store服务器的SSL证书是否为EV证书。
  • 检查从验证返回的信息是否与SKPayment对象中的信息匹配。
  • 检查收据是否具有有效的签名。
  • 检查新交易是否具有唯一的交易ID。

虚假验证服务器

如果您的应用程序向您的服务器发送交易收据,然后将其转发到App Store,则攻击者有一种选项可以伪造您的验证服务器。通过某种方法(更改DNS表、更改URL等),将收据发送到另一个位置,并返回“成功验证”。通过这种方式,收据永远不会到达您的服务器,您也没有机会与App Store进行检查。
评论:
显然,Cydia商店中有许多应用程序可在后台运行,监视收据流量并重定向它以实现此目的。来源:Hussulinux博客 预防措施:
如果在验证收据后立即提供内容,则没有已知的方法可以防止此类攻击。但是,考虑以下情况:您拥有自己服务器上管理的用户帐户系统。如果应用内购买的目的是通知您的服务器特定用户帐户已购买物品,并且应用从您的服务器下载该物品,则您将免受攻击。将收据重定向到另一个服务器对攻击者毫无意义,因为您的服务器永远不会将用户帐户标记为拥有物品,因为它从未看到收据。
伪造收据
攻击者可以伪造购买过程,然后向您的验证服务器发送伪造的收据。与先前的攻击不同,收据的出站位置没有更改,但被替换为冒名顶替者。这个欺骗性的收据实际上是来自之前的App Store交易的有效收据,App Store将验证其有效性。通过伪造购买过程,然后向您的服务器发送欺骗性的收据,实际上并没有支付内容。
注释

显然有各种Cydia应用程序可以做这样的事情。您可以通过其product_id与您在应用程序中使用的任何内容完全不同来识别虚假收据。 显然,最著名的欺骗性id是com.zeptolab.ctrbonus.superpower1。来源:Hussulinux博客

预防措施

在我发现此攻击的链接中,博主建议您在将收据发送到App Store之前(base64_decode)在验证服务器上拆包收据并检查product_id。 但是,在此文章中,苹果建议您首先将收据发送到App Store,然后读取返回的信息以确保收据有效。

(另外,如果我说错了,请纠正我)但是,即使您没有验证服务器,也可以使用苹果推荐的技术来防止这种攻击。如果您的应用程序直接将收据发送到App Store,则可以检查JSON响应的内容以确保其有效。但是,这违反了苹果推荐的最佳实践,即使用外部验证服务器,因此我不会提倡这样做。

总之

这些是我所知道的攻击方式,如果我有任何错误,请随时纠正或提出其他攻击和解决方案。

请注意,有一个网站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文件相同的目的,甚至更多,但这需要稍微高一些的技能水平。也许设置越狱检测就足以阻止大多数人采取这种行动。

再次强调,本节内容主要是推测,但它可能会对某些人有所帮助。实际上,您拥有的保护级别取决于开发人员愿意走多远(深入安全和加密的兔子洞)来保护他们的底线。


2
非常棒的写作,非常有用。 - philipp
手机是否需要越狱才能进行所有这些攻击?我看到有些攻击可以应用于Mac的应用内购买。是否存在专门针对Mac应用内购买的攻击? - Petr
1
@Petr 我相信DNS重定向和证书伪造攻击需要在iOS 6及更高版本上越狱。是的,看起来有些攻击也可以应用于OSX。我不确定具体是哪些攻击;也许全部都可以。OSX应用商店的收据与iOS收据不同,尽管我不记得细节了。 - Matt Mc
1
如果您使用WiFi而不是无线电,您可以进行DNS重定向而无需越狱。这对于不使用HTTPS的应用程序验证服务器非常有用。 - Jon Watte
苹果公司的防止假应用商店链接已经失效,正确的链接是这个 - Heitor
很好的文章,尽管有一句话引起了我的注意:“检查连接到应用商店服务器的SSL证书是否为EV证书。” 然而,EV证书实际上是一种浪费金钱的做法,尽管证书颁发机构有财务上的理由不同意。它们与OV证书相比并没有提供任何优势。 - Wildcard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接