避免禁用证书固定安卓



我正在开发一个使用证书固定的Android应用程序(以类似的方式

)。但是,我遇到了动态检测库,例如 Frida,或者更糟糕的是,Objection,它们可以绕过此保护措施。

我知道安全性必须在服务器端实现,但是,我想在我的API之外继续窥探。此外,我也明白Java可执行文件很容易反汇编和分析。

我怎样才能使这个过程对攻击者来说更加困难,即发出基本命令,例如objection

android sslpinning disable

失败并强化我的应用?我已经看到,根据资产的命名,此过程也会崩溃。

有什么想法吗?

一些强化框架可能会使 Frida 和类似工具更难附加和操作应用程序进程。然而,只要有足够的时间、动力和/或金钱,你甚至可以打破这些框架。

然而,通常不是"是否使用强化框架"的问题,而是"你愿意支付多少钱来获得这一点额外的保护?

据我所知,没有免费甚至便宜的强化框架(如果我错了,请纠正我并提供指向那些具有良好保护的免费/廉价解决方案的链接),因此这只是一个问题你想要多少保护以及你愿意支付多少。

注意:Proguard 和 R8 不是强化框架!他们只是稍微混淆了代码,但尤其是在证书固定和通过 Frida 禁用它时,他们不提供任何保护!

可能的解决方案

如何使攻击者更难处理此过程

问题的一个可能解决方案是使用移动应用证明解决方案在运行时保证移动应用未受到 MitM 攻击、未被篡改、未在根设备中运行、未附加到调试器以及不存在检测框架。这是通过在后台运行 SDK 来实现的,该 SDK 将与云中运行的服务通信,以证明移动应用程序和设备正在运行的完整性。移动应用中的 SDK 不会根据移动应用提供的度量值对应用或移动设备的完整性做出任何决策,即在云服务中完成。

因此,在云服务成功证明移动应用完整性时,会颁发一个短时间生存的 JWT 令牌,并使用只有云中的 API 服务器和移动应用证明服务知道的机密进行签名。如果移动应用程序证明失败,JWT 令牌将使用 API 服务器不知道的机密进行签名。

现在,应用必须在每次 API 调用时发送请求标头中的 JWT 令牌。这将允许 API 服务器仅在可以验证 JWT 令牌中的签名和过期时间时为请求提供服务,并在验证失败时拒绝请求。

一旦移动应用证明服务使用的机密不为移动应用所知,就无法在运行时对其进行逆向工程,即使应用被篡改、在 root 设备中运行或通过成为中间人攻击目标的连接进行通信也是如此。

因此,此解决方案适用于没有误报的阳性检测模型,因此不会阻止合法用户,同时阻止坏人。

有什么想法吗?

您可以尝试推出自己的解决方案,也可以寻找现有的移动应用程序证明SAAS解决方案,例如Approov(我在这里工作),它为多个平台提供SDK,包括iOS,Android,React Native等。集成还需要对 API 服务器代码进行小检查,以验证云服务颁发的 JWT 令牌。此检查对于 API 服务器能够决定要处理哪些请求以及拒绝哪些请求是必要的。

总结

最后,为了保护您的API服务器和移动应用程序而使用的解决方案必须根据您要保护的价值以及此类数据的法律要求(例如欧洲的GDPR法规)来选择。

加倍努力

您似乎喜欢移动应用程序安全,我想推荐您:

OWASP 移动安全项目 - 十大风险

OWASP移动安全项目是一个集中式资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。

相关内容

  • 没有找到相关文章

最新更新