ios - iOS应用内购买的攻击防护

标签 ios security in-app-purchase itunes-store

过去,Apple的iOS应用程序内购买系统遭到过欺骗,诱使应用程序免费为用户提供内容。从那以后,他们改进了所涉及的系统,以试图限制这种事情。

我通读了Apple提供的StoreKit引用文档,并对工作流程和需要完成的检查有一个大致的了解,依此类推。但是,可能存在我不知道的安全问题。

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

最佳答案

这些是我过去和现在意识到的攻击:

伪造的App Store

由俄罗斯程序员Alexey Borodin闻名,此攻击仅影响直接在App Store上验证购买收据的应用程序。通过修改设备的DNS设置并安装伪造的安全证书,验证请求将发送到伪造的App Store服务器,该服务器会自动返 repo 买有效的信息。毫不怀疑的应用程序将接受这些验证调用,并将内容传递给用户。

评论

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

预防

苹果公司有一份完整的文档,专门针对此漏洞here。 (编辑:链接已关闭,如果需要,则为Wayback ...尽管该文档涵盖了iOS 5.1和更早版本。)他们提出的最大点是让您的应用将收据发送到您拥有的外部服务器,然后再将服务器与Apple核对收据。但是,如果您确实将收据直接从应用程序发送到App Store,则他们建议您进行以下检查:

  • 检查用于连接到App Store服务器的SSL证书是否为EV证书。
  • 检查从验证返回的信息是否与SKPayment对象中的信息匹配。
  • 检查收据是否具有有效的签名。
  • 检查新事务是否具有唯一的事务ID。

  • 假验证服务器

    如果您的应用将交易收据发送到服务器,然后将其转发到App Store,则攻击者可以选择一种方法来伪造您的验证服务器。通过某种方法(更改DNS表,更改URL等),将收据发送到备用位置,并返回“成功验证”。通过这种方式,收据永远不会到达您的服务器,您也永远不会有机会在App Store中查看收据。

    评论

    显然,Cydia商店中有多种应用程序可在后台运行,监控收据流量并为此重定向。资料来源:Hussulinux Blog

    预防

    如果您在确认收据后立即交付内容,则没有已知的方法可以防止这种攻击。但是,采用这种情况:您在自己的服务器上管理着一个用户帐户系统。如果“应用内购买”的目的是通知您的服务器特定用户帐户已购买了某个商品,并且该应用从您的服务器下载了该商品,则您可以免受攻击。将收据重定向到另一台服务器不会对攻击者造成任何影响,因为您的服务器将永远不会将用户帐户标记为拥有某项,因为它永远不会看到该收据。

    假收据

    攻击者可以伪造购买过程,然后将伪造的收据发送到您的验证服务器。与以前的攻击不同,收据的出站位置不会更改,但会被冒名顶替者取代。实际上,该欺骗性收据是来自先前App Store交易的有效收据,App Store会对此进行验证。通过伪造购买过程,然后将欺骗性的收据发送到您的服务器,永远不会真正为内容付费。

    评论

    显然,有各种各样的Cydia应用程序可以执行此类操作。您可以发现伪造的收据,因为它们的product_id与您在应用程序中使用的完全不同。显然,最著名的欺骗性ID是com.zeptolab.ctrbonus.superpower1。资料来源:Hussulinux Blog

    预防

    在我发现此攻击的链接中,博客建议您在验证服务器(base64_decode)上打开收据的包装并检查product_id,然后再将收据发送到App Store。但是,在this article中,Apple建议您首先将收据发送到App Store,然后阅读返回的信息以确保收据有效。

    (也可以纠正我,如果我错了,但是即使您没有验证服务器,也可以使用Apple推荐的技术来防止这种攻击。如果您的应用将收据直接发送到App Store,则可以检查JSON响应的内容以确保其有效。但这与Apple建议的使用外部验证服务器的最佳做法背道而驰,因此我不主张这样做。)

    正在关闭

    这些是我所知道的攻击,如果我在任何时候都错了,请随时纠正我,或者提出其他攻击和修复措施。

    值得注意的是,有一个网站:http://www.in-appstore.com/,它声称允许在iOS 5或越狱的iOS 6设备上免费进行应用内购买,并于2013年7月5日启用。我不确定100%肯定他们是如何做到的,它似乎肯定涉及DNS重新路由和伪造的安全证书,这意味着Fake App Store或Fake Verification Server,这还意味着那里仍然存在无法抵御这些攻击的应用程序。

    资源
  • Apple iOS in-app purchase hacking
  • My Experiences With Verifying In-App Purchase Receipts
  • How to detect "IAP Crackers"?

  • 编辑:

    其他

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

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

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

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

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

    同样,本节主要是推测,但可能会对某人有所帮助。确实,您所拥有的保护级别取决于开发人员为保护其底线而愿意付出的努力(降低安全性和加密的极限)。

    关于ios - iOS应用内购买的攻击防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669747/

    相关文章:

    security - 很好理解CSRF的棘手问题

    ios - iTunes Connect应用内购买多个应用

    objective-c - 无法打印从格式化程序返回的 NSDate

    ios - 通过 GPS 提高测量距离的准确性

    php - Silex 安全提供商

    ios - Apple 会允许以这种方式使用 iAP 吗?

    iOS 通过应用内购买添加大量产品

    ios - 使导航 Controller 中所有 View 的 popovercontentsize 保持不变

    ios - 如何使用其IP地址检查本地WiFi网络中的设备是否已连接?

    PHP/MySQL/哈希 : security related type-comparison CTF challenge