【问题标题】:How to store temporary sensitive data in memory?如何在内存中存储临时敏感数据?
【发布时间】:2022-12-15 17:26:58
【问题描述】:

我正在构建一个自动化的工作流程(使用 Saltstack),它将加密的密码传递给需要加入域的系统,如下所示:

netdom join %computername% /domain:domain.com /UserD:user /PasswordD:passwrd

可以使用另一个脚本解密加密密码并将其输入上述行。困难在于存储这个临时加密密码。到目前为止,我只能想到两种方法,这两种方法都不可取:

  1. RAMDISK - 没有内置的创建方式,因此需要依赖第三方,不好
  2. 环境变量 - 持久变量存在于注册表中,也就是磁盘上,所以仍然不好

    有什么建议么?

【问题讨论】:

  • 普通变量根本不是持久的。顺便提一句。你如何解密密码?如果它可以自动完成,那么它仍然不安全
  • 抱歉,我说错了,据我所知,除非用 setx /M 这样做,否则它不是持久的?关于解密,在一次性请求密码之前使用随机散列作为“盐”,并使用相同的散列在服务器上进行解密。此哈希对于每个请求都是唯一的。我绝对不是专家,但看起来适合我的需要。
  • 好的,那么你已经回答了你的问题。不要使用setx,而是使用set
  • 谢谢 Jeb,那么您是在建议使用环境变量就足以完成这项任务了吗?
  • 环境变量 (set) 在当前 cmd 进程中设置(及其在设置变量后创建的子进程)并在相应进程结束时销毁。它对其他进程(父进程或无关进程)不可见。 Ramdisk 中的数据可以从任何地方读取。所以环境变量比 ramdisk 更安全(虽然不是防弹)

标签: windows cmd salt-stack


【解决方案1】:

听起来这个密码应该存储在 encrypted pillar 中。

#!yaml|gpg

net_password: |
  -----BEGIN PGP MESSAGE-----
  hQEMAw2B674HRhwSAQgAhTrN8NizwUv/VunVrqa4/X8t6EUulrnhKcSeb8sZS4th
  W1Qz3K2NjL4lkUHCQHKZVx/VoZY7zsddBIFvvoGGfj8+2wjkEDwFmFjGE4DEsS74
  ZLRFIFJC1iB/O0AiQ+oU745skQkU6OEKxqavmKMrKo3rvJ8ZCXDC470+i2/Hqrp7
  +KWGmaDOO422JaSKRm5D9bQZr9oX7KqnrPG9I1+UbJyQSJdsdtquPWmeIpamEVHb
  VMDNQRjSezZ1yKC4kCWm3YQbBF76qTHzG1VlLF5qOzuGI9VkyvlMaLfMibriqY73
  zBbPzf6Bkp2+Y9qyzuveYMmwS4sEOuZL/PetqisWe9JGAWD/O+slQ2KRu9hNww06
  KMDPJRdyj5bRuBVE4hHkkP23KrYr7SuhW2vpe7O/MvWEJ9uDNegpMLhTWruGngJh
  iFndxegN9w==
  =bAuo
  -----END PGP MESSAGE-----
join domain:
  cmd.run:
    - name: netdom join %computername% '/PasswordD:{{ pillar["net_password"] }}' /domain:domain.com /UserD:user 

如果您已经在例如一个 Vault 实例,您可以使用 sdb 来访问它。

【讨论】:

  • 像往常一样谢谢 OrangeDog。我会尝试这种方法。如果我理解正确的话,看起来我也可以使用加密的内联支柱?
猜你喜欢
  • 2017-09-05
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2013-08-01
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多