繁体   English   中英

避免禁用证书固定Android

[英]Avoid disabling certificate pinning Android

我正在开发一个使用证书的限制(以类似的方式,例如Android应用 )。

但是,我遇到了诸如Frida之类的动态工具库,或者更糟的是Objection ,它可以绕过这种保护措施。

我知道必须在服务器端实现安全性,但是,我想在我的API之外继续窥视。 此外,我还理解Java可执行文件易于反汇编和分析。

对于攻击者,我如何使此过程变得更加困难,即发出基本命令(例如objection

android sslpinning disable

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

有任何想法吗?

几个强化框架可能会使Frida和类似工具难以附加和操纵应用程序过程。 但是,只要有足够的时间,动力和/或金钱,您甚至可以打破这些框架。

但是,通常不是“是否使用强化框架”这个问题,而是“您愿意为获得这种额外的保护支付多少钱?

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

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

可能的解决方案

我如何使攻击者更加困难

针对您的问题的可能解决方案是使用移动应用程序证明解决方案,以在运行时保证您的移动应用程序未受到MitM攻击,未被篡改,不在有根设备中运行,未连接到调试器且没有存在检测框架。 这是通过在后台运行SDK来实现的,该SDK将与在云中运行的服务进行通信以证明移动应用和设备正在运行的完整性。 移动应用程序中的SDK不会根据移动应用程序提供的度量标准对应用程序或移动设备的完整性做出任何决定(在云服务中完成)。

因此,在通过云服务成功证明移动应用程序完整性时,将发布并使用一个秘密的短暂生存期的JWT令牌进行签名,该秘密只有云中的API服务器和移动应用程序证明服务才知道。 如果移动应用程序证明失败,那么将使用API​​服务器不知道的秘密对JWT令牌进行签名。

现在,应用程序必须与每个API一起发送,并在请求的标头中调用JWT令牌。 这将允许API服务器仅在它可以验证JWT令牌中的签名和到期时间时才服务请求,而在验证失败时拒绝它们。

一旦移动应用程序不知道移动应用程序证明服务使用的机密,就无法在运行时对其进行反向工程,即使该应用程序被篡改,在有根设备中运行或通过正在作为连接的连接进行通信中间攻击中一名男子的目标。

因此,此解决方案可在没有误报的积极检测模型中工作,因此不会阻止合法用户,同时又阻止了坏人。

有任何想法吗?

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

摘要

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

多走一英里

您似乎对移动应用程序的安全性感兴趣,我是否建议您:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM