Android相当于ios devicecheck

时间:2017-08-31 16:20:46

标签: android cordova

是否有与ios设备检查的android等价物 https://developer.apple.com/documentation/devicecheck 或任何方式来验证这是你的未经过调整的apk进行api调用?

2 个答案:

答案 0 :(得分:3)

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

您希望查看的两个API是证明和验证应用:

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

至于你问题的第二部分,无论你在APP中加入什么,你都应该考虑已经入侵,因为攻击者可以反编译你的APP。您最好专注于正确的服务器端安全性,并限制您的API实际暴露的内容,正确的加密,标记化(如果处理付款信息),以及足够的日志记录来跟踪对您的API的恶意调用。如果你的专业开发人员足够大,可以吸引黑客的注意力,那么就有理由聘请他们。

答案 1 :(得分:2)

问题的第一部分

  

是否存在与ios设备相同的android设备检查https://developer.apple.com/documentation/devicecheck

正如已经指出的,Android的等效项是SafetyNet,但是尽管对安全性进行了很好的改进,但根据Google own statement,该安全性并未被设计为独立的防御系统:

  

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

开发人员在实施SafetyNet解决方案时也要牢记:

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

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

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

  • 由于SafetyNet对OS映像的哈希值进行了全面分析,因此实际上可能会非常慢(有时几秒钟)。这意味着它无法连续进行,并且在使用时需要谨慎以向用户隐藏此延迟,但不会为攻击者提供利用的机会。

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

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

  • 为了以无法欺骗的方式执行证明检查,则应用程序无法执行自己的检查(显然,此代码可能会被自己篡改)。因此,需要实现服务器端以可靠地使用该功能。

问题的第二部分

  

或以任何方式验证这是您进行API调用的未经医生指导的APK?

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

移动应用证明服务的定义

移动应用程序证明服务的作用是,通过使用集成在应用程序中的SDK和在云中运行的服务,在运行时确保您的应用程序未被篡改或未在有根设备中运行。

在成功证明App完整性后,JWT令牌被发行并签名,并且秘密地​​知道您的App的API服务器和云中的Mobile App Attestation服务。

在App证明失败的情况下,将使用API​​服务器不知道的秘密对JWT进行签名。

现在,应用程序必须随每个API一起发送,并在请求的标头中调用JWT令牌。这将使API服务器仅在可以验证JWT令牌中的签名时才处理请求,而在验证失败时拒绝请求。

一旦App不知道Mobile App Attestation服务使用的机密,就无法在运行时对其进行反向工程,即使该App被篡改,在根设备上运行或通过连接进行通信是中间攻击中一个人的目标。这是与SafetyNet解决方案相关的此类服务的亮点。

作为一个旁注,如果您的应用程序直接与第三方服务进行通信,那么我建议您将该职责委托给API服务器,这样可以防止 仅在您服务后,代表您未经授权使用您的第三方服务 现在,来自移动应用的真实请求通过了完整性挑战。

移动应用程序认证服务已经作为Approov上的SAAS解决方案存在(我在这里工作),该服务为包括iOS在内的多个平台提供了SDK。集成还需要在API服务器代码中进行少量检查,以验证由云服务发出的JWT令牌。对于API服务器来说,必须进行此检查才能决定要处理的请求和拒绝的请求。