我们正在构建一个非常小的API,用于接收获胜的竞赛条目以实现奖品。我们收到的数据是:
- 帐户ID(成员知道他们的帐户ID)
- 奖品ID
- 地址
- 同意
- 日期
这是问题。。。如果有人剖析移动应用程序,理论上他们可以找到奖品ID、帐户ID,并将虚构的获奖条目提交到我们的API。
提交的材料来自一个移动应用程序。因此,我们不能将API限制为特定的IP地址或任何内容。
我不是在开发真正的应用程序,只是API。API可能会使用PHP进行编程。
有没有办法防止有人提交虚构的参赛作品?
注:
我发现有人问过类似的问题,但他们大多没有一个可靠的答案,或者他们是几年前问过的。我想知道自从他们被回答后是否有什么变化。
我们有一个解决方案,但它需要来自应用程序服务器的第二个API调用。我希望有一个更简单的解决方案。
编辑1:用户登录了他们的应用程序,但我们收到的唯一数据是他们的会员ID。
编辑2:我真的不知道是什么决定了获胜者。我没有开发应用程序的这一部分。我希望它不是在客户端完成的。
无论你做什么,它都是可伪造的。你所能做的就是用电子邮件和密码对用户进行身份验证,但据我所知,这是注册过程,任何人都可以注册。你所能做的就是添加一个captcha,这样他们就会手动注册,而不是至少自动注册。您可以向应用程序添加API密钥,但很容易从HTTP请求中窃取。你可以在应用程序中添加一个私钥来签署每个请求,并提供一些防止重放攻击的保护,窃取私钥会有点困难,但通过分析应用程序是可能的。所以你可以让它变得更难一点,但这是一个安全问题,而不是技术问题,没有好的解决方案。你需要检查风险,当他们这样做时会发生什么,后果是什么,有没有其他方法来检测它,有没有变通方法,例如个人注册,或只注册FB帐户,等等。
您的问题
如果有人剖析移动应用程序,理论上他们可以找到奖品ID、帐户ID,并将虚构的获奖条目提交到我们的API。
反向工程移动应用程序并不难,因为现在有很多开源工具可以为我们自动化这一点,即使是非开发人员也可以做到。你可以通过下面我写的一篇文章中的例子来了解这是多么容易,这篇文章展示了如何使用静态二进制分析从移动应用程序中提取API密钥:
可用于反向工程的开源工具范围很大,我们在本文中确实无法触及这个主题的表面,但我们将重点使用移动安全框架(MobSF)来演示如何对我们的移动应用程序的APK进行反向工程。MobSF是一个开源工具的集合,它们在一个有吸引力的仪表板中显示结果,但MobSF和其他地方使用的相同工具可以单独使用,以实现相同的结果。
在本文中,我们将使用Android隐藏秘密研究存储库,这是一个伪移动应用程序,使用多种不同的技术隐藏API密钥。
使用MobSF框架对移动应用程序进行反向工程,识别出所有获奖ID后,就有时间执行MitM攻击,以了解API请求是如何发出的。MitM攻击也很容易执行,你可以从阅读我的文章中学习如何使用中间人攻击窃取Api密钥:
为了帮助演示如何窃取API密钥,我在Github中构建并发布了适用于Android的Currency Converter Demo应用程序,该应用程序使用了与我们在早期的Android Hide Secrets应用程序中使用的相同的JNI/NDK技术来隐藏API密钥。
因此,在本文中,您将学习如何设置和运行MitM攻击,以拦截您控制的移动设备中的https流量,从而窃取API密钥。最后,您将从高层次了解如何减轻MitM攻击。
现在您了解了奖品id、移动应用程序如何处理API请求以及响应看起来如何,使用脚本可以轻松复制和自动化此类请求。事实上,mitmproxy和所有其他工具允许您保存API请求,以便以后复制它们。
单凭用户身份验证不足以解决您防止将虚构的获胜条目提交到API后端的问题,因为它只会告诉谁在向API后端发出的请求中,但您的后端也需要有高度的信心正在做的API请求确实是上传到Android和iOS应用商店的移动应用程序的真实和未修改的实例。在文章中,为什么你的移动应用程序需要Api密钥?您可以更详细地阅读谁和什么正在访问您的API服务器:之间的差异
what是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是机器人程序、自动脚本或攻击者用Postman这样的工具手动在你的API服务器上戳来戳去?
谁是移动应用程序的用户,我们可以通过多种方式对其进行身份验证、授权和识别,例如使用OpenID Connect或OAUTH2流。
因此,请考虑谁作为用户,您的API服务器将能够对数据进行身份验证和授权访问,并考虑what是代表用户发出请求的软件。
在你理解了这个想法并在你的心态中根深蒂固后,你将从另一个角度审视移动API安全,你将能够看到你从未想过可能存在的攻击表面。
可能的解决方案
有没有办法阻止某人提交虚构的参赛作品?
这并不容易,但有可能在高度自信的情况下实现。成功的程度将取决于您从阅读我对问题的回答中决定采用的解决方案如何确保移动应用程序的API REST,尤其是加强和屏蔽移动应用程序、保护API服务器和可能的更好解决方案部分。
移动应用程序验证是一种解决方案,它将为您的API服务器提供最高程度的信任,即API请求来自它所期望的,一个真实且未经修改的移动应用程序,一个未受攻击或已被篡改的应用程序。
我知道你可能无法控制,但无论采用何种安全解决方案,最好不要让移动应用程序决定获奖者,因为在客户端运行的任何东西都可能在运行时被篡改,包括业务逻辑。在运行时篡改移动应用程序的最佳工具之一是Frida:
将您自己的脚本注入黑盒进程。挂钩任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都没有编译步骤或程序重新启动。
你想多走一英里吗
在回答安全问题时,我总是喜欢引用OWASP基金会的出色工作。
对于APIS
OWASP API安全前10名
OWASP API安全项目旨在通过强调不安全API中的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API安全项目将创建并维护API十大安全风险文档,以及创建或评估API时最佳实践的文档门户。
适用于移动应用程序
OWASP移动安全项目-十大风险
OWASP移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。
OWASP-移动安全测试指南:
《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。