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

リソースセンターブログ

Pass-the-PRT によるクラウドへの横方向移動

Pass-the-PRT によるクラウドへの横方向移動

May 13, 2023

攻撃者は、オンプレミスの Windows マシン全体にわたって横方向に拡散するために、Pass-the-Ticket、Pass-the-Hash、Overpass-the-Hash、Golden Tickets 攻撃など、さまざまな戦術を用います。 しかし同様の手法は、 Pass-the-Ticket、 Pass-the-Hash、 Overpass-the-Hash および Golden Tickets 攻撃にも有効です。さらに、同様の手法は侵害されたワークステーションから接続されたクラウド リソースへ横方向に移動し、MFA のような強力な認証対策を回避することにも効果的です。

厳選した関連コンテンツ:

この記事では、攻撃者が Pass-the-PRT という攻撃を使って、クラウドへの横方向の移動(lateral movement)を行う方法を説明します。

PRTとは何ですか?

primary refresh token(PRT)は、Kerberos のチケット発行チケット(TGT)に似ています。どちらもシングルサインオン(SSO)を提供するために使用されます。ですが、TGT が Windows システム向けであるのに対し、PRT は Windows 10 デバイスにログインし、その後に再認証を行わなくても Azure や Microsoft 365 のリソースにアクセスできるようにします。Windows 10 デバイスは、Azure-joined もしくはハイブリッド Azure-joined である必要があります。

このプロセスがどのように動作するかの概要は次のとおりです。ログインすると、Windows 10 デバイスは Windows 10 Cloud Authentication Provider と通信します。その Azure AD プラグインが資格情報を検証し、PRT とセッション キーを返します。デバイスは Trusted Platform Module(TPM)を使ってセッション キーを再暗号化し、その後、キーと PRT の両方を LSASS に保存します。さらに、Azure への SSO をサポートするブラウザー(Edge、または Windows 10 拡張機能付きの Chrome)で Web サイトにログインしようとすると、Cloud Authentication Provider がブラウザー用の PRT cookie を作成し、その cookie を使って Azure AD からトークンを取得します。Azure AD は PRT cookie を検証し、ログインを許可します。

(さらに詳しく知りたい場合は、Microsoft documentation、Jairo Cadena による summary of PRT and SSO、Dirk-jan Mollema の article on PRT、および GitHub 上の ROADtokenRequestAADRefreshToken のプロジェクトも確認してみてください。)

PRT を持っているかどうかを確認するには、次のコマンドを実行してください:

      Dsregcmd.exe /status
      

SSO State セクションで AzureAdPrt を確認します。YES に設定されていれば、PRT を持っています。

Image

NO に設定されている場合は、PRT を発行するために必要なため、以下のコマンドでデバイスが Azure AD に参加(joined)しているかどうかを確認してください。

Image

Pass-the-PRT 攻撃の実行

攻撃者がユーザーの PRT とセッション キーを入手できた場合、当該ユーザーとして Web リソースにアクセスできる PRT Cookie を作成し、導入済みの条件付きアクセス要件を回避できます。PRT は 14 日間有効なので、アカウントが無効化されない限り最長 2 週間アクセスできます。

それでは、こうした攻撃を実行する具体的な手順を正確に見ていきましょう。

前提: PRT が発行されている Windows 10 デバイスを侵害済みであり、そのマシンでローカル管理者権限を持っています。

手順の概要:

  1. LSASS から PRT を抽出し、後で使用できるように保存します。
  2. セッションキーを抽出します。
  3. セッションキーを復号し、DPAPI masterkey を使用してそれを活用します。私たちはそれについて Pass-the-Cookie attackで学んでおり、同じアプローチを使います。
  4. 復号した Session Key を使用して、派生キーとコンテキストを取得します。これは、私たちの PRT cookie を作成するために必要です。派生キーは、cookie 用の JWT に署名するために使用されます。
  5. どのシステムからでも、PRT、派生キー、およびコンテキストを使用して新しい PRT cookie を作成します。
  6. cookie を私たちの Chrome ブラウザセッションに取り込みます。これで、ユーザーとして Web サイトで認証されます。つまり、パスワードを知る必要もなく、MFA のプロンプトを処理する必要もありません。

それぞれの手順をさらに詳しく見ていきましょう。

ステップ 1. LSASS から PRT を抽出します。

侵害したマシンの PRT データを確認するには、次のコマンドを Mimikatz release 2.2.0 20200807 以降 で使用します:

      Privilege::debug
Sekurlsa::cloudap
      

出力は以下のとおりです。PRT とラベル付けされた部分をコピーして、後で使えるように保存します。

Image

PRT データが何も表示されない場合は、先ほど示したとおりコマンド dsregcmd /status を実行して、デバイスが Azure AD に参加(joined)しているかどうかを確認してください。AzureAdPrtYES に設定されている場合は、そのマシンで動作している Windows 10 のバージョンを確認します。私たちの検証環境では、攻撃を成立させるために少なくともバージョン 1909 へアップグレードする必要がありました。

Image

ステップ 2. Proof of possession キーを抽出します。

これから、下に強調表示されているセッション キー、つまり「ProofOfPosessionKey」を抽出します。これは暗号化されているため、解読するには DPAPI masterkeys を使用する必要があります。

Image

ステップ 3. セッション キーを復号します。

次に権限を SYSTEM に昇格し、コンピューター コンテキストで実行して、DPAPI masterkey を使用してセッション キーを復号できるようにします:

      Token::elevate
Dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect
      
Image

次に 2 つの値をコピーします。最初は Context の値です:

Image

そして 2 つ目は Derived Key の値です:

Image

ステップ 4:PRT cookies を生成します。

この攻撃の残りの手順は、どのワークステーションからでも実行できます。PRT cookies を生成するには、次のコマンドをそのまま実行します:

      Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
      

出力には Signature with key の後に署名付きの PRT cookies が含まれます。そのテキストをコピーしてください。

Image

ステップ 5:ブラウザーセッションに PRT cookie を注入します。

シークレット モードで Google Chrome を起動し、次のURLへ移動します:https://login.microsoftonline.com 。ログイン情報の入力を求められたら、ページ上のどこでも右クリックし、次に Inspect を選択して Chrome の開発者ツールを開きます。

Application タブに移動し、次に Cookies をダブルクリックして login.microsoftonline.com をクリックします。右側のペインで、上部のアクションバーにある斜めのスラッシュが入った円をクリックして、既存のクッキーをすべてクリアしてください。

次に、表の空の行をダブルクリックして、次の新しいクッキーを追加します。

      Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
HttpOnly: Set to True (checked)

      

その他の項目は既定値のままにしてください。

Image

ページを更新し、クッキーが消えていないことを確認してください。消えていた場合は、どこかでミスをした可能性があるため、手順をもう一度やり直す必要があります。

次に https://login.microsoftonline.com にもう一度移動すると、侵害されたユーザーとして自動的にログインされます。

Image

Pass-the-PRT 攻撃への対策

Pass-the-PRT 攻撃は、正当な SSO プロセスを悪用するため検知が難しいです。有効な対策の1つは、攻撃の最初の段階で実行される Mimikatz の使用を検出できるエンドポイント保護ソフトウェアを使用することです。

とはいえ、検知よりも「予防」のほうがさらに重要です。Pass-the-PRT はラテラルムーブメント(横方向の移動)手法であり、実行するには侵入者がすでに対象のマシンへアクセスできる状態になっている必要があります。Netwrix Active Directory Security Solution のようなツールを使えば、そもそも攻撃者があなたの環境で足場を築くことを防げます。

さらに、この攻撃にはローカルの管理者権限が必要です。Netwrix PolicyPak のようなエンドポイント管理ソフトウェアを使うことで、生産性を損なうことなく、ユーザーからこれらの強力な権限を取り除けます。加えて、コンピューターが悪意のあるソフトウェアを起動するのを防ぎ、さらにブラウザーの設定を保護することも可能です。

共有する

もっと詳しく

著者について

Jeff Warren

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

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