Android 相当于 ios devicecheck

Posted

技术标签:

【中文标题】Android 相当于 ios devicecheck【英文标题】:Android equivalent of ios devicecheck 【发布时间】:2018-02-09 16:22:30 【问题描述】:

是否有 android 等效的 ios 设备检查 https://developer.apple.com/documentation/devicecheck 或任何方式来验证这是您的未修改的 apk 进行 api 调用?

【问题讨论】:

相关:developer.android.com/training/articles/user-data-ids.html 【参考方案1】:

问题的第一部分

是否有 android 等效的 ios 设备检查https://developer.apple.com/documentation/devicecheck

正如已经指出的,Android 的等价物是 SafetyNet,但尽管它对 Android 安全生态系统进行了很好的改进,但并非旨在用作独立的防御,根据Google own statement:

此 API 的目标是让您对运行您的应用的设备的完整性充满信心。然后,您可以使用标准 Android API 获取其他信号。您应该将 SafetyNet Attestation API 用作反滥用系统的额外深度防御信号,而不是作为应用的唯一反滥用信号。

此外,当开发人员实施 SafetyNet 解决方案时,需要牢记:

它是 Google 移动服务 (GMS) 的一部分,因此只能在具有此功能的设备上运行。在某些市场,例如远东地区,有大量设备没有此功能。

可以使用标准免费 API 密钥进行的证明调用数量有限,因此需要(大概)付费级别的大规模使用。

它主要用于检查特定 Android 设备运行的操作系统映像是否被认为是安全和兼容的。因此,它可以被认为是非常高级的根检查,能够检查指示根设备的文件系统更改。

由于 SafetyNet 正在对操作系统映像的哈希值进行全面分析,因此它实际上可能非常慢(有时需要几秒钟)。这意味着它不能连续运行,并且在使用它时需要小心以向用户隐藏这种延迟,但又不会为攻击者创造可利用的机会。

SafetyNet 并未专门分析正在运行的应用程序的内存映射来检测检测框架(它依赖于它们只能在有根设备上运行的事实),例如 XPosed 和 Frida。

SafetyNet 确实通过 apkDigestSha256 功能提供了正在运行的应用程序的证明。但是,只有在报告了完整的完整性时才能依赖它。这意味着如果应用程序在任何类型的不寻常或有根设备上运行,则该应用程序的完整性是未知的。一些用户仅出于自定义目的而根植他们的设备,如果移动应用程序占很大比例,那么 SafetyNet 会将他们排除在使用该应用程序之外。在这种情况下,我们想具体了解正在运行的应用程序的完整性,而不是整个系统。 SafetyNet 无法做到这一点,但移动应用证明服务可以。

1234563因此,需要实现服务器端以可靠地使用该功能。

问题的第二部分

或以任何方式验证这是您的未修改的 apk 进行 api 调用?

这里的方法是将 SafetyNet 与移动应用证明服务一起使用。如果您的移动应用程序中需要用户身份验证和身份验证,也应该使用 OAUTH2。最后但并非最不重要的是使用证书固定来保护 API 服务器和移动应用程序之间的通信通道,如有关移动 API 技术的文章的this series 中所述。

移动应用证明服务的定义

Mobile App Attestation 服务的作用是通过使用集成在您的应用中的 SDK 和在云中运行的服务,在运行时保证您的应用没有被篡改或没有在有根设备中运行。

成功证明应用程序完整性后,将颁发 JWT 令牌并使用只有您的应用程序的 API 服务器和云中的移动应用程序证明服务知道的密钥进行签名。

如果 App Attestation 失败,JWT 会使用 API 服务器不知道的秘密进行签名。

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

一旦应用不知道移动应用证明服务所使用的秘密,即使应用被篡改、在有根设备中运行或通过不可用的连接进行通信,也无法在运行时对其进行逆向工程。成为中间人攻击的目标。这就是此类服务与 SafetyNet 解决方案相关的优势所在。

附带说明,如果您的应用程序直接与第三方服务通信,那么我建议您将该责任委托给 API 服务器,这将阻止 代表您未经授权使用您的第三方服务,一旦它只提供服务 现在来自移动应用程序的真实请求通过了完整性挑战。

Mobile App Attestation 服务已作为 SAAS 解决方案存在于 Approov(我在此工作),它为包括 iOS 在内的多个平台提供 SDK。集成还需要对 API 服务器代码进行小检查,以验证云服务发布的 JWT 令牌。此检查对于 API 服务器能够决定服务哪些请求和拒绝哪些请求是必要的。

【讨论】:

【参考方案2】:

他们有 SafetyNet - 更全面: https://developer.android.com/training/safetynet/index.html

您要查看的两个 API 是 Attestation 和 Verify Apps:

Attestation API 检查设备的完整性,而 Verify Apps API 检查是否安装了已知的潜在有害应用。为了增加安全保护,您应该在使用验证应用 API 之前使用证明 API 验证设备的完整性。

至于你问题的第二部分,无论你在你的 APP 中烘焙什么,你都应该认为它已经受到攻击,因为攻击者可以反编译你的 APP。您最好专注于适当的服务器端安全性并限制您的 API 实际公开的内容、适当的加密、令牌化(如果处理支付信息)以及足够的日志记录以跟踪对您的 API 的恶意调用。一旦你大到足以吸引黑客的注意力,你就会聘请专业的开发人员是有原因的。

【讨论】:

实际上只检查设备的完整性,并不一定证明是您的应用在进行此 api 调用。 这是一个非此即彼的问题-第一部分已回答-第二部分正如您所指出的,需要您添加额外的代码以验证您的应用程序进行呼叫。绝不是一件容易的事。我已经调整了我的答案以触及这个问题的第二部分。

以上是关于Android 相当于 ios devicecheck的主要内容,如果未能解决你的问题,请参考以下文章

Android 相当于 iOS 的 AVMIDIPlayer?

iOS 中是不是有相当于 Android 旋转矢量的功能?

是否有相当于 android 的音轨的 iOS?

iOS中是不是有任何相当于Android的服务?

Android 相当于 iOS 中的 NSUserDefaults

iOS 相当于 Android 片段/布局