可能的解决方案
我怎样才能使这个过程对攻击者来说更加困难
您的问题的一个可能解决方案是使用移动应用程序证明解决方案来保证在运行时您的移动应用程序没有受到中间人攻击,没有被篡改,没有在有根设备中运行,没有连接到调试器并且没有存在仪表框架。这是通过在后台运行 SDK 来实现的,该 SDK 将与在云中运行的服务进行通信,以证明移动应用程序的完整性和设备正在运行。移动应用程序中的 SDK 不会根据移动应用程序提供的测量结果对应用程序或移动设备的完整性做出任何决定,这是在云服务中完成的。
因此,在成功证明移动应用程序完整性后,云服务会发布短期 JWT 令牌并使用只有云中的 API 服务器和移动应用程序证明服务知道的秘密进行签名。如果移动应用程序证明失败,JWT 令牌会使用 API 服务器不知道的秘密进行签名。
现在,应用程序必须在每个 API 调用中发送请求标头中的 JWT 令牌。这将允许 API 服务器仅在可以验证 JWT 令牌中的签名和过期时间时服务请求,并在验证失败时拒绝它们。
一旦移动应用程序不知道移动应用程序证明服务使用的秘密,即使应用程序被篡改、在有根设备中运行或通过正中间人攻击的目标。
因此,该解决方案适用于没有误报的正检测模型,因此不会阻止合法用户,同时阻止坏人。
有任何想法吗?
您可以尝试推出自己的解决方案,也可以寻找现有的移动应用证明 SAAS 解决方案,例如Approov(我在这里工作),它为多个平台提供 SDK,包括 iOS、Android、React Native 等。集成还需要对 API 服务器代码进行小检查,以验证云服务发布的 JWT 令牌。此检查对于 API 服务器能够决定服务哪些请求和拒绝哪些请求是必要的。
概括
最后,为了保护您的 API 服务器和移动应用程序而使用的解决方案必须根据您要保护的内容的价值以及该类型数据的法律要求(例如欧洲的 GDPR 法规)来选择。
加倍努力
您似乎对移动应用程序安全感兴趣,我想向您推荐:
OWASP 移动安全项目 - 十大风险
OWASP 移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。