苹果的iOS应用内购买系统过去曾遭到一些人的攻击,这些人欺骗应用程序免费提供内容。从那以后,他们改进了相关系统,试图限制这种事情。
我已经通读了苹果提供的StoreKit参考文档,对工作流程和需要完成的检查等有了大致的了解。但是,可能有我不知道的安全问题。
谁能提供一个完整的针对应用内购买机制的盗窃攻击列表,开发者可能会如何错误地允许这些攻击,以及防止它们的最佳实践是什么?这些是我所知道的攻击,过去的和现在的:
Fake App Store
由俄罗斯程序员Alexey Borodin制造,这种攻击只影响直接与App Store验证购买收据的应用程序。通过修改设备的DNS设置,安装伪造的安全证书,将验证请求发送到假冒的App Store服务器,该服务器会自动返回购买有效。毫无戒心的应用程序将接受这些验证调用并将内容传递给用户。
评论
在2012年7月这个漏洞被发现后,苹果公司向开发者发布了更新的文档和建议,以确保这种攻击不会继续发生。根据苹果更新的api和最佳实践指南,Borodin已经在各种网络文章中引用了"游戏结束"的说法。
预防
苹果有一份完整的文件专门针对这个漏洞。(编辑:链接已关闭,如果你想…他们提出的最重要的一点是让你的应用程序将收据发送到你拥有的外部服务器,然后让你的服务器与苹果核实收据。但是,如果你直接将收据从应用程序发送到app Store,他们建议进行以下检查:
- 检查连接App Store服务器的SSL证书是否为EV证书
- 检查从验证返回的信息是否与SKPayment对象中的信息匹配。
- 检查收据是否有有效签名。
- 检查新事务是否具有唯一的事务ID。
伪验证服务器
如果你的应用程序将交易收据发送到你的服务器,然后将它们转发到应用商店,攻击者的一个选择是伪造你的验证服务器。通过某种方法(更改DNS表,更改URL等),收据被发送到另一个位置,并返回"成功验证"。这样,收据就永远不会到达你的服务器,你也永远没有机会在App Store中检查它。
评论
显然,Cydia商店中有各种各样的应用程序可以在后台运行,监控接收流量,并为此目的重定向它。来源:Hussulinux Blog
预防
如果您在验证收据后立即交付内容,则没有已知的方法可以防止这种攻击。但是,考虑以下场景:您有一个在自己的服务器上管理的用户帐户系统。如果应用内购买的目的是通知你的服务器一个特定的用户帐户已经购买了一个项目,应用程序从你的服务器下载该项目,你是免疫的攻击。将收据重定向到另一个服务器对攻击者来说没有任何作用,因为您的服务器永远不会将用户帐户标记为拥有物品,因为它永远不会看到收据。
虚假发票
攻击者可以伪造购买过程,然后向您的验证服务器发送伪造收据。与之前的攻击不同,收据的出站位置没有改变,但它被冒名顶替者取代。事实上,这张伪造的收据是之前App Store交易的有效收据,App Store将对此进行验证。通过伪造购买过程,然后向您的服务器发送虚假收据,内容从未真正付费。
评论
显然有各种各样的Cydia应用程序可以做这种事情。你可以发现假收据,因为它们的product_id
与你在应用程序中使用的任何东西都完全不同。显然,最著名的欺骗id是com.zeptolab.ctrbonus.superpower1
。来源:Hussulinux Blog。
预防
在我发现这个攻击的链接中,博主建议你在验证服务器(base64_decode)上打开收据,并在将收据发送到App Store之前检查product_id
。然而,在本文中,苹果建议你首先将收据发送到App Store,然后阅读返回的信息以确定收据是有效的。
(如果我说错了,请纠正我,但苹果推荐的技术也可以用来防止这种攻击,即使你没有验证服务器。)如果你的应用程序直接将收据发送到app Store,它可以检查JSON响应的内容以确保它是有效的。但这违背了苹果推荐的使用外部验证服务器的最佳做法,所以我不提倡这样做。
在关闭
这些是我所知道的攻击,如果我在任何一点上错了,请随时纠正我,或者提出额外的攻击和修复。
值得注意的是,有一个网站:http://www.in-appstore.com/,它声称允许在iOS 5或越狱的iOS 6设备上免费购买应用程序内的内容,该网站于2013年7月5日开始运行。虽然我不能100%确定他们是如何做到的,但似乎肯定涉及DNS重路由和伪造的安全证书,这意味着伪造的应用程序商店或伪造的验证服务器,这也意味着仍然有应用程序无法抵御这些攻击。
- Apple iOS应用内购买攻击
- 验证应用内购买收据的经验
- 如何检测"IAP破解"? 编辑:
另外
似乎有一两个路过这里的人觉得这篇文章很有用,我很高兴。
关于这个主题可以有更多的信息,可以在其他帖子,书籍中,或者,如果你愿意的话,搜索互联网的底层。这里有几个网站和帖子等等,我想看看,但还没有机会。当我发现有趣的花絮时,我会添加更多链接。
http://www.se7ensins.com/forums/threads/tut-how-to-hack-ios-games-and-apps.701845/http://www.iapphacks.com/
几个直接的收获:不要将玩家的数据存储在一个简单的列表中,除非你希望它被一些青少年编辑。如果玩家能够通过编辑磁盘上的文件而获得金币或类似内容,他们便无需破解你的IAP系统。也许通过加密这些文件,您可以阻止某些攻击者。
根据se7ensins链接,似乎攻击者也可以撬开您的二进制文件并扰乱它,以达到与编辑plist文件相同的目的,甚至更多,但这将需要更高的技能水平。也许设置越狱检测足以阻止大多数人诉诸于此。
同样,这部分主要是推测,但它可能会对某些人有所帮助。实际上,您所拥有的保护级别取决于开发人员愿意走多远(进入安全和加密的兔子洞)来保护他们的底线。