如何保护配置文件中的敏感信息,比如数据库密码

2022-02-28 16:28:25 +08:00
 cppc

我们产品部署在甲方数据中心,同事(以下简称 A,算是项目经理)反馈甲方要求不得保存明文敏感信息:

我提出方案有

  1. 数据加密: 配置文件中的敏感信息加密保存,解密密钥保存在配置文件中。A 的意见:加密密钥也属于密码、密钥。
  2. 用管分离: 使用密码库,配置中心之类的基础设施,我们拉取配置信息。A 的意见: 连接配置中心需要用户名 /口令,也是密码;配置中心连数据库需要数据密码,也是密码。

我不确定是 A 自己没有理解需求,还是甲方确实这么提出,这不就无限套娃么。

我们的客户是金融行业,请问这方面有无具体的技术规范?如果我的方案可行,要怎么样才具有说服力呢?

PS: A 坚持认为自己已经跟甲方沟通好了,不愿意再去询问具体要求

8008 次点击
所在节点    信息安全
76 条回复
ysc3839
2022-02-28 21:41:07 +08:00
@cppc 硬件加解密有标准接口的,比如 OpenPGP Card 或者 PIV Card ,大多数操作系统都内置驱动程序,没想象中那么麻烦,甚至可以弄成全盘加密 https://wiki.ubuntu.com/SmartCardLUKSDiskEncryption
要负责到底也很合理,因为是甲方提的需求。如果预算不足的话还是别在技术问题上纠结了。
janus77
2022-02-28 22:12:56 +08:00
@cppc #38 用技术角度没法解释,在甲方眼里你说的那些重要程度分级,一律视为安全风险,所遵守的标准是一样的。这个标准也就是甲方提出的无限套娃,这种无解的,不要太期望保持易用性。。。
masterclock
2022-02-28 22:59:58 +08:00
HashiCorp Vault 类的不就行了?常规操作啊
cppc
2022-02-28 23:03:12 +08:00
@PHPer233 这个不行,一来程序要无人启动,再就是命令行参数是可以通过进程管理器看到的(至少 windows 系统是这样),等同于明文。
cppc
2022-02-28 23:07:35 +08:00
@masterclock 调研过,不能直接用,前面我解释过了。这些东西我是很愿意使用,但是在国内一些行业里面,国外的东西就是"水土不服",无奈。
wizardyhnr
2022-02-28 23:08:14 +08:00
非对称加密+硬件 key 确实可控性更高,从客户角度来说,威胁模型就是服务器破解,文件都被 copy 走,如果在一台机器上同时保存加密数据和密钥确实属于脱裤子放屁,肯定还是要实行隔离才有保护力。
就像之前那个 Bvp47 ,如果不是他们的密钥被偷出来了,别人也分析不出来什么。
zlowly
2022-02-28 23:15:07 +08:00
Valut +1
dingwen07
2022-03-01 00:16:30 +08:00
上 Hardware Secure Module
lanlanye
2022-03-01 03:17:19 +08:00
上次处理这种需求是配置用 SM4 加密的,密钥直接写死在代码里,给客户部署时的容器里只有一个二进制文件。
c6h6benzene
2022-03-01 03:30:09 +08:00
之前做后端是的时候有接触 HashiCorp Vault (还有其他类似的 Vault ),密码和配置都可以存在 Vault 里面,程序端只用通过某些验证方式( Role/ID 之类)去取就好,明文写出来的就只有变量名。

如果用 Springboot 的话还有 Spring Cloud Vault 来提供支持: https://cloud.spring.io/spring-cloud-vault/reference/html/
OldCarMan
2022-03-01 03:54:29 +08:00
可不可以这样子,偷换一个概念,全部必须设定的密码采用各种文件的 MD5 值来代替。
HertzHz
2022-03-01 07:04:54 +08:00
TPM 或者硬件安全模块
GeruzoniAnsasu
2022-03-01 07:08:48 +08:00
> PS: A 坚持认为自己已经跟甲方沟通好了,不愿意再去询问具体要求

低级产品经理是这样的。toB 产品千万不要「做客户要求的东西」,得「用你想做的东西满足客户期望」。2b 其实是个卖方市场,很多很多方案都是各家临场想出来的,没有人真的做出来了客户要的那个东西,自己的故事编得更完善而已。


落到方案,最本质的一点你们 A 根本没想到,即,这个需求的目的是 合规 还是 真的安全建设。这是 2b 安全行业最重要的信息。

如果为了合规,你就让 A 去抠规范,把规范描述的情况全绕开,这个方案就是完美的
如果为了安全,你就让 A 告诉客户你比他们懂,让销售推动一场技术选型的评审,然后 A 来出评审方案,只要自家方案能打赢友商,这个方案就是完美的。


最后才是实现上的事:
需求没说密钥不能存在内存中对吧,加密过程密钥全程不落地不就合乎需求了吗?
说白了真的根本不是用什么技术的问题
abc612008
2022-03-01 09:32:24 +08:00
楼上那些投机取巧和掩耳盗铃的,我希望以后不会用到你们做的产品。
defunct9
2022-03-01 09:34:19 +08:00
RickyC
2022-03-01 09:35:33 +08:00
确实挺难的;
要么就用密钥:保护好密钥;
要么就用密码。
------
但是都难以做到绝对安全。
------
更安全的方法只有:策略。
比如经常更换密码和密钥等。
------
所谓的安全,只不过是比想要破解你的人跑得快。
而不是绝对不可破解。
sampeng
2022-03-01 09:43:18 +08:00
我碰到过。。。以前在华为就是这个要求。。
为了这个我还跑去改了 mysql 源码。因为 mysql 的密钥会明文存储在本地的一个目录(华为安全部门全盘搜索 mysql 密码我也是醉了)。

你应该反问,这台机器总要有人上来维护吧?密码还是密钥?

是不希望进服务器的人有数据库的密码?都进到服务器了。。什么事干不了?

绝对安全?没有。。我唯一做的最复杂的安全方式是密码在编译时就用三种不同的方法加密。每次用的时候解密。除非破解二进制,搞明白我是怎么加密解密的。这个密码是不可能拿到的。
aboat365
2022-03-01 09:44:41 +08:00
首先声明没有绝对的安全!不清楚楼主家的产品是否是 JAVA 程序,如果是,一般用 jasypt 即可。
分析一下楼主的需求,就是登录部署服务器,不能看到程序配置文件中的各种密码,但程序运行是需要密码去连接其它服务。那么,程序运行时服务器内存中一定有明文密码,连接数据库服务的网络中也有密码。
基于以上分析,针对楼主的问题纯软解决办法就是程序启动时,输入启动命令带上一个解密密码参数即可。这样就可以保证服务器上永久存储介质上不保留任何明文密码。缺点就是程序每次启动需要人工输入密码。

如果上硬件,比如 U 盾,看具体方案和场景了。最后补充说明,系统安全是只木桶,取决于最短的那块板。
crayygy
2022-03-01 10:05:16 +08:00
不知道 USB Key 可不可行
youyoumarco
2022-03-01 10:13:40 +08:00
以前也碰到过一些公司有这个要求,但是那时候就是说密码机这种,然后他们一听钱上来了,就放弃了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX