これは、Michael Schneider による Windows Hardening Project の 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 は最善を尽くします。ただし、バックアップ機能はスナップショットではなく、実際のシステムバックアップに代わるものではありません。HailMary の後に HardeningKitty だけでシステムを 1:1 で復元することはできません。これが要件である場合は、イメージまたはシステムバックアップを作成して復元してください。
_Backup_ スイッチを指定すると、ファイルが finding list の形式で書き出され、_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