V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FlyingBackscratc
V2EX  ›  程序员

大家公司的生产级别代码,对于密码等敏感数据的安全储存一般是怎么操作的?

  •  
  •   FlyingBackscratc · 10 天前 · 2419 次点击

    想在开源项目里用比较正规的流程储存密钥等敏感数据,但是实习经验不多,自己做的过程中还是挺多问题的,有没有大佬讲讲一般商业公司是怎么处理的。想学习一个一般商业公司的还可以的安全管理实现,主要是像大公司或者云平台那种管理咱也没那个成本搞,搞了也用不上。

    目前我的操作方法就是注入数据库密码等等把密文写到配置文件里,然后在代码里读取并解码,就还原成真实密码。唯一好处可能是密文和代码分离了,方便管理。但是密文和密钥又都写在一块,解码方式也很明确,感觉还是意义不大。如果说真的是为了对抗网络攻击的话,那代码泄露和配置文件泄露的安全损害级别应该是一样的,对方有能力获取你的代码又怎么会没能力获取配置文件,还不是会导致所有原文泄露?

    在用户管理方面,比如 nginx 是 A 用户启动的,业务是 B 用户启动的,给密钥文件夹加上 B 的只读权限也许有用。不过说实在的既然只用 nginx 做路由,业务过于单纯,实在是想不到它有什么潜在风险。毕竟全球运行这么多年了,好像也没听说过哪个 0day 漏洞导致 nginx 本身出问题的。

    还有一个处理方案可能是配置文件只存密文,在每次服务启动时管理员手动输入密钥,但是现在服务都做的容器化,每次启动输入既麻烦又不好管理,我觉得应该没有人实际上是这么操作的。

    最后我还想知道一般安全设计上是否需要防范内存攻击,我的程序把密码原文读取到内存,需要防止有人把内存 dump 出来做分析吗,这是否意味着相关内存需要尽快被销毁?

    12 条回复    2024-06-09 23:20:39 +08:00
    Inn0Vat10n
        1
    Inn0Vat10n  
       10 天前
    能直接访问到 db 的机器一般和外部网络是隔离的,不太需要关心 dump 内存攻击这种操作,一般就是 pk/sk 做鉴权,pk 我有见过直接存配置文件里的,也有从统一的配置中心获取的(调用 API 有审计)
    FlyingBackscratc
        2
    FlyingBackscratc  
    OP
       10 天前
    @Inn0Vat10n 感觉网络隔离这个在发生权限泄露以后意义不大,感觉从 v 站发帖的观察来看服务器被挂马是常见网安问题,此种情况下内部网络隔离形同虚设。pk/sk 鉴权应该不是单纯用 tls 加密通信这种感觉而是涉及鉴权逻辑吧,不过这种和密码又有啥区别,感觉只是 sk 比密码长一点这样。。。
    GeekGao
        3
    GeekGao  
       10 天前
    一般的公司没有˙复杂的处理,1 楼说的是很多公司的处理方法。
    我所知的做法是使用像 HashiCorp 的 Vault 这样的工具来管理和存储密钥,然后应用是从环境变量中读取密钥。
    whileFalse
        4
    whileFalse  
       10 天前
    云、k8s 和第三方软件有很多加密配置的组件
    不过对于很多应用来说,只要不写死在代码里,能够运行时注入就够了。
    不用管内存
    wangbin11
        5
    wangbin11  
       10 天前
    java 就用 nacos ,现在各种服务解耦,程序员都搞不懂自己的程序和谁连接,不用太耽误密码安全问题,多写点代码就懂了,能跑就行
    jinliming2
        6
    jinliming2  
       10 天前 via iPhone
    首先,没有绝对的安全。如果真到了可以到你服务器上进行任意代码执行了,那基本上对你的密码是啥也就没啥兴趣了。都能直接进到你家翻箱倒柜了,也就没有必要知道你家防盗门上的密码了。
    安全防护通常是很多层,对密码的保护只是其中一层。
    代码是很多人都可以访问到的,比如公司里的程序员,几乎人手一份代码,代码泄漏的风险本身就很高。而密码不放在代码里,那么即便是你泄漏了代码,在不考虑其他漏洞的情况下,生产数据库还是安全的。
    当然,即便是保护了密码的安全,生产数据库通常也都是网络隔离不能公网访问的,这是另一道安全防线。但也不能说既然不能公网访问,那就不设置密码了吧?
    rekulas
        7
    rekulas  
       10 天前
    裸配置就行了, 很多巨头都这样玩的, 服务器不被黑没啥大问题
    我们也有加密配置, 不过是因为要部署在客户的机器上 放置泄露而已
    wanqiangcrack
        8
    wanqiangcrack  
       10 天前
    dump?你这担心的也太多了,都拥有你服务器的控制权了,在折腾安全都是没有意义的。 密码能够看到明文的地方进行加密就好了,后端使用时即时解密。
    KylinYou
        9
    KylinYou  
       10 天前 via Android
    如果是欧盟的服务,需要遵守 GDPR ,用户对信息有知情权,访问权,删除权等
    fd7917931e
        10
    fd7917931e  
       10 天前
    Vault
    richcat
        11
    richcat  
       9 天前
    密码用密钥加密,加密后无所谓放在那里了,密钥有密钥管理服务(参考 AWS KMS),每个用户都可以申请自己的密钥
    RedrumSherlock
        12
    RedrumSherlock  
       8 天前
    明文存在 Hashicorp 的 Vault 上,然后通过 Vault 的 secret operartor 同步成 k8s 的 secret ,mount 成 pod 的环境变量调用。内存 dump 这种基本不考虑了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:18 · PVG 20:18 · LAX 05:18 · JFK 08:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.