V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FlyingBackscratc
V2EX  ›  程序员

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

  •  
  •   FlyingBackscratc · Jun 7, 2024 · 3974 views
    This topic created in 688 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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