我的第一个Powershell脚本

我编写的第一个PowerShell脚本(见下文)是一个快速修复,以便在a之后从“不受信任的”注册表项中删除证书vonteera.感染。在某些初始命令之后,此脚本基本上循环回到某个密钥下不属于的每个证书。

$ path =“hklm:\ software \ policies \ microsoft \ systemcertificates \ disallowed \证书\ c1437f2bc6f11 ...”
$ acl = get-acl $ path
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ("Everyone","FullControl","Allow")
(acl.SetAccessRule美元规则)
$ ACL | Set-ACL -Path $ Path
remove-item -path $ path

它所做的是:

  • 定义键的路径
  • 设置该密钥的权限
  • 删除钥匙

当前的挑战

我遇到的问题是查找作为证书注册表项的十六进制值。我不得不在感染之前和之后拍摄注册表快照,以找出哪些是被添加的。了解感染前的证书并不是那么困难。决定保存什么信息以及如何保存信息并非易事。

我最后用这个命令,我将详细解释,因为这是一个学习经历:

get-chatiTem -path cert:\ currentuser \ disallowed -recurse |选择指纹,友好名称,主题|convertto-html |Set-Content C:\ Users \ public \ desktop \证书.html

证书:驱动器由Windows PowerShell证书提供程序提供,并使用Get-ChildItemCmdlet允许您从它获取证书存储位置、证书存储区和证书。

他们选择了“不允许”路径,因为已知一些恶意软件样本会阻止某些安全程序的下载和操作。当然,你可以把它改成你感兴趣的其他可能性。

“反复”参数允许我搜索“路径”的子目录。

我想看到每个证书的这些属性:

  • 拇指指纹,因为这是注册表项的名称
  • 友好名称,因为它显示了不可信任证书的原因(有时有用)
  • 主题,因为它保存了我们可以在certmgr中看到的人类可读的信息

命令的最后两个位是准备导出的输出并定义导出位置所必需的。我选择公共桌面,所以每个人都可以复制命令,而无需改变它以适应自己的情况。而且我已经决定了HTML,因为这给了我一个漂亮的桌子。

所以,拍摄快照是一件事。现在,我们必须在感染之前和之后比较证书集。幸运的是,有一个明显的选择,这是比较 - 对象cmdlet。

差异

点击放大

要使用较旧的快照比较新的证书,我已经改变了前一个命令一点点,有用原因。以下是将其导出到文本文件的命令:

Get-ChildItem -Path cert:\currentuser\disallowed -Recurse | select Thumbprint, FriendlyName, Subject| Set-Content c:\users\public\desktop\certificates.txt

当我在文本文件执行此比较时,我已经改变了避免在表中获取表。要与之比较,在这种情况下,我使用了我们检测为木马的恶意软件文件的证书滴管部分。WdfloadWdfload是一种感染,它将比特币矿机与一个模块结合在一起,该模块通过改变主机文件和丢弃不受信任类别中的证书来禁用下载和使用防病毒软件。在运行上面的命令之后,在感染之前和之后,我还重新命名了相应的文件,以添加到文件名之前和之后。并使用此命令获得另一个易于读取的输出文件。

compare-object(get-content c:\ users \ public \ desktop \ cistrictsbefore.txt)(Get-Content C:\ Users \ Public \ Desktop \ CistrictsAfter.txt)|convertto-html |Set-Content C:\ Users \ Public \ Desktop \ Comparison.html

让我们再看看上面的图像。控件添加SideIndicator列比较 - 对象cmdlet。它显示了比较的哪一侧,线与另一个相比额外。在这种情况下,箭头表示是否添加了证书(=>)或是否被删除(<=)。

我使用的certs滴管没有添加任何FriendlyName项目,这就是为什么在上面的截图中该列显示为空。

到目前为止,我们专注于创建一些有用的PowerShell命令。下次我将尝试编写一个使用我的输出(或较小版本)的PowerShell脚本来删除CertSdropper添加的证书,而无需ME必须手动硬介绍所有注册表项名称。

在本系列的前面:

欢迎您的意见和建设性的批评。