你的 Android Keystore 认证有多安全?(上)

本文深入探讨了Android Keystore系统,用于安全存储密钥并增强本地认证的安全性。讨论了Keystore的原理、作用,如程序升级、模块化开发等,并指出其在实现安全身份验证时的困难。文章揭示了Android Keystore的一些常见漏洞,如不安全的密钥存储类型、弱加密算法,并提供了Frida审计脚本来加速Keystore审核。强调了正确配置Keystore以防止攻击的重要性,特别是设置`setUserAuthenticationRequired()`和`setUserAuthenticationValidityDurationSeconds()`的必要性。
摘要由CSDN通过智能技术生成

引言

拥有特权的恶意软件或者可以实际访问安卓设备的攻击者是一个难以防范的攻击向量。 在这种情况下,你的应用程序如何保持安全性?

本文将讨论 Android keystore 机制以及在尝试实现安全本地身份验证时遇到的困难。 通过提供对 AndroidKeystore 的介绍,你将能够理解与密钥存储库相关的常见漏洞。 本文的核心将重点介绍可用于审计应用程序的本地身份验证的开发工具。 最后将提供关于安全实现的一般指导,并介绍一个可作为参考的应用程序。

Keystore 简介

Android Keystore 是一个允许开发人员在容器中创建和存储密钥的系统,这使得从设备中提取密钥变得更加困难。 这些密钥存储在专门的硬件中,即所谓的可信执行环境。 密钥可以在其内部生成,甚至操作系统本身也不应该直接访问这个安全内存。 Android Keystore 提供 API 来在这个受信任的环境中执行加密操作并接收结果。 它是在 API 18(Android 4.3)中引入的。 一个支持保险箱的 Android Keystore 是目前最安全和推荐的密钥存储类型。

利用 Android 密钥库系统,你可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度。在密钥进入密钥库后,可以将它们用于加密操作,而密钥材料仍不可导出。此外,奇热它提供了密钥使用的时间和方式限制措施,例如要求进行用户身份验证才能使用密钥,或者限制为只能在某些加密模式中使用。

keyStore有什么作用?

· 程序升级
新旧版本的数字证书相同时 Android系统才会认为这是同一程序的不同版本 如果数字证书不同 会 产生冲突 要求更改包名

· 程序的模块化和开发
拥有同一签名的程序可以运行在同一进程中 可以分模块开发 用户在需要的时候下载对应的模块

· 多个程序间共享数据和代码
Android 提供了基于数字证书的权限赋予机制 如果某个权限(permission)的protectionLevel是signature 则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。

密钥库系统并不是让程序直接进行存储程序的私密信息的,比如说用户账号密码,其提供了一个密钥安全容器,保护密钥材料免遭未经授权的使用,一个应用程序可以在密钥库中存储多个密钥并且只允许应用自身访问,应用程序可以在密钥库系统中生成,存储,获取存储其中的公钥或者私钥,因此可使用密钥库系统中的密钥来进行数据的加密。

密钥库系统由 KeyChain API 以及在 Android 4.3(API 级别 18)中引入的 Android 密钥库提供程序功能使用。

Android Keystore 支持7种不同类型的密钥存储机制,每种机制各有优缺点。 例如,Android Keystore 使用硬件芯片以安全的方式存储密钥,而 Bouncy Castle Keystore (BKS)是一个软件密钥存储库,并使用放置在文件系统上的加密文件。 Android 文档提供了许多对开发人员有用的代码示例,但是在描述其 keystore 机制时有些令人困惑和费解。 这导致了很多开发人员头疼的问题。 在许多与 keystore 相关的类中,Android 文档通常直接取自 Java 文档。 在没有找到一个简洁明了的解释和一个开发安全本地身份验证的解决方案之后,开发人员搜索到了 StackOverflow,直接复制和粘贴代码,这些代码不安全,可以很容易地用一些 Frida 脚本绕过。 支离破碎的 Android 生态系统也使得使用 keystore 成为一种不愉快的体验,因为需要执行多个兼容性检查,并且需要实现各种代码路径以支持各种设备。

让我们看看下面的截图。 左边是 Android 文档,右边是 Java 文档。

你的 Android Keystore 认证有多安全?(上)

AndroidKeystore 实现不支持解锁密钥存储库或其特定条目的密码。 文档中显示的代码片段将引发异常。 上面的截图显示 Android 文档中的关于 AndroidKeystore 实现的知识来源并不是100% 的可靠。 由于 Andro

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值