-- Views
March 03, 26
スライド概要
SECCON 14 電脳会議にて行った「APTシナリオに基づいたMicrosoft Entra ID環境における攻撃手法の分析と実践」の資料です。
ギャルゲー風セキュリティブログ作りにハマってます。
APTシナリオに基づいた Microsoft Entra ID環境における 攻撃手法の分析と実践
Entra環境への 模擬攻撃を通じて 現代インフラの基礎を 理解する
禁止事項 • 資料、成果物等の二次配布 • 本Workshopで学んだことの悪用
本日のシナリオ Midnight Blizzard (APT29) • 背後にロシアが関与すると される脅威アクター • a.k.a. NOBELIUM, Cozy Bear 本シナリオは、2023年末から2024年1月にかけて、ロシアの脅威アクターであるMidnight Blizzardによって行われた、Microsoftの企業環境への実際の侵害シナリオをベースとする。 マルチテナントであるMicrosoftのテスト環境に所属するユーザをパスワードスプレーで侵害後 、本番の企業環境へホップし、最終的にメールの窃取を行ったシナリオとなっている。
example.local stg-example.local ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
Q. そもそもEntraって なに?
A. MSが提供するセキュリティ 関連製品ファミリ
Q. どうしてEntraを学 ばないといけないの?
A. MSがEntraを推して いるから
• 現代エンタープライズにおけるクラウドベース の認証基盤として、そのほとんどがEntraを採 用している。 • 多くのエンタープライズがAcrive Directoryを 採用している。 • オンプレADからEntraハイブリッド・Entraネ イティブ環境への移行が進んでいる。
Entraハイブリッド/ネイティブ https://learn.microsoft.com/jajp/entra/identity/devices/concept-hybrid-join
ハンズオンパート
シナリオの全体像 stg-example.local example.local ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
ハンズオンの進め方 1 2 スライドと講義 ベースでインプッ ト 手順書を見ながら 手を動かして攻撃 ×8
ハンズオン時の心構え • 詰まったら周りの人かチューターに聞く • 漠然とコマンドを打たない • どのユーザがどの権限を持って何に対して何 をしようとしているかを理解しながらコマン ドを打つ 範馬刃牙 第10巻「第82話:食事の極意」より
STEP1 AiTM攻撃による 初期侵害
stg-example.local example.local ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
従来のフィッシングによるアカウント侵害 MFAが有効だと攻撃者は認証が完了しな い https://www.trendmicro.com/ja_jp/jp-security/25/j/securitytrend-20251003-01.html
AiTMって? • Adversary-in-the-Middle攻撃のこ と • MFAをバイパスできる https://www.trendmicro.com/ja_jp/jp-security/25/j/securitytrend-20251003-01.html
Evilginxについて 標的となるWebサイトの認 証フローを中継し、認証済み のCookie、パスワード、ユ ーザ名を窃取することができ る。 https://help.evilginx.com/
M365をターゲットとした phishletの例 ターゲットとなるサイトの認 証フローをyamlで定義する ことで、様々なサイトを模倣 したフィッシングサイトを作 れる
ESTSAUTHと ESTSAUTHPERSISTENT
ESTSAUTH ESTSAUTH PERSISTENT • SSOを容易にするた めのユーザのセッシ ョン情報が含まれる 一時的なセッション ・トークン • ブラウザを閉じると このトークンは破棄 される • ブラウザを閉じても 有効期限内であれば 保持され続ける • 「サインイン状態を 維持しますか?」に YESでログインすると 発行される • デフォルトの有効期 限は90日間
AiTMによるMFAバイ パスの防御方法 • FIDO2準拠のパスキーを用いた認証を使用する • ブラウザのパスワードマネージャーを使用する • 条件付きアクセス (CAP)で、認証を許可するデバイスを 絞る etc... https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/microsoft/final/en-us/microsoftbrand/documents/Microsoft%20Digital%20Defense%20Report%202024%20%281%29.pdf https://learn.microsoft.com/ja-jp/entra/identity/devices/protecting-tokens-microsoft-entra-id
STEP2 AzureHound BloodHoundによる内部探索
② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
Hound Familyについて AzureHound → 情報を収集するツール BloodHound → 収集した情報を可視化するプラットフォーム https://bloodhound.specterops.io/collect-data/cecollection/azurehound
デバイスコードフロー • アクセストークンを取得するためのフロー。 • ブラウザがない環境で実行されても認可の要求ができる 。 https://qiita.com/TakahikoKawasaki/items/78eff94cef9274113 1f0#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
accesstoken • 認可を担当。 • JWT (JASON Web Token)形式で、b64URLデコード で内容を確認可能。 • Directory.ReadWrite.All, RoleManagement.ReadWrite.Directoryといった権 限が付与されていることも確認可能。 • 有効期限は1時間であり、これが切れるとリソースへのア クセスができなくなる。 https://datatracker.ietf.org/doc/html/rfc6749#section-1.4
refreshtoken • アクセストークンを取得するために必要なトークン • アクセストークンが無効になった時に、新しいアクセス トークンを取得するために使われる。 https://datatracker.ietf.org/doc/html/rfc6749#section-1.4
STEP3 アプリの乗っ取りと 本番テナントへのホップ
② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
Entraにおけるアプリとは? • アプリは箱や設計図のイメージ。SPはその設計図から 作られるアプリの実体。 • アプリをEntraテナントに登録すると、ホームテナン トにアプリとSPが自動で作成される。 • アプリを登録する時、アプリがシングルテナントかマ ルチテナントかを選択できる。 https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/microsoft/final/en-us/microsoftbrand/documents/Microsoft%20Digital%20Defense%20Report%202024%20%281%29.pdf
Entraにおけるアプリとは? アプリ=設計図 ≒クラス SP=設計図から 作られる実体 ≒インスタンス https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/microsoft/final/en-us/microsoftbrand/documents/Microsoft%20Digital%20Defense%20Report%202024%20%281%29.pdf
アプリが攻撃者に狙われる理由 • ユーザでないアカウントは放置されやすい (アプリ等を含む、 51%のワークロードIDが、作られた後放置されている) • 開発時のテストのためといった理由で、強い権限が付与されや すい • アプリは対話的ではなく、MFAが有効でない https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/microsoft/final/en-us/microsoftbrand/documents/Microsoft%20Digital%20Defense%20Report%202024%20%281%29.pdf
アプリの所有者とシークレット
STEP4 本番テナントでの高権 限ユーザの作成
stg-example.local example.local ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
UPNについて • User Principal Name • ユーザアカウント名@ドメイン名 の形式。 • 一意の値である必要がある。 • Entra IDによるログイン時に必要になるユーザ名という認識で OK https://datatracker.ietf.org/doc/html/rfc2822
ユーザ作成権限及び権限割 り当てのロールについて
MS Graph • EntraやM365等の、MSのクラウドサービスにアクセスできる APIのこと。 • https://graph.microsoft.com がエンドポイントになる。 • もともとはAzure AD Graph APIというものがあったが、2024 年 9 月に廃止・移行が開始した。 • Azure AD Graph時代はoutlook.office.com/apiや api.onedrive.comといったエンドポイントがバラバラだった。 https://learn.microsoft.com/ja-jp/graph/overview
MS Graph https://learn.microsoft.com/ja-jp/graph/overview
Directory.ReadWrite.All • アプリにこの権限を付与すると、テナント内のユーザー・グルー プといったデータの読み取り及び書き込みができるようになる。 ただし、ユーザまたはグループの削除はできない。 https://learn.microsoft.com/ja-jp/graph/permissions-reference
RoleManagement. ReadWrite.Directory • アプリにこの権限を付与すると、テナント内のユーザー・グルー プといったデータのに対してRBAC設定の読み取り・管理ができ るようになる。 https://learn.microsoft.com/ja-jp/graph/permissions-reference
STEP5 テストテナントにおけ る永続化
stg-local.example example.local ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
アプリ作成による永続化 • 既存のアプリではなく新しくアプリを作ることで、ステルス性が 上がり、より長期間の攻撃が可能になる。 • アプリを作成する際、マルチテナントのアプリかシングルテナン トのアプリかを選択できる。
STEP6 アプリへの権限付与
stg-local.example local.example ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
高権限を付与する際の流れ 1. アプリに権限を付与する 2.アプリのrequiredResourceAccess に、権限を要求してい るという情報が入る 3.管理者の同意を待つ (今回は本番テナント側の管理者同意) 4.管理者が権限の付与に同意する 5.管理者のいるテナント側に、アプリが要求していた権限を持つ SPが作成される
STEP7 管理者の同意
stg-local.example local.example ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
アプリへの権限付与時の 管理者同意について 強力な権限は、付与するときにそのテナントの 管理者による同意が必要。
管理者同意で何が起きるのか • マルチテナントアプリから要求されたアクセ ス許可に対して管理者が同意すると、アプリ が存在しない方のテナントでもSPが作成され る。 • 同意時に、クライアントアプリケーションに 要求された権限を確認し、管理者が同意する ことで初めてアプリが実体として使えるよう になる。 https://learn.microsoft.com/ja-jp/entra/identity-platform/application-consentexperience
STEP8 メールの窃取
stg-local.example local.example ② AH/BHによる内部探索 ① ③ 所有しているアプリ のハイジャック フィッシング 初期侵害ユーザ ⑥ OAuth app ⑤ 作成 Directory.Read Write.All RoleManageme nt.ReadWrite.Di rectory ④ Service Principal ⑦ 管理者同意 管理者ユーザ 権限付与 ⑧ Mail.Read 窃取 OAuth app 作成 Service Principal
Mail.Read • 全てのユーザのメールボックスからメールを 取得することができる。
質疑応答・ディスカッション