32

Apple 的 iOS 应用内购买系统过去曾受到过欺骗应用程序免费为其提供内容的人的攻击。此后,他们改进了所涉及的系统以试图限制这种事情。

我已经阅读了 Apple 提供的 StoreKit 参考文档,并且对工作流程和需要完成的检查等有了大致的了解。但是,可能存在我不知道的安全问题。

任何人都可以提供可以针对应用内购买机制尝试的盗窃攻击的完整列表,开发人员可能如何错误地允许这些攻击,以及防止它们的最佳实践是什么?

4

1 回答 1

73

这些是我所知道的过去和现在的攻击:

假应用商店

由俄罗斯程序员Alexey Borodin出名,这种攻击只影响直接通过 App Store 验证购买收据的应用程序。通过修改设备的 DNS 设置,并安装伪造的安全证书,验证请求被发送到虚假的 App Store 服务器,该服务器自动返回购买有效。毫无戒心的应用程序将接受这些验证调用并将内容交付给用户。

评论

在 2012 年 7 月公开此漏洞后,Apple 为开发人员发布了更新的文档和建议,以确保此类攻击不会继续发生。Borodin 在各种网络文章中被引用为基于 Apple 更新的 API 和最佳实践指南的“游戏结束”。

预防

苹果在这里有一个专门针对这个漏洞的完整文档。 (编辑:链接已关闭,如果您愿意,可以使用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 博客

预防

在我发现此攻击的链接中,博主建议您在验证服务器(base64_decode)上解压收据并检查,product_id然后再将收据发送到 App Store。但是,在这篇文章中, Apple 建议您先将收据发送到 App Store,然后阅读返回的信息以确保收据有效。

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

结束时

这些是我知道的攻击,如果我在任何一点上错了,请随时纠正我或提出额外的攻击和修复。

请注意,有这个网站: http: //www.in-appstore.com/声称允许在 iOS 5 或越狱的 iOS 6 设备上免费进行应用内购买,并且自 7 月 5 日起生效, 2013。虽然我不能 100% 确定他们是如何做到的,但它肯定似乎涉及 DNS 重新路由和伪造的安全证书,这意味着假 App Store 或假验证服务器,这也意味着仍然有应用程序在外面那里没有受到这些攻击的保护。

资源

编辑:

额外的

似乎有一两个人经过这里并发现这篇文章很有用,我很高兴。

有更多关于这个主题的信息,可以在其他帖子、书籍中,或者,如果你愿意的话,可以搜索互联网的底层。这只是我想研究的几个网站和帖子等,但还没有机会。当我发现有趣的花絮时,我会添加更多链接。

http://www.se7ensins.com/forums/threads/tut-how-to-hack-ios-games-and-apps.701845/ http://www.iapphacks.com/

几个直接的要点:不要将玩家的数据存储在一个简单的 plist 中,除非您希望某个青少年对其进行编辑。如果人们可以通过编辑磁盘上的文件给自己金币或类似的东西,他们就不必破解您的 IAP 系统。也许通过加密这些文件,您可以阻止某些攻击者。

根据 se7ensins 链接,似乎攻击者也可以撬开您的二进制文件并对其进行处理,以达到与编辑 plist 文件相同的目的,甚至更多,但这需要稍高的技能水平。也许设置越狱检测就足以阻止大多数会诉诸于此的人。

同样,本节主要是推测,但它可能对某人有所帮助。确实,您拥有的保护级别取决于开发人员愿意走多远(在安全和加密的兔子洞中)以保护他们的底线。

于 2013-07-16T22:05:51.633 回答