SafetyNet Attestation API 可以帮你评估你的App 运行的Android 环境的安全性和兼容性。自2015年3月发布以来,许多开发者已经成功地把SafetyNet Attestation API 整合到他们的Android app中,以便根据运行App 的设备的完整性和兼容性做出更明智的决策。
发布至今,SafetyNet Attestation API 已经有了很大的进步,它的适用性也逐步增强。然而与任何安全/反滥用API 一样,SafetyNet Attestation API 也有许多常见的缺陷,这些缺陷可能导致开发人员开发不稳定的系统,更糟糕的是,这可能让开发者有一种虚假的安全感。
在本篇文章中,我们为你提供了一个列表,包含了我们所了解的开发者在整合SafetyNet Attestation API 时最常见的错误。
像其他Google API 一样,使用SafetyNet Attestation API 同样要求API key。此外,SafetyNet Attestation API 有一个密钥使用限额。尽管你可以提高这个限额,你也需要提供你的API key来提高限额。
获取API key 很容易并且是免费的。所以你没有任何理由不获取API key,如果你还没有获取API key ,现在去获取一个API key 吧。
SafetyNet Attestation API 发布至今已经有了进化,进化的同时有一些接口也发生了变化。最近随着Google Play 服务11.0.0 的发布,我们改进了整个SafetyNet API 来为开发者提供更精简易用的接口:新的API 使用SafetyNetClient ,而之前的SafetyNetApi 已经被弃用了。所以请确保更新开发工具来使用最新版本的API。
大多数设备已经安装了最新的Google Play 服务,但是如果一个
设备没有安装Google Play 服务,或者没有升级到最新的服务。那么使用SafetyNet Attestation API 可能会使得你的App 变得无响应或崩溃。你可以在使用API 前检查设备是否安装了最新的Google Play 服务,以此来防止应用使用API 时出现问题。
其它翻译版本 (1) 加载中SafetyNet Attestation API可以让你为每一个对API的调用,设置一个唯一的也是全局的nonce以用于标识。使用这个功能来阻止恶意用户重复利用一次成功的认证结果而非失败的结果(这也被成为重放攻击)。
创建nonce的一个好的方法是在你的使用了安全加密随机功能的服务器上创建一个大的随机数(16字节或更长)。SafetyNet认证响应包含你所设置的nonce,这样可以确保校验返回来的nonce能够匹配你所请求中的。
4.和执行这些信号不检查您的服务器上的结果
SafetyNet可以提供有关您的应用程序运行的设备状态的有用信号。但是,如果只在设备上直接执行的逻辑,攻击者可以修改应用程序并绕过执行的任何检查。
为防止出现这种情况,您应该运行任何验证证明结果的逻辑,并在您控制和信任的服务器上强制执行基于它们的任何操作。
5.为生产环境使用检验认证服务
为了简化SafetyNet认证API的开发和测试,Google提供在线验证服务,使用简单的HTTPS请求检查SafetyNet认证结果的数字签名。
这个服务看起来很有用,它只是为了测试目的而设计的,它有非常严格的使用限额,不会根据要求增加。 相反,您应该以不依赖于Google服务器的方式在您的服务器上实施数字签名验证逻辑。 大多数JWT库都提供签名验证功能,我们有代码示例,展示如何在Java和C#中执行此验证。 我们计划在未来提供更多语言的样本。
6.不检查随机数,时间戳,APK名称和散列值
SafetyNet认证API的完整性和兼容性最为人所知,其结果在ctsProfileMatch和basicIntegrity中返回。 虽然这两个值确实非常有用,但您应该检查响应中的其他值,因为它们也包含重要的信息。
如上所述,使用nonce来匹配对请求的响应,并使用timestampMs来检查发出请求之后已经过了多少时间,并获得响应。 在请求后几小时或几天到达的延迟响应可能表明活动出错。
使用apkPackageName检查发出认证请求的APK的名称,并将apkDigestSha256和apkCertificateDigestSha256与Google Play中应用的已签名APK相匹配,以获取有关已安装应用完整性的信号。
请记住,整个响应的可信度与ctsProfileMatch和basicIntegrity的结果相关联。 如果一个设备被攻破,那么basicIntegrity就会在响应中伪造其余的值,这是不可想象的。
7.不理解ctsProfileMatch和basicIntegrity之间的差异
SafetyNet认证API最初提供了一个名为basicIntegrity的值,以帮助开发人员确定设备的完整性。 随着API的发展,我们引入了一个新的,更严格的检查,其结果显示在一个名为ctsProfileMatch的值中,它允许开发人员更好地评估其应用程序正在运行的设备。
从广义上讲,basicIntegrity为您提供有关设备及其API的一般完整性的信号。 被root的设备的basicIntegrity会失效,仿真器,虚拟设备和具有篡改迹象的设备(如API hooks)也会失败。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务