建议收藏 打开注册表命令( 三 )



下面,让我们利用PowerShell过滤掉这些噪音:
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" | select -property * -exclude PS* | fl

建议收藏 打开注册表命令


看看这有多优雅 。想象一下,如果能够通过类似方式让数以千计的端点以这种清晰、无噪音的方式返回信息,这简直就是蓝队的梦想 。这种用于过滤的PowerShell非常适合在企业范围内运行,以识别网络中标准构建之外的异常 。
如果看一下运行键,就会发现条目的名称和附带的命令 。不过,运行键的合法内容可能有所不同,我们需要了解企业中什么东西是正常的,因为这样才能知道哪些东西是不正常的 。
在进行安全审计时,有时需要过滤掉注册表运行键中合法的启动项目 。这其实很容易做到 。为此,只需使用与上述相同的PowerShell,不过这次需要加上-exclude
标志,然后是需要排除的PS*,后面加上一个逗号,以及其他不想看到的运行键名称 。
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" | select -property * -exclude PS*, Vmware*,bginfo* | fl
建议收藏 打开注册表命令


恶意的运行键下面,让我们模仿一下攻击者的一些行为 。我们将在一个运行键中插入一些恶意的东西,同时,我将向您展示:
第一,如何通过循环方式自动找到它 。
第二,如何在不破坏其他合法运行键的情况下将其从机器上清除 。
假设我们已经入侵了一台机器,并希望在这台机器上面维持相应的权限 。为此,我们编译了evilcommand.exe,它能够绕过人类已知的所有反病毒软件,并向我们一个反向shell 。我们可以命令其中一个运行键来执行我们的恶意程序:
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name '!Delete After Running' -Value "evilcommand.exe"
如果我们能够在单行Powershell命令的末尾加上-whatif,它就不会真正运行你的命令 。相反,它将向您显示如果您运行它会产生什么效果 。
建议收藏 打开注册表命令


当您想真正运行一些命令时,请使用-verbose标签 。
建议收藏 打开注册表命令


这就是我们强制运行键为我们做的事情:创建了一个名为“Delete_After_Running”的运行键,其执行值为“evilcommand.exe” 。注意前面这个感叹号,正如我们已经讨论过的,它将确保程序在自我删除之前运行,以欢迎我们再次光顾这台被入侵的机器 。
建议收藏 打开注册表命令


任务调度器不会注意到这一点 。它不会也无法识别这个运行键已被调度 。如果我是微软,我可能会在任务调度器中加入这一功能……
建议收藏 打开注册表命令


如何寻找恶意的运行键利用Powershell的for循环,我们可以收集上述四个注册表位置的内容 。
在构思这个脚本时,我设法通过确保代码产生的输出被预先过滤并添加颜色,以便于辨认是否存在异常的东西及其所在的位置 。
建议收藏 打开注册表命令


建议收藏 打开注册表命令



如果我们看得足够仔细,就会发现一些异常情况 。一旦我们取得可执行文件并对其进行逆向分析,我们就可以确定它是否是来自攻击者的恶意可执行文件 。

推荐阅读