PowerShellを使ったActive Directory環境でのセキュリティ監査スクリプトの作成方法

Active Directory (AD) は多くの企業でユーザーやデバイス、リソースを管理する基盤として活用されています。

しかし、セキュリティ上の脅威や誤設定によるリスクを最小化するためには、定期的な監査が欠かせません。

この記事では、PowerShellを活用してAD環境のセキュリティ監査を効率的に行う方法をご紹介します。

記事の最後には演習問題と解答例も用意していますので、学びを実践で試してみましょう。


セキュリティ監査にPowerShellを使う理由

PowerShellは以下の理由でセキュリティ監査に最適です:

  • 自動化: 定期的な監査をスクリプト化して自動実行できます。
  • 柔軟性: Active Directory環境の特定の項目をカスタマイズして監査可能。
  • 統合性: ADモジュールを利用すれば、簡単にユーザー、グループ、ポリシー情報を取得可能。

監査スクリプトの作成手順

必要な準備

監査スクリプトを実行するには、以下を事前に準備してください:

  1. PowerShellのインストール: 最新バージョンを使用します。
  2. Active Directoryモジュール: Windowsサーバーにインストール済みであることを確認してください。
Import-Module ActiveDirectory

監査スクリプトの主要項目

監査スクリプトでチェックすべき主な項目:

  1. ユーザーアカウントの状態:
    • 無効化されたアカウント
    • パスワード期限切れ
    • 長期間使用されていないアカウント
  2. 管理者グループの監査:
    • 管理者権限を持つユーザー一覧
  3. グループポリシー設定:
    • 重要なポリシーの有効性
  4. ログオン履歴:
    • 最終ログオン日時

サンプルスクリプトの作成

以下は、上記項目をチェックするPowerShellスクリプトの例です。

(1) 無効化されたユーザーアカウントをチェック

Get-ADUser -Filter {Enabled -eq $false} -Properties DisplayName, Enabled | 
Select-Object DisplayName, Enabled

(2) 長期間使用されていないアカウントの確認

$thresholdDays = 90
Get-ADUser -Filter * -Properties LastLogonDate | 
Where-Object {($_.LastLogonDate -ne $null) -and ($_.LastLogonDate -lt (Get-Date).AddDays(-$thresholdDays))} | 
Select-Object Name, LastLogonDate

(3) 管理者グループの監査

Get-ADGroupMember -Identity "Domain Admins" | 
Select-Object Name, ObjectClass

(4) グループポリシー設定の確認

Get-GPO -All | Select-Object DisplayName, GpoStatus

(5) ユーザーの最終ログオン日時をチェック

Get-ADUser -Filter * -Properties LastLogonDate | 
Select-Object Name, LastLogonDate

スクリプトの自動化

タスクスケジューラを使った自動化

  1. Windowsタスクスケジューラを開き、「タスクの作成」をクリック。
  2. トリガーでスケジュール(例:毎月1日)を設定。
  3. 操作でスクリプトファイル(例:C:\Scripts\AuditScript.ps1)を指定。

結果の保存

スクリプトの結果をCSVファイルとして保存することで、後で分析できます。

$outputPath = "C:\AuditResults\UserAudit.csv"
Get-ADUser -Filter * -Properties LastLogonDate | 
Select-Object Name, LastLogonDate | 
Export-Csv -Path $outputPath -NoTypeInformation

演習問題

演習1: パスワード期限切れのユーザーをリストアップするスクリプトを作成してください。

演習2: 「Enterprise Admins」グループのメンバーを取得し、その名前を出力するスクリプトを書いてください。

演習3: すべてのグループポリシーのステータスを確認し、”Disabled” 状態のものだけを出力するスクリプトを作成してください。


演習問題の解答例

解答1: パスワード期限切れのユーザーをリストアップ

Get-ADUser -Filter {PasswordNeverExpires -eq $false} -Properties PasswordExpired | 
Where-Object {$_.PasswordExpired -eq $true} | 
Select-Object Name, PasswordExpired

解答2: 「Enterprise Admins」グループのメンバーを取得

Get-ADGroupMember -Identity "Enterprise Admins" | 
Select-Object Name

解答3: “Disabled” 状態のグループポリシーを出力

Get-GPO -All | 
Where-Object { $_.GpoStatus -eq "AllSettingsDisabled" } | 
Select-Object DisplayName

まとめ

この記事では、Active Directory環境のセキュリティ監査をPowerShellで効率的に行う方法を解説しました。

定期的に監査を実施することで、セキュリティリスクを最小化し、AD環境の健全性を保つことができます。

演習問題を通じて、スクリプト作成スキルをさらに磨いてみてください。