Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
こんにちは!そーまんです。
今回は、Active Directoryで長期間ログオンしていないADユーザーをPowerShellを使って洗い出す方法についてご紹介いたします。
長期間ログオンしていないADユーザーを調べる理由
企業で使用されなくなったADユーザーアカウントの管理をプロセスに基づいて厳しく管理している企業もある一方で、そういった管理が殆どされずに放置状態のまま多く残っている企業もあったりします。
人に紐づくADユーザーアカウントであれば退職後、即時アカウントを無効にして、そこから90日後に削除などそういったプロセスで管理している企業が比較的多いのかなと思っています。
一方でシステム管理用のADユーザーアカウントはどうでしょうか?明確に上のようにプロセスが決まっていなかったりするのではないでしょうか?そもそもそういったADユーザーアカウントを作成するプロセスも無く、システム管理者が運用担当が増えた事によって、メールや直接依頼を受けてその場で作成するみたいな現場も決して少なくはないかと思っています。
したがってそういったユーザーアカウントが担当者の離任などにより実際には使用されていないにも関わらず、一定期間放置の状態になっていると大きなリスクにつながる恐れがあります。
Active Directory にすべてのユーザーのアカウントが含まれています。 時間の経過とともに、ユーザーが組織を離れ、それらのユーザー アカウントを Active Directory から削除できないことがあります。 以前の従業員や外部の攻撃者がこれらのアカウントを使用して組織を攻撃できるため、古いユーザー アカウントはセキュリティ上の重大な問題です。
Active Directoryに非アクティブなユーザーアカウントがないか定期的に確認し、あれば削除する | Microsoft
今回はそういったADユーザーアカウントを調べる方法だけではなく、放置しておくと実際にどのようなリスクがあるかも調べましたのでご紹介いたします。
長期間ログオンしていないADユーザーがあると起こりうるリスク
昨今では外部から直接ドメインコントローラに侵入するのではなく、以下の画像のように一旦社内のPCに標的型攻撃を仕掛けてから、そのPCを使ってドメインコントローラに侵入する方法が多いようです。
ちなみにもし殆ど使わていないドメイン管理者ユーザーが万が一あった場合は、攻撃者は「Golden Ticket」という偽装チケットというものを作ってそのドメイン管理者ユーザーになりすましされてしまう可能性があり、そこからファイルサーバにアクセスして機密情報を窃取して外部に持ち出されるような重大なセキュリティーリスクになる恐れがあるので特に注意が必要です。
ちなみに一旦「Golden Ticket」でなりすましされると、それが攻撃者によるログオンかそうでないかの判別が困難なようです。
Golden Ticket (ゴールデンチケット)
ゴールデンチケットとは「Active Directoryのドメイン管理者になりすます認証チケット」を指します。つまり、悪意あるユーザーまたは攻撃者はゴールデンチケットを取得したADドメイン全体にアクセスすることができます。
長期間ログオンしていないADユーザーをPowerShellで調べる
PowerShellを使って対象ユーザーアカウントがあれば一覧で表示することができます。
サンプルのスクリプト (Microsoft から引用) は以下に貼り付けていますので、そのままコピペすれば使えます。
Active Directoryに非アクティブなユーザーアカウントがないか定期的に確認し、あれば削除する | Microsoft
ちなみに実行結果で表示される「PasswordLastSet」と「LastLogonTimeStamp」は以下のとおりです。
属性 | 意味 |
---|---|
PasswordLastSet | 最後にパスワードを変更した日時 |
LastLogonTimeStamp | 最後にログオンした日時 |
1 2 3 4 |
$d = [DateTime]::Today.AddDays(-7) Get-ADUser -Filter '(PasswordLastSet -lt $d) -or (LastLogonTimestamp -lt $d)' -Properties PasswordLastSet,LastLogonTimestamp | ` ft Name,PasswordLastSet,@{N="LastLogonTimestamp";E={[datetime]::FromFileTime($_.LastLogonTimestamp)}} |
$d = [DateTime]::Today.AddDays(-7) の -7 は過去7日間にログオンしていないという意味なので、これを180とかに置き換えてもらえればOKです。
定期的に実施して対象のADユーザーは無効にしてから削除すること
長期間ログオンしていないADユーザーをPowerShell で定期的に洗い出しましょう。年間で決めた期間に決まった方法で対応すれば良いと思います。あとそもそも特権ユーザーの作成を極力すくなくしたりする為の施策も考えるべきでしょう。
長期間ログオンしていないADユーザーがあれば、例えば削除用のOUに移動し無効にしてから一定期間経過したら削除すれば良いと思います。
また、ADユーザーアカウントをOUに移動したり無効にしたりする方法はPowerShellでできますし、以下の記事で紹介していますのでご参考になれば幸いです。
サービスアカウントは人のアカウントではありませんので間違って削除しないように気をつけてください。
最後に
いかがでしょうか。
PowerShellなど使ってADユーザーアカウントを洗い出す方法ももちろん定期的に実施すべきですが、そもそもそういったアカウントを放置してしまわない為にはどうすれば良いのか?という点が本質でとても大事だと思いますので、もしプロセスが無いようであれば重要なこととして取り扱って対策するようにすることをお勧めいたします。
それでは最後までお読みいただき有難うございました!