我的$ profile中有一些脚本需要密码,例如连接到公司VPN或向虚拟化VM发送命令。
我不想一遍又一遍地输入这些密码,并且在我的$ profile中存储密码是不安全的。所以我想出了一个解决方案。在$ profile启动时,我做了类似的事情
$env:VpnPassword = (Get-Credential Domain\George.Mauer).GetNetworkCredential().Password
所以当powershell启动时,我输入一次密码,然后在任何脚本中我都可以使用$env:VpnPassword
。
我已确认该变量仅适用于PS Session。我的理由是,因为它似乎是在记忆中,这是一个相当安全的地方存储它。
我的逻辑是否合理? 我创建的$env
值只存储在内存中吗?页面文件怎么样?这是否可以用来以某种方式抓住这些字符串?在没有引入全新系统的情况下,有没有更好的方法来实现我想要做的事情?
答案 0 :(得分:2)
我验证了$ env只在ram中。 PS关闭时没有留下任何指针。即使你将PS exe打入破坏,底层析构函数也会触发,它仍会清理。即使有共享内存攻击,据我所知,该地址空间仅适用于system32等内核模式驱动程序。你必须知道确切的内存地址和数据大小才能找到任何东西,假设你甚至有一个足够高的进程。话虽这么说,我真的没有看到任何加密的需要。
这个答案将在WM_CLOSE ...
上开始自毁序列