这是来自 Michael Schneider 的 Windows Hardening 项目 的 HardeningKitty 稳定版本。HardeningKitty 的稳定版本使用 scip AG 的代码签名证书进行签名。由于这是稳定版本,我们不在本仓库接受拉取请求,请将其发送至开发仓库。
HardeningKitty 支持对 Windows 系统进行加固。系统配置通过查找列表(finding list)进行检索和评估。此外,还可以根据预定义值对系统进行加固。HardeningKitty 从注册表读取设置,并使用其他模块读取注册表之外的配置。
该脚本是为英文系统开发的。在其他语言环境下,分析结果可能不正确。如果出现这种情况,请创建一个 issue。
以管理员权限运行脚本以访问计算机设置。对于用户设置,最好使用普通用户帐户执行。理想情况下,该用户帐户用于日常办公。
下载 HardeningKitty 并复制到目标系统(脚本和列表)。然后即可导入并执行 HardeningKitty:```powershell PS C:\tmp> Import-Module .\HardeningKitty.psm1 PS C:\tmp> Invoke-HardeningKitty -EmojiSupport
=^._.^=
_( )/ HardeningKitty 0.9.0-1662273740
[*] 9/4/2022 8:54:12 AM - Starting HardeningKitty
[] 9/4/2022 8:54:12 AM - Getting user information [] Hostname: DESKTOP-DG83TOD [*] Domain: WORKGROUP
...
[] [] 9/4/2022 8:54:12 AM - Starting Category Account Policies [😺] ID 1103, Store passwords using reversible encryption, Result=0, Severity=Passed [😺] ID 1100, Account lockout threshold, Result=10, Severity=Passed [😺] ID 1101, Account lockout duration, Result=30, Severity=Passed
...
[*] 9/4/2022 8:54:12 AM - Starting Category User Rights Assignment [😿] ID 1200, Access this computer from the network, Result=BUILTIN\Administrators;BUILTIN\Users, Recommended=BUILTIN\Administrators, Severity=Medium
...
[*] 9/4/2022 8:54:14 AM - Starting Category Administrative Templates: Printer [🙀] ID 1764, Point and Print Restrictions: When installing drivers for a new connection (CVE-2021-34527), Result=1, Recommended=0, Severity=High [🙀] ID 1765, Point and Print Restrictions: When updating drivers for an existing connection (CVE-2021-34527), Result=2, Recommended=0, Severity=High
...
[*] 9/4/2022 8:54:19 AM - Starting Category MS Security Guide [😿] ID 2200, LSA Protection, Result=, Recommended=1, Severity=Medium [😼] ID 2201, Lsass.exe audit mode, Result=, Recommended=8, Severity=Low
...
[] 9/4/2022 8:54:25 AM - HardeningKitty is done [] 9/4/2022 8:54:25 AM - Your HardeningKitty score is: 4.82. HardeningKitty Statistics: Total checks: 325 - Passed: 213, Low: 33, Medium: 76, High: 3.
## 如何安装
首先,在 *PSModulePath* 环境变量列出的路径中创建目录 *HardeningKitty*,并为每个版本创建子目录,如 *0.9.3*。
将模块 *HardeningKitty.psm1*、*HardeningKitty.psd1* 以及 *lists* 目录复制到此新目录。```powershell
PS C:\tmp> $Version = "0.9.3"
PS C:\tmp> New-Item -Path $Env:ProgramFiles\WindowsPowerShell\Modules\HardeningKitty\$Version -ItemType Directory
PS C:\tmp> Copy-Item -Path .\HardeningKitty.psd1,.\HardeningKitty.psm1,.\lists\ -Destination $Env:ProgramFiles\WindowsPowerShell\Modules\HardeningKitty\$Version\ -Recurse
有关详细信息,请参阅 Microsoft 的文章 安装 PowerShell 模块。
你可以使用下面的脚本下载并安装 HardeningKitty 的最新版本。```powershell Function InstallHardeningKitty() { $Version = (((Invoke-WebRequest "https://api.github.com/repos/0x6d69636b/windows_hardening/releases/latest" -UseBasicParsing) | ConvertFrom-Json).Name).SubString(2) $HardeningKittyLatestVersionDownloadLink = ((Invoke-WebRequest "https://api.github.com/repos/0x6d69636b/windows_hardening/releases/latest" -UseBasicParsing) | ConvertFrom-Json).zipball_url $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest $HardeningKittyLatestVersionDownloadLink -Out HardeningKitty$Version.zip Expand-Archive -Path ".\HardeningKitty$Version.zip" -Destination ".\HardeningKitty$Version" -Force $Folder = Get-ChildItem .\HardeningKitty$Version | Select-Object Name -ExpandProperty Name Move-Item ".\HardeningKitty$Version$Folder*" ".\HardeningKitty$Version" Remove-Item ".\HardeningKitty$Version$Folder" New-Item -Path $Env:ProgramFiles\WindowsPowerShell\Modules\HardeningKitty$Version -ItemType Directory Set-Location .\HardeningKitty$Version Copy-Item -Path .\HardeningKitty.psd1,.\HardeningKitty.psm1,.\lists\ -Destination $Env:ProgramFiles\WindowsPowerShell\Modules\HardeningKitty$Version\ -Recurse Import-Module "$Env:ProgramFiles\WindowsPowerShell\Modules\HardeningKitty$Version\HardeningKitty.psm1" } InstallHardeningKitty
## 示例
### 审计
默认模式是 _audit_。HardeningKitty 执行审计,将结果保存为 CSV 文件,并创建日志文件。文件会自动命名并添加时间戳。使用参数 _ReportFile_ 或 _LogFile_,也可以指定自己的名称和路径。
_Filter_ 参数可用于过滤加固列表。为此,必须使用 PowerShell ScriptBlock 语法,例如 `{ $_.ID -eq 4505 }`。以下元素可用于过滤:ID、Category、Name、Method 和 Severity。```powershell
Invoke-HardeningKitty -Mode Audit -Log -Report
HardeningKitty 可以使用由参数 FileFindingList 定义的特定列表来执行。如果在同一系统上多次运行 HardeningKitty,隐藏机器信息可能会很有用。参数 SkipMachineInformation 即用于此目的。```powershell Invoke-HardeningKitty -FileFindingList .\lists\finding_list_0x6d69636b_user.csv -SkipMachineInformation
HardeningKitty 使用默认列表,并且仅检查严重性为 Medium 的测试。```powershell
Invoke-HardeningKitty -Filter { $_.Severity -eq "Medium" }
模式 config 会检索系统的所有当前设置。如果某项设置尚未配置,HardeningKitty 将使用查找列表中存储的默认值。此模式可以与其他功能结合使用,例如创建备份。
HardeningKitty 获取当前设置并将其存储在报告中:```powershell Invoke-HardeningKitty -Mode Config -Report -ReportFile C:\tmp\my_hardeningkitty_report.csv
### 备份
备份很重要。非常重要。因此,HardeningKitty 也提供了一项功能,用于检索当前配置并将其保存为可部分还原的形式。
**免责声明:** HardeningKitty 会尽力还原原始配置。对于注册表项,这一功能运行得相当不错,而且 Hardening Kitty 确实已尽力而为。但备份功能并非快照,也不能替代真正的系统备份。仅靠 HardeningKitty 无法在 HailMary 之后将系统 1:1 还原。如果有此需求,请创建镜像或系统备份并进行还原。
_Backup_ 开关用于指定以查找列表形式写入文件,因此可用于 _HailMary_ 模式。备份的名称和路径可以通过参数 _BackupFile_ 指定。```powershell
Invoke-HardeningKitty -Mode Config -Backup
请先测试此功能,确认它在目标系统上确实正常工作,然后再进行任何重大更改。薛定谔的备份是危险的。
请注意,如果未指定 -FileFindingList,则备份将引用默认的发现列表。在 HailMary 模式下部署 特定 列表之前,始终创建一份 引用该特定列表 的备份。```powershell Invoke-HardeningKitty -Mode Config -Backup -BackupFile ".\myBackup.csv" -FileFindingList ".\list{list}.csv"
#### 恢复备份
_Backup_ 开关会创建一个查找列表形式的文件,要恢复备份,请像加载任何查找列表一样,在 _HailMary_ 模式下加载它:```powershell
Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList ".\myBackup.csv"
HailMary 方法非常强大。它可用于在系统上部署发现列表。所有发现都按照列表中的建议设置在系统上。能力越大,责任越大。请仅在您清楚自己在做什么的情况下使用此模式。请务必备份系统。
目前,过滤功能仅在 Audit 和 Config 模式下受支持。由于 HailMary 模式是一个棘手的问题,请创建自己的文件并删除所有要过滤的行。```powershell Invoke-HardeningKitty -Mode HailMary -Log -Report -FileFindingList .\lists\finding_list_0x6d69636b_machine.csv
在运行 HailMary 之前,必须选择一个发现列表。重要的是检查设置是否会对系统的稳定性和功能产生影响。在运行 HailMary 之前,应进行备份。
### 创建组策略(实验性)
感谢 [@gderybel](https://github.com/gderybel),HardeningKitty 可以将发现列表转换为组策略。基本要求是必须安装 Group Policy Management PowerShell 模块。目前只能转换注册表设置,且并非所有内容都经过全面测试。只要新策略未分配给对象,就不会对系统进行任何更改。请谨慎使用。```powershell
Invoke-HardeningKitty -Mode GPO -FileFindingList .\lists\finding_list_0x6d69636b_machine.csv -GPOName HardeningKitty-Machine-01
在写入模式(HailMary 和 GPO)下,查找列表完全控制将应用于系统的内容。为确保列表在到达操作员手中之前未被篡改(例如被投毒的仓库、共享的基线、下载或通过电子邮件发送的"运行此列表"),HardeningKitty 可以验证列表是否为由维护者发布的真实且未经更改的版本。
官方列表由 lists\ 目录中随附的签名清单进行认证:
lists\hardeningkitty_lists_manifest.psd1 - 一个可读文件,将每个官方列表映射到其 SHA-256 哈希lists\hardeningkitty_lists_manifest.psd1.p7s - 对该清单的分离签名,使用维护者证书创建在运行时,HardeningKitty 会验证分离签名,并检查签名者的证书是否与模块中固定的指纹($HardeningKittyListSigningThumbprint)匹配。它还将已加载列表的哈希与清单进行比较。其哈希包含在签名清单中的列表为 官方 / 已验证。任何其他列表均为 自定义 / 未验证。这是来源证明,而非允许列表——完全支持自定义列表。
各模式下的行为: