Active Directory(AD)は、IT インフラストラクチャのリソースを集中管理できるデータベースおよびサービス群です。ユーザーを、仕事を進めるために必要なリソースへと接続します。そのため、技術者は、ハードウェア障害、サイバー攻撃、スクリプトミス、その他の問題によって変更または削除された AD の属性を、迅速に確認して復旧できなければなりません。そうでない場合、ユーザーは以前と同じリソースにアクセスできなくなり、生産性の低下、非効率、満足できない顧客、そしてブランドイメージの毀損につながります。
厳選した関連コンテンツ:
このガイドを読んで、Active Directory の属性を最後に保存された構成に復元する方法を学びましょう。このページでは、AD 属性のロールバックと復旧に役立つ PowerShell のヒントやコツも紹介します。
AD の属性をロールバックまたは復旧する必要があるのは、どのようなときですか?
次のようなときは、AD の属性をロールバックまたは復旧できる必要があります。
- IT チームの誰かが、1 つ以上の AD オブジェクトの属性に影響するミスをしてしまう場合。 たとえば、IT 技術者が誤って間違った PowerShell スクリプトを使用してしまったとします。特定の AD ユーザー アカウントに郵送先住所情報を追加する代わりに、ドメイン内のすべてのユーザー オブジェクトについて address 属性の現在の値をアスタリスクで置き換えてしまいます。正しい住所を復元するには、これらの変更をロールバックする必要があります。
- 悪意のある攻撃者が AD ネットワークにアクセスし、AD オブジェクトの属性を削除または編集する場合。 すべてが正しく整った状態であることを確認するために、属性をロールバックまたは復旧する必要があります。
Active Directory の Recycle Bin を使って AD 属性を復旧できますか?
結論から言うと、いいえ。
Active Directory Recycle Bin は、一定期間、削除された Active Directory オブジェクトの一部を保持するように設計されています。しかし、 Active Directory の Recycle Bin は、変更された AD 属性を保存しないため、属性の復旧プロセスには役立ちません。
技術的には、「望ましくない変更をあらゆるもの含めて迅速に把握できるはずだ」「複製(レプリケーション)経由でその変更をまだ受け取っていないドメイン コントローラーを見つけられるはずだ」「そのコントローラーのオブジェクトを authoritative(権限あり)にすればよい」といった前提でプロセスを組むことは可能です。しかし、それを実行するのは非現実的です。まるで、「win lottery(宝くじに当たる)」と書き殴ったナプキンを元に老後の貯蓄計画を立てるようなものです。
AD 属性のバックアップを確実に用意するにはどうすればよいですか?
Active Directory はオブジェクトの属性値の記録を保持しないため、必要なときに属性を復元またはロールバックできるようにするための最初のステップは、それらの情報を保持している何かを見つけることです。幸いなことに、Active Directory のシステム状態バックアップに関しては、利用可能なバックアップ ツールが不足しているわけではありません。
Windows Server Backup(WBAdmin)
1つの選択肢は Microsoft Windows Server Backup(WBAdmin)を使用することです。Windows Server Backup ツールをコンピューターにインストールすると、wbadmin.exe のコマンドライン ツールがインストールされます。さらに、Windows Server Backup 用の Windows PowerShell の cmdlet および Windows Server Backup の MMC スナップインにもアクセスできます。これら3つのオプションは、単一の基盤となるアプリケーションを活用するための単なる別の方法にすぎないため、いずれかで取得したバックアップはすべての方法から確認できます。
管理者権限で特権(昇格)付きのコマンド プロンプトを開くことで、WBAdmin.exe にアクセスできます。これを行うには スタート をクリックし、コマンド プロンプト を右クリックして 管理者として実行 を選択します。
WBAdmin には、あらかじめ把握しておくべき重要な注意点が1つあります。特定のフォルダーにバックアップを保存するように設定すると、保持されるのはバックアップの最新コピーのみであり、その後に実行されるバックアップが前回のバックアップの内容を上書きします。
この問題を回避するために、次のスクリプトは現在の日付を YYYYMMDD 形式で使用してフォルダーを作成し、その後 WBAdmin の START BACKUP コマンドを使って Active Directory ntds.dit ファイルをそのフォルダーにバックアップします:
@echo off
set backupRoot=\FILESHARENtdsBackups
set backupFolder=%date:~-4,4%%date:~-10,2%%date:~7,2%
set backupPath=%backupRoot%%backupFolder%
mkdir %backupPath%
wbadmin start backup -backuptarget:%backupPath% -include:C:WindowsNTDSntds.dit -quiet
この操作の結果には、ntds.dit ファイルの Volume Shadow Copy Service(VSS)スナップショットが含まれます。
このアプローチの欠点は、結果として作成されるファイルが ntds.dit ファイルよりかなり大きくなることです。たとえば、下のスクリーンショットは、20MB の ntds.dit ファイルのバックアップ サイズを示しています。この追加のディスク使用量は一部のラボでは大きな問題にならないかもしれませんが、本番環境ではうまくスケールしません。
Ntdsutil.exe
Microsoft から利用できる別の選択肢は Ntdsutil.exe です。これは、Windows Active Directory database にアクセスして管理するためのコマンドライン ツールです。Ntdsutil は危険なほど強力なので、本番環境で使い方を学ぶべきではありません。ただし、それには大きな理由があります。つまり、信じられないほど便利なコマンドのセットが含まれているからです。
たとえば Ntdsutil には SNAPSHOT コマンドがあり、実行時点の Active Directory の状態をキャプチャします:
この方法の大きな欠点は、Ntdsutil のバックアップが Active Directory をホストするボリュームに書き込まれるため、理想的ではないことです。
WBAdmin と Ntdsutil.exe を使って属性を復元するにはどうすればよいですか?
それでは、WBAdmin と Ntdsutil.exe を使って手順を追っていきます。Active Directory Domain Services Database Mounting Tool (DSAMAIN) を使用して、バックアップの中に隠れている ntds.dit ファイルをマウントし、LDAP を使って調べられるようにします。
1. まず、WBAdmin によって作成された VHD イメージのうち 1 つを見つけてマウントし、そのプライマリ パーティションにドライブ文字を割り当てます。
2. 次に、マウントしたバックアップ内で ntds.dit ファイルへのパスを確認し、管理者としてコマンド プロンプトを開いて、以下のコマンドで ntds.dit ファイルをマウントします:
dsamain -dbpath “E:WindowsNTDSntds.dit” -ldapport 10389
コマンド プロンプトを閉じると DSAMAIN が停止するため、システム状態の復元が完了するまで開いたままにしておいてください。
3. これで WBAdmin のバックアップがマウントされました。次に、Ntdsutil によって取得したスナップショットをマウントします。これを行うには、管理者として新しいコマンド プロンプトを開き、snapshot コマンドを使用してバックアップを一覧表示し、マウントするものを選択して、Ntdsutil によって割り当てられたドライブ パスの場所をコピーします:
4. 次に、Ntdsutil によって割り当てられたパスの下にある ntds.dit ファイルへのパスを確認し、さらに別のコマンド プロンプトを管理者として開いて、以下のコマンドで ntds.dit ファイルをマウントします:
dsamain -dbpath “C:\$SNAP_201903261110_VOLUMEC$\Windows\NTDS\ntds.dit” -ldapport 20389
5. その後、信頼できるテストユーザーの Description 属性を Delete Q. Me に変更します。
6. これで PowerShell を開き、Get-ADUser cmdlet を使ってテストユーザーを確認できます。Active Directory は既定でポート 389 で待ち受けており、バックアップはポート 10389 と 20389 にマウントしました。オプションの Server パラメーターを使えば、テストユーザーがライブ環境で、そして 2 つのマウント済みバックアップの中でどのように見えるかを確認できます。
ご覧のとおり、Description 属性の現在の値は「Oops」であり、両方のバックアップには以前の値「Demo User Account」が含まれています。
7. ここからは、PowerShell の Get-ADUser cmdlet を使って、この属性をバックアップの 1 つで取得した値に復元できます。マウント済みバックアップの 1 つからオブジェクトのコピーを取得できれば、そのオブジェクトのコピーに含まれる属性を使って、ライブオブジェクトの属性の値を次のように設定できます。
$UserBackup = Get-ADUser -Identity dqme -Properties Description -Server dc01:10389
Set-ADUser -Identity dqme -Description $UserBackup.Description -Server dc01:389
Description 属性の値が、マウント済みバックアップで取得された値に復元されたことに注目してください。
簡単そうに見えますが、実際は、特定のオブジェクトに対して特定の属性を1つだけ変更する、1回分のラボ演習にすぎませんでした。さらに、復元作業に必要な情報を含むバックアップも把握していました。現実の復旧シナリオでは、特に急いでサービスを復旧しなければならない場合、この手順はあまり快適ではありません。
Netwrix のソリューションで Active Directory 属性を復旧
WBAdmin や Ntdsutil.exe のようなツールを使って AD 属性を復元する作業は、リソース・時間・体力に余裕がない場合、とりわけ大きな負担になります。
幸いなことに、AD 属性を復元するための迅速で簡単な方法があります。Netwrix’s end-to-end Active Directory Security Solution。強力で包括的、そして豊富な機能を備えたこのツールは、意図しない AD の削除や変更に対して素早いロールバックを実行します。これにより、業務継続性と顧客満足を確実にできます。
よくある質問
削除された Active Directory ユーザーを、すべての属性とともに復元するには?
削除された AD ユーザーを完全な属性セットとともに復元する必要がある場合、方法は Active Directory Recycle Bin が有効になっているかどうかにより変わります。有効になっている場合は、PowerShell を使用してユーザーを元の属性をすべて保持した状態で復元します:
Get-ADObject -Filter 'DisplayName -eq "Username"' -IncludeDeletedObjects | Restore-ADObject
この方法では、データの損失なく、グループのメンバーシップ、権限、およびカスタム属性が保持されます。
AD Recycle Bin が利用できない場合は、Ntdsutil.exe のようなツールを最近のシステム状態バックアップと組み合わせて使用し、権威ある復元(authoritative restore)を行う必要があります。この手順ではドメイン コントローラーをオフラインにしてバックアップから復元するため、直近の変更の一部が失われる可能性があります。ポイントは、定期的なバックアップを行い、権威ある復元が個々のオブジェクトだけでなくディレクトリ全体に影響することを理解することです。 Data security that starts with identity とは、復元の間にユーザー属性の完全な整合性を維持することが、アクセス制御とセキュリティ境界を保全するうえで重要だということです。
Active Directory Recycle Bin が有効になっていない場合はどうすればいいですか?
AD Recycle Bin が有効になっていない場合、復旧の選択肢はより複雑になりますが、決して不可能ではありません。主な手順は、削除が発生する前に取得したシステム状態バックアップを使って、Ntdsutil.exe による権限のある復元(authoritative restore)を実行することです。これには、ドメイン コントローラーを Directory Services Restore Mode に起動し、バックアップから AD データベースを復元する必要があります。
権限のある復元(authoritative restore)では、最新の変更内容が古いバックアップ データで上書きされるため、バックアップ後に行われたディレクトリの変更は失われます。だからこそ、事前にバックアップ戦略を講じることが重要です。見えていないものは管理できず、バックアップしていないものは復元できません。将来の保護のために、PowerShell を使って AD Recycle Bin をすぐに有効化してください:
Enable-ADOptionalFeature -Identity "Recycle Bin Feature" -Scope ForestOrConfigurationSet
この手順により、復旧のための能力が複雑なオフライン手順から、わかりやすい PowerShell コマンドへと変わります。これにより停止時間を短縮し、ビジネスの継続性を維持できます。
PowerShell コマンドで AD 属性を復元するには?
Recycle Bin が有効になっている場合、PowerShell は AD 属性の復元に最も効率的な手段を提供します。まずは削除されたオブジェクトを特定してください:
Get-ADObject -Filter * -IncludeDeletedObjects | Where-Object {$_.Name -like "*username*"}
対象のオブジェクトを見つけたら、完全に復元します。
Restore-ADObject -Identity "ObjectGUID"
既存オブジェクトの一部属性を復元する場合は、Set-ADUser または Set-ADObject コマンドを使って、ドキュメントや直近のエクスポートから特定の属性を再構成します。実務的には、Get-ADUser -Properties * を使って定期的に AD をエクスポートし、属性セットを素早く作り直せる復元スクリプトと組み合わせるのが効果的です。この方法なら、関連のないディレクトリ オブジェクトに影響を与えることなく、復元する内容を細かく制御できます。
PowerShell の強みはその精度にあります。余計な変更を伴わずに、必要なものだけを正確に復元できます。復元スクリプトを作成して手順を文書化し、まずは本番環境以外でテストしてください。効果的な Identity management には、何が変わったのかを把握する可視性と、それらの変化にどう対応するかを制御することの両方が必要です。
AD オブジェクトでは、権威付き復元(authoritative)と非権威付き復元(non-authoritative)の使い分けはいつ行うべきですか?
すべてのドメイン コントローラーに対して、より新しい変更を上書きしながら特定の AD 変更を強制的に反映する必要がある場合は、権威付き復元(authoritative restore)を選択します。この方法は、誤って削除されたオブジェクトの復旧や、許可されていない大規模な変更の取り消しに最も適しています。権威付きプロセスでは、復元されたオブジェクトにより高いバージョン番号が付与されるため、レプリケーションによって復元したデータがドメイン全体に広がります。
非権威(Non-authoritative)復元は、既存のディレクトリ データを変更せずに、障害が発生したドメイン コントローラーを再構築するような災害復旧シナリオに適しています。このアプローチでは、バックアップ データをドメイン全体に適用するのではなく、健全なドメイン コントローラーから現在の AD 情報を取得します。
判断は「スコープ(範囲)」と「意図」によって決まります。権威(Authoritative)復元はフォレスト全体に影響し、控えめに使うべきです——強力ですが、破壊的(disruptive)です。非権威(Non-authoritative)復元はローカルのドメイン コントローラーのみに影響し、既存のインフラとスムーズに統合されます。いずれの場合も、レプリケーション トポロジ(replication topology)を理解し、最新のバックアップを用意していることが成功を左右します。Data security that starts with identity means having multiple recovery options and knowing exactly when to use each one.
Active Directory でコンピューター オブジェクトを復元するには?
コンピューター オブジェクトの復元は、ユーザーの復元と同様の原則に従いますが、マシン認証やドメイン関係に関して追加の考慮が必要です。AD Recycle Bin が有効になっている場合は、次のコマンドを使用して、すべての属性を含むコンピューター アカウントを復元してください:
Get-ADObject -Filter 'Name -eq "ComputerName"' -IncludeDeletedObjects | Restore-ADObject
Recycle Bin がない場合、マシンの信頼関係(machine trust relationships)を再構築する必要があるため、コンピューターの復元はより複雑になります。権威(Authoritative)復元の後は、影響を受けたコンピューターのマシン アカウントのパスワードが適切に同期されない可能性があるため、通常はドメインに再参加する必要があります。バックアップからコンピューター オブジェクトを復元する際は、この追加ステップを見込んで計画してください。
実践的なアプローチには、問題が起きる前にコンピューター オブジェクトの属性を文書化しておくことが含まれます。PowerShell を使って、コンピューター アカウントの詳細を定期的にエクスポートし、グループ メンバーシップ、組織単位(OU)での配置、およびカスタム属性を記録してください。この文書化により、自動復旧ができない場合でも、より迅速に手動で再作成できます。コンピューター オブジェクトは単なるディレクトリのエントリ以上のものであり、マシン ID 基盤の土台です。これらを誤って復元すると、環境全体で認証が破綻する可能性があります。
共有する
もっと詳しく
著者について
Joe Dibley
セキュリティリサーチャー
Netwrix のセキュリティリサーチャーであり、Netwrix Security Research Team のメンバーです。Joe は Active Directory、Windows、およびさまざまなエンタープライズソフトウェアのプラットフォームとテクノロジーの専門家であり、新たなセキュリティリスク、複雑な攻撃手法、そしてそれに関連する緩和策と検知について研究しています。