Android 相当于 ios devicecheck

标签 android cordova

是否有相当于 ios 设备检查的 android
https://developer.apple.com/documentation/devicecheck
或者有什么方法可以验证这是您进行 api 调用的未篡改的 apk?

最佳答案

问题第一部分

Is there an android equivalent of ios device check https://developer.apple.com/documentation/devicecheck



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

The goal of this API is to provide you with confidence about the integrity of a device running your app. You can then obtain additional signals using the standard Android APIs. You should use the SafetyNet Attestation API as an additional in-depth defense signal as part of an anti-abuse system, not as the sole anti-abuse signal for your app.



此外,当开发人员实现 SafetyNet 解决方案时,还需要牢记:
  • 它是 Google 移动服务 (GMS) 的一部分,因此只能在具有此功能的设备上运行。在某些市场,例如远东,有大量设备不具备此功能。
  • 可以使用标准的免费 API key 进行的证明调用数量有限,因此要大规模使用(可能)需要付费级别。
  • 它主要用于检查特定 Android 设备运行的操作系统镜像是否被认为是安全和兼容的。因此,它可以被认为是非常先进的根检查,能够检查指示根设备的文件系统更改。
  • 由于 SafetyNet 正在对操作系统镜像的哈希值进行全面分析,因此它实际上可能非常慢(有时需要几秒钟)。这意味着它不能连续运行,并且在使用时需要小心以向用户隐藏此延迟,但又不会为攻击者提供可利用的机会。
  • SafetyNet 没有专门分析正在运行的应用程序的内存映射来检测检测框架(它依赖于它们只能在有 root 权限的设备上运行的事实),例如 XPosed 和 Frida。
  • SafetyNet 确实通过 apkDigestSha256 功能提供了正在运行的应用程序的证明。但是,只有在报告完全完整性的情况下才能依赖这一点。这意味着应用程序的完整性是未知的,如果它运行在任何类型的异常或有 root 权限的设备上。一些用户仅出于自定义目的对他们的设备进行 root,如果移动应用程序中有很大比例的设备,则 SafetyNet 会将他们排除在能够使用该应用程序之外。在这种情况下,我们想特别了解正在运行的应用程序的完整性,而不是整个系统。 SafetyNet 无法做到这一点,但移动应用认证服务可以。
  • 为了以无法被欺骗的方式执行证明检查,应用程序无法进行自己的检查(很明显,此代码可能会被篡改)。因此,需要实现服务器端以可靠地使用该功能。

  • 问题的第二部分

    or any way to verify that this is your undoctored apk making the api call?



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

    移动应用认证服务的定义

    移动应用认证服务的作用是通过使用集成在您的应用中的 SDK 和在云中运行的服务,在运行时保证您的应用没有被篡改或不在有 root 权限的设备中运行。

    成功证明应用程序完整性后,将颁发 JWT token 并使用一个 secret 签名,只有您的应用程序的 API 服务器和云中的移动应用程序证明服务知道。

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

    现在,应用程序必须随每个 API 调用发送请求 header 中的 JWT token 。这将允许 API 服务器仅在它可以验证 JWT token 中的签名时才提供请求,并在验证失败时拒绝它们。

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

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

    移动应用证明服务已作为 SAAS 解决方案存在于 Approov (我在这里工作)为包括 iOS 在内的多个平台提供 SDK。集成还需要对 API 服务器代码进行少量检查,以验证云服务发布的 JWT token 。此检查对于 API 服务器能够决定提供哪些请求以及拒绝哪些请求是必要的。

    关于Android 相当于 ios devicecheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45986067/

    相关文章:

    javascript - Phonegap 添加针点或位置来映射到 map

    javascript - Ionic + Cordova InappBrowser - 输入类型=文件不工作

    java - WebView : Inherit/get the function of Default Browser (Android)

    java - 带有外部相机应用程序的android相机 Intent ,返回原始 Activity ?

    android - as3 android 在 sdcard 上保存远程声音 - 稍后访问?

    javascript - AngularJS 常规查找

    android - Cordova 可选择在安装或 CDN 上加载插件/库 - Android 和 iOS

    javascript - PhoneGap 文件传输在上传到服务器时损坏 .mp3

    java - ListView OnItemClick 事件

    android - 开始虚拟 Activity