Sea*_*ver 3 sysadmin encryption passwords windows-server
我最近阅读了以下SO问题.
在撰写本文时,它提到了加密的连接字符串(用于ASP.NET应用程序)或使用Data Protection API(DPAPI).对于这个用户的特定用例来说,两者似乎都是很好的解决方案.
但是,传统上我总是在其使用的服务器上的用户环境变量中存储敏感配置值,如密码和连接字符串.这些很容易定义,更改和读取(从IT角度来看).无论使用何种框架或语言,它们都易于访问.
问题是:将敏感数据存储在Windows用户环境变量中是否是好的做法,如果不是,为什么?
编辑:
根据Ken的评论,一个先决条件问题应该是:Windows注册表内容是否已加密?
无论您在用户或系统环境中存储的是什么,都以明文(未加密)存储在NTUSER.DAT和SYSTEM注册表文件中.它们不仅可以使用十六进制编辑器读取,即使使用简单的文本编辑器或使用grep,如果您使用众多工具之一来解析/从注册表文件中提取数据,也可以更轻松地读取它们.
示例(Windows 2008 Server,使用RIP Linux完成转储):
这是Environment Variables对话框,我设置了一个User变量(MySecretPassword = NobodyCanReadThis)和一个System变量(MySystemSecret = NobodyCanReadThisEither):
这是在安装Windows NTFS分区并在Administrator目录中查找NTUSER.DAT文件后,从Linux的hexedit看起来的样子.您可以轻松搜索用户环境变量名称,并以明文形式查找其内容:
这是Windows\System32\Config目录中的SYSTEM注册表文件.同样,您可以轻松搜索变量名称.在这种情况下,变量的值是变量名后的几个字节,但很容易发现: