数据库连接的Java字符串密码

8yoxcaq7  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(140)

最近我们添加了一个工具来查找组织中的安全漏洞。发现的一个问题是,当连接到数据库时(例如使用光),我们必须提供一个包含密码的字符串(当然是加密的,在使用时会被解密)。
现在,将密码保存在字符串中是不安全的,因为它可以被提取,直到垃圾收集器来清除它。
所以我们开始修改代码,使用char []和byte [](不确定这是不是最好的,但我们可以在使用后清除数组,而不是等待垃圾收集器为我们清除它)来设置Hikari上的密码,但流程的最后一部分是为Hikari设置一个未加密的密码String。
所以我应该修改Hikari代码并将其重新编译为我们自己的Hikari组织实现(使用char []中的密码)吗?还是什么?
我们怎样才能避免这种情况?

9bfwbjaz

9bfwbjaz1#

现在,将密码保存在字符串中是不安全的,因为它可以被提取,直到垃圾收集器来清除它。
只有当某人有足够的访问权限来捕获内存(或磁盘上的交换空间)中的内容时,如果某人能做到这一点,他们可能 * 还 * 做 * 以下一项或多项 *:

  • 在字节码级别修改应用程序以注入代码来捕获秘密
  • 附加调试器并使用它在使用密码的位置设置断点
  • 从文件系统、数据库等读取机密
  • 找到服务器SSL证书的私钥,并使用它窥探到服务器的HTTPS流量,
  • 带着硬盘等走出机房,然后在他们空闲时攻击他们
  • 等等。

花费大量精力使用char[]来处理密码不会解决任何其他窃取机密的方法。
而且它也不会解决其他各种安全错误......比如有漏洞的防火墙、保存到云中的未加密备份、被盗devops笔记本电脑上的密钥、成功的鱼叉式网络钓鱼等。
所以我应该修改Hikari代码并将其重新编译为我们自己的Hikari组织实现(使用char []中的密码)吗?还是什么?
如果你想解决这个攻击媒介,你就必须这么做。永远不要在String对象中保存密码,并确保尽快清除char[]byte[]或任何保存密码的对象。
你"应该"这么做吗?耸耸肩。
我的建议是做一个全面的安全风险评估,审视所有问题,并决定解决这个问题是否会对 * 整体 * 安全产生重大影响。在创建和维护Hikari补丁的成本之间进行权衡。另一方面,量化如果(这些)密码被盗,贵组织的成本。
但这不是由我们来决定你应该做什么,甚至不可能给你一个客观的建议,因为我们不了解整个背景。

相关问题