出典: Aleksia via Alamy Stock Photo
ASP.NET Coreアプリケーション向けの公開設定ファイルがAzure ActiveDirectory(AD)の認証情報を漏洩しており、サイバー攻撃者がMicrosoftのOAuth 2.0エンドポイントを通じて直接認証し、Azureクラウド環境に侵入できる可能性があることが判明しました。影響を受けた特定の企業はこの抜け穴を閉じましたが、この発見は企業が注意すべき重大なクラウド設定ミスの一例を示しています。
ResecurityのHUNTERチームの研究者が、Azure AD認証情報(ClientIdおよびClientSecret)が、インターネット上で公開されているApplication Settings(appsettings.json)ファイルに露出しているのを発見し、月曜日のブログ記事で明らかにしました。この重大な漏洩により、攻撃者が認証情報を入手すればOAuth 2.0で保護されたエンドポイントに認証でき、「信頼されたアプリケーションになりすます」ことが可能になると記事は述べています。
「このファイルがインターネット上で公開されていたこと自体が重大なリスクです」と記事は述べています。「つまり、機会をうかがうボットから高度な脅威アクターまで、誰でも認証情報を収集し、即座にクラウドアカウントの侵害、データ窃取、さらなる侵入に利用できたのです。」
認証情報を入手した脅威アクターは、SharePoint、OneDrive、Exchange Onlineなどからの機密データの取得、Azure AD内のユーザー・グループ・ディレクトリロールの列挙、Graph APIの悪用による権限昇格や永続化、組織テナント下での悪意あるアプリケーションの展開など、さまざまな悪意ある活動を行うことができます。
「要するに、Azure ADのシークレットを含むappsettings.jsonを公開することは、単なる設定ミスではなく、攻撃者にクラウドの鍵を直接渡す攻撃ベクトルなのです」と記事は述べています。
ASP.NET設定ファイル:王国の鍵
appsettings.jsonは、アプリケーションの動作に必要な重要なデータを保存する中央設定ファイルであり、通常は実行時に自動的に読み込まれると記事は述べています。実際、appsettings.jsonに保存されるデータの種類は、クラウド環境内でさまざまなソフトウェアやアプリケーションがどのように通信・接続するかを示す「何でもあり」の内容です。
このファイルに保存されるデータには、データベース接続文字列(SQL Server、MySQL、PostgreSQL、MongoDBなど)、サードパーティ連携のためのAPIキーやトークン(決済ゲートウェイ、メールプロバイダー、地図サービスなど)、クラウドサービス認証情報(Azure、Amazon Web Services(AWS)、Google Cloud Platform(GCP)など)、Azure AD認証情報(ClientId、TenantId、RedirectUriなど)が含まれます。
「appsettings.jsonファイルは本質的にアプリケーションの設計図です」とHUNTERの研究者は述べています。「アプリがどこに接続するか(データベース、API、クラウドサービス)を指示するだけでなく、認証に必要な認証情報も含まれている場合があります。」
Azure AD漏洩の悪用
この脆弱性を悪用するには、攻撃者はまず漏洩したClientIdとClientSecretを使って、OAuth2のクライアント認証フローでAzure ADに認証し、アクセストークンを取得します。これを取得した後、攻撃者はMicrosoft Graph APIにGETリクエストを送り、テナント内のユーザーを列挙できます。これにより、ユーザー名やメールアドレスを収集し、パスワードスプレーやフィッシング用リストを作成したり、命名規則や内部アカウントを特定したりできると記事は述べています。
攻撃者はまた、Microsoft Graph APIを使ってテナント内のOAuth2権限付与を列挙し、どのアプリケーションが認可されているか、どのスコープ(権限)を持っているかを明らかにできます。最終的に、取得したトークンを使ってグループ情報を利用し、権限の集中や重要なビジネスチームを特定し、組織構造を暴露して主要な標的を特定できると記事は述べています。
「グローバル管理者のような高価値グループは、1人のメンバーを侵害するだけでテナント全体の制御が可能になるため、主要な標的となります」と記事は述べています。
クラウドシークレットの漏洩は管理者を悩ませ続けている
シークレットの漏洩は、あまりにも一般的な設定ミスであり、クラウド環境の設計者が深く考えずに犯しがちなものですが、関係する組織にとって壊滅的な結果を招く可能性があると記事は述べています。今回のケースは、クラウドネイティブアプリケーションにおけるシークレット管理の不備も示しており、開発者がClientId、ClientSecret、ストレージキー、データベースパスワードなどの機密値を直接appsettings.jsonなどの設定ファイルに記載しがちです。
「一見無害なJSON設定ファイルが、実際には組織のクラウド王国へのマスターキーとなり得るのです」と記事は述べています。「appsettings.jsonをインターネットに公開することで、開発者は攻撃者に直接アクセス用トークンを渡してしまい、これらのトークンでAzure ADのID、Microsoft Graphのデータ、ストレージアカウント、さらには高度な管理者機能まで解錠されてしまいます。」
これはローカル環境では問題になりませんが、クラウド環境では、インターネットに公開されたサーバーの設定ミス、不適切なデプロイ手順、Azure Key VaultやAWS Secrets Managerなどの安全な保管庫を使わず、平文の設定ファイルにシークレットをハードコーディングするなど、さまざまな問題が発生しやすいため、より敏感に対応する必要があると研究者は警告しています。
Azureシークレット漏洩を防ぐには
組織が定期的なスキャン、ペネトレーションテスト、コードレビューを実施しない場合、クラウドファイルの漏洩は攻撃者に発見されて悪用されるまで気付かれないままになる可能性があると記事は述べています。
開発チームはまた、シークレットファイルが非常に目立たないため誰にも見つからないだろうと考えがちですが、攻撃者は継続的にクロールしており、dirsearchのようなツールを使ったり、GitHubリポジトリをスキャンしたりして、まさにこの種の漏洩を探しています。
組織がうっかりシークレットを漏洩しないようにするためには、ファイルアクセスの制限、コードや設定ファイルからのシークレットの除去、漏洩した認証情報の即時ローテーション、最小権限の原則の徹底、認証情報の使用状況の監視とアラートの設定など、さまざまなベストプラクティスを守るべきだと記事は述べています。