虽然你使用了SSL,但是“通常很容易”黑掉移动应用程序(我现在想的是Android:反编译应用程序,更改清单以允许自定义SSL,重新编译并通过SSL代理嗅探所有请求)。
在这些请求中,我发现了很多认证密钥,我可以在控制台中使用这些密钥模拟应用程序进行其他调用,而且没有任何问题。
所以,现在我已经黑掉了一些移动应用程序中的API,我的问题是:有没有办法在移动应用程序中保护API?
我想知道一个安全化层是否可以限制每个“密钥”的请求次数。
我错了吗?我漏掉了什么吗?这是一个愚蠢的问题吗?
如果您所说的在这些请求中,我发现了许多可以在控制台中使用的auth密钥,模拟应用程序而没有任何问题。
auth keys
是通过用户登录提供的,则它们只是标识请求中的谁。api-keys
、access-tokens
或任何用于命名它们的约定,它们的目的是为API服务器提供一种机制,仅授权来自真正移动应用程序的请求。它们确实试图允许API服务器识别请求的内容,并且正如您已经发现的那样,使用代理很容易提取它们:
因此,最终攻击者所需的就是使用代理来学习API服务器的工作方式,以及模拟API调用所需的内容,就像是从移动应用程序本身完成的一样。虽然您使用了SSL,但黑客通常可以轻松地攻击移动应用程序(我现在考虑的是Android:反编译应用程序,更改清单以允许自定义SSL,重新编译,然后通过SSL代理嗅探所有请求)。
因此,现在我已经黑进了一些移动应用程序的API,我的问题是:有没有办法在移动应用程序中保护API?
您可以使用移动硬化和屏蔽解决方案,尝试防止移动应用在被篡改/Root设备、修改/篡改应用程序和/或运行时使用某些仪器框架时工作,但它们都有缺点,即所有这些决策都在移动应用中执行,因此容易受到已经存在的仪器框架的操纵或完全绕过,其中一个很好的例子是Frida:
将自己的脚本注入黑盒进程。钩住任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,保存,立即查看结果。所有这些都不需要编译步骤或程序重新启动。
虽然使用应用内解决方案比不使用任何东西要好,但仍不是理想的解决方案,因为决定如何处理的控制权在客户端而不是服务器端,因此攻击者可以借助Frida在运行时内省代码并学习如何模仿移动应用。
现在您已经了解了访问 API 服务器的谁与什么的区别,也知道攻击者可以学习如何冒充您真正的移动应用程序,因此您可能想去阅读我的文章,了解有关基本技术以保护 API 的内容:
在本文中,我们将探讨最常用的保护 API 的技术,包括使用 HTTPS 保护移动应用程序和 API 之间的通信通道的重要性,使用 API 密钥识别每个 API 请求中的移动应用程序的方法,如何使用用户代理、验证码和 IP 地址进行机器人缓解,以及用户身份验证对移动安全性和 API 安全性的重要性。我们将讨论每种技术,并讨论它们对业务风险概况的影响,即它们的绕过难度。
这只是大多数 API 可能已经采用的一种非常基本的技术,但是它们可以通过一些更高级的技术加以强化。
你可以开始阅读这一系列关于移动API安全技术的文章,了解如何使用API密钥、HMAC、OAUTH和证书固定来增强安全性,同时学习它们如何被滥用/击败。
之后,根据你的预算和资源,你可以采用各种不同的方法和技术来保护你的API服务器,我将开始列举一些最常见的方法。
你可以从reCaptcha V3开始,然后是Web应用程序防火墙(WAF),最后如果你负担得起,可以考虑使用用户行为分析(UBA)解决方案。
谷歌reCAPTCHA V3:
reCAPTCHA是一项免费服务,可保护您的网站免受垃圾邮件和滥用。reCAPTCHA使用先进的风险分析引擎和自适应挑战,防止自动化软件在您的网站上从事滥用活动,同时让您的有效用户轻松通过。这种方法使得 API 密钥容易被攻击者通过代理拦截(红线)来提取,就像你已经注意到的那样,使用代理拦截它们。
更好的方法是这样的:
等一下,但是我在移动应用程序中没有看到任何API密钥:
我错过了什么吗?
是的,需要一个移动应用程序认证解决方案。
如果您想处于不需要在移动应用程序中发布任何机密信息的位置,则需要采用移动应用程序认证概念。从this article section中,我将引用相关部分来解释其作用:
移动应用程序认证服务的作用是验证请求的发送者,因此只响应来自真实移动应用程序实例的请求,并拒绝来自未经授权的来源的所有其他请求。我不能没有推荐OWASP基金会所做的出色工作。
移动安全测试指南(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。