はじめに
Active Directory(以降AD)は、企業のサイバーセキュリティにおいて非常に重要なIT資産です。ADには様々な特権アカウントが存在するため、攻撃者にとって非常に魅力的な資産です。実際のインシデント報告を見ると、非常に多くの攻撃がADを介して実行されていることが分かります。
最近は、ADに対する様々なセキュリティ製品が提供されていますが、多くの製品でADにエージェントをインストールしなければなりません。特に、攻撃に対する防御・対応まで行うためには、エージェントが必要な場合が多いです。ですが、エージェントを入れたくないという企業も多く、エージェントなしで攻撃検知後の対応を自動化できないかなと思っていました。そんな中、Hybrid Runbookというサービスに出会います。
Hybrid Runbookを使えば、エージェントなしでADの操作できるんじゃね?
ということで、検証の結果を本記事にまとめます。
Hybrid Runbook概要
Hybrid Runbookとは、VM上(物理マシン含む)で直接スクリプトを動作させるためのサービスです。Hybrid Runbookは、Azure Automationの一機能として提供されています。Azure Automationは、Hybrid Runbook以外にも構成管理等の様々な機能を持っていますが、本記事ではHybrid Runbookにフォーカスして説明したいと思います。
まずは、Hybrid Runbookを利用するために理解しておくべき、基本的なコンポーネントについて説明していきます。
Automationアカウント
上述の通り、Hybrid RunbookはAzure Automationの一機能として提供されます。Azure Automationの機能を利用するためには、最低1つのAutomationアカウントを作成する必要があります。Automationアカウントは、Azure Automationのコンポーネント(スクリプト、資格情報など)を論理的に分離する役割を持ちます。
Runbook
実行するスクリプトやワークフローのことです。PowerShellやPython等がサポートされています。最新のサポート状況については、公式ドキュメントをご確認ください。
Hybrid Runbook Worker/Hybrid Runbook Worker Group
実際にスクリプトを実行させるマシンのことを、Hybrid Runbook Workerと呼びます。特定の端末をHybrid Runbook Workerにするためには、Azure Arc化が必要です。Hybrid Runbookは、Azure Arcの拡張機能として提供されます。
Hybrid Runbook Workerは、Hybrid Runbook Worker Groupという論理的なグループによって管理されます。特定のコマンドを実行させる場合、Hybrid Runbook Worker Group単位で指定するため、冗長化するためには、複数のHybrid Runbook Workerを一つのHybrid Runbook Worker Groupに登録します。
Hybrid Runbook Workerは、基本的にインターネットに対する443の通信ができればOKです。詳細な通信要件については、公式ドキュメントをご確認ください。
資格情報
Windowsの場合、Hybrid Runbook Workerで実行するRunbookは、ローカルシステムアカウントで実行されます。ですが、ADコマンドレットを使用する場合など、特定のユーザーで実行させたい場合もあるでしょう。Hybrid Runbookでは、事前に資格情報を設定してRunbookを実行させることが可能です。資格情報は、Hybrid Runbook Worker Groupに紐づけします。
資格情報を指定する場合、特定のフォルダに対するアクセス許可が必要です。Azure VM以外の場合は、次のフォルダーに対する権限を付与します。
- C:\ProgramData\AzureConnectedMachineAgent\Tokens (読み取り)
- C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows (読み取りと実行)
やってみる
本記事では、Hybrid RunbookによるADアカウントの無効化を試してみます。
前提
本記事の手順は、事前に下記サーバーが構築されている前提です。(私はAWS上で構築しました)
- ドメインコントローラー
- OS:Windows Server2022
- コマンドを実行するユーザーを事前作成(Domain Adminsグループに所属)
- Hybrid Runbook Worker用サーバー
- OS:Windows Server2022
- 上記ドメインコントローラーのドメインに参加
- インターネットに対する443の通信が可能
- RSATを事前にインストール(ADコマンドレットを使用するため)
構築環境イメージ
本記事で作成する環境(イメージ)は、以下の通りです。
構築手順
1. Azure Arcのインストール
まずは、Hybrid Runbook Workerの登録に必要なAzure Arc化を実施します。
※このタイミングでは拡張機能は有効になりません
1-1. Azure PortalからAzure Arcを検索する
1-2. 「リソースの追加」をクリックする
1-3. マシンの「追加/作成」>「マシンの追加」をクリックする
1-4. 「単一サーバーの追加」>「スクリプトの生成」をクリックする
1-5. 必要事項を入力して、「スクリプトのダウンロードと実行」をクリックする
1-6. スクリプトをコピーする
1-7. Hybrid Runbook Worker用サーバーでPowerShellを起動する
1-8. コピーしたスクリプトを実行する
※途中でAzureのログインを求められるのでグローバル管理者権限を持つユーザーでログインします
1-9. Azure Arcの画面で登録できていることを確認する
2. Azure Automationアカウントの作成
次に、Hybrid Runbookの設定をするためのAzure Automationアカウントを作成します。Azure Automationの機能を使うためには、最低一つのAutomationアカウントが必要です。
2-1. Azure PortalからAutomationアカウントを検索する
2-2. 「作成」をクリックする
2-3. 必要事項を入力し、 「確認および作成」>「作成」をクリックする
2-4. 作成が完了したら「リソースに移動」をクリックする
3. Hybrid Runbook Worker Groupの作成
続いて、Hybrid Runbook Worker Groupの作成を行います。今回は、Hybrid Runbook Worker Groupを作成するタイミングで、手順1でAzure Arc化したサーバーをHybrid Runbook Workerとして登録します。
3-1. 「ハイブリッド Worker グループ」>「ハイブリッド Worker グループの作成」をクリックする
3-2. 名前を入力し、「ハイブリッド Worker」をクリックする
3-3. 「マシンの追加」をクリックする
3-4. 手順1でAzure Arc化したサーバーを選択し、「追加」をクリックする
3-5. 「確認および作成」>「作成」をクリックする
4. 資格情報の設定
続いて、事前に作成した資格情報を設定し、Hybrid Runbook Worker Groupに紐づけます。これにより、対象のHybrid Runbook Worker Groupで実行するRunbookを、指定の資格情報で実行させることができます。
4-1. 「資格情報」>「資格情報の追加」をクリックする
4-2. Runbookを実行させるユーザーの資格情報を設定し「作成」をクリックする
4-3. 「ハイブリッド Worker グループ」>「手順3で作成したグループ」をクリックする
4-4. 「設定」をクリックする
4-5. 先ほど作成した資格情報を設定し「保存」をクリックする
4-6. Automationアカウントの設定画面に戻る(手順5のため)
5. Runbookの作成
5-1. 「Runbook」>「作成」
5-2. Runbookの種類を「PowerShell」として設定し、「確認および作成」をクリックする
5-3. 「作成」をクリックする
5-4. 実行させるスクリプトを設定する
今回は下記を設定します。paramを設定することで、ジョブの実行時に無効化するユーザーを指定することができます。
param(
[string]$UserName
)
# Active Directoryモジュールのインポート
Import-Module ActiveDirectory
# ユーザーアカウントの無効化
Disable-ADAccount -Identity $UserName
5-5. 「公開」をクリックする
6. フォルダーに対するアクセス権の付与
今回の手順では「資格情報」を設定しているため、指定のフォルダに対するアクセス権が必要です。私はこの仕様に気づかず、かなりハマりました...
6-1. Hybrid Runbook Worker用サーバーで指定のフォルダに権限を付与する
※Runbookを実行させるユーザーに下記の権限を付与します(ProgramDataは隠しファイルです)
- C:\ProgramData\AzureConnectedMachineAgent\Tokens (読み取り)
- C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows (読み取りと実行)
動作確認
今回は「testdiable」というユーザーをテスト用の作成しました。このユーザーをHybrid Runbookで無効化していきます。
実行させたいRunbookの画面から「実行」をクリックします。パラメーターにユーザー名を設定し、上記手順で作成したHybrid Runbook Worker Groupを選択して「OK」をクリックします。Runbookを実行すると「ジョブ」が作成されます。
「ジョブ」作成後、5分程度待つとテスト用のユーザーが無効化されたことを確認できました。
おわりに
いかがでしょうか。ジョブはLogic Appsからも作成できるので、色々と活用の余地がありそうです。Sentinelのアラートからトリガーするのもおもしろそうですね。