編集

次の方法で共有


Azure PaaS で CTFd を使用して Capture the Flag ゲーム サービスを実行する

Azure Database for MariaDB
Azure Key Vault
Azure Log Analytics
Azure Private Link
Azure Container Registry

Capture The Flag (CTF) イベントは、サイバーセキュリティ、DevOps、運用のトラブルシューティングなどのエンジニアリング スキルをテストするために使用できるゲーム化された演習です。 この記事では、Azure のサービスとしてのプラットフォーム (PaaS) とオープンソース CTFd プラットフォームを使用して CTF ゲーム サービスを実行する方法について説明します。

Architecture

CTFd システムに関連する Azure コンポーネントのアーキテクチャの概要を示す図。

このアーキテクチャの PowerPoint ファイルをダウンロードします。

ワークフロー

このシナリオでは、顧客がゲーム サービスをプロビジョニングおよび構成できる CTFd ベースのオープンソースの CTF ソリューションについて説明します。 次のワークフローは、前の図に対応しています。

  1. CTFd Docker イメージは、Azure Container Registry から取得され、顧客にサービスを提供する準備ができています。

  2. CTF の管理者と参加者は任意のデバイスから CTF Web アプリケーションにアクセスします。

  3. CTFd プラットフォームでは、Azure App Service Web App for Containers で実行される Docker コンテナーとして Web アプリケーションをホストします。

  4. Azure Database for MySQL では、ユーザー、チャレンジ、フラグ、ゲーム プレイなどの CTFd データが保持されます。

  5. 状態、ユーザー セッション、その他の CTFd 値は Azure Cache for Redis に保持されます。 この構成によって、複数の CTFd インスタンスへのスケールアウトのサポートが可能になります。

  6. データベースとキャッシュの両方のキーは Azure Key Vault で維持されます。 シークレットにアクセスできるのは Web アプリケーションのみです。

  7. 仮想ネットワークは Azure リソースを互いに接続し、論理的な分離を実現します。 このアーキテクチャでは、Web アプリはネットワーク経由でデータベース、キャッシュ、キー コンテナーと通信します。

  8. Web アプリケーションは Azure Log Analytics にログを送信します。Azure Log Analytics では、サービスで簡単にクエリを実行できるように、すべてのインスタンスからログを集約します。

ネットワーク構成

このテンプレートでは、前の構成、および vnet 入力パラメーターを使用する仮想ネットワークがない単純な構成がサポートされています。 次の図では、より単純な構成のソリューションについて説明しています。 上記のワークフローには手順 7 は含まれていません。

CTFd システムに関連する Azure コンポーネントのアーキテクチャの概要を示す図。

コンポーネント

  • App Service Web App for Containers はコンテナー化された Web アプリケーションをホストし、インフラストラクチャを直接管理せずに自動スケーリングと高可用性を実現します。

  • Azure Database for MySQL は、クラウドベースのリレーショナル データベース サービスです。 このサービスは、MySQL コミュニティ エディション データベース エンジンに基づいています。

  • Azure Cache for Redis は、バックエンドのデータ ストアに大きく依存するシステムのパフォーマンスとスケーラビリティを向上させます。 システム効率を向上させるために、頻繁にアクセスされるデータをアプリケーションの近くの高速ストレージに一時的にコピーします。

  • Key Vault には、セキュリティで保護された資格情報と証明書の管理が用意されています。

  • Azure Monitor ログ ツールである Log Analytics は情報診断や情報記録に使用できます。また、このデータのクエリを実行して、並べ替え、フィルター処理、視覚化を行うこともできます。 このサービスの使用量に基づく Azure の料金。 Log Analytics を使用して、このソリューションのすべてのサービスの診断ログと使用状況ログをホストできます。

  • Azure ネットワークは各種ネットワーキング機能を提供します。このネットワークは、Azure の別の仮想ネットワークとピアリングできます。

  • Azure ExpressRoute またはサイト間によって、オンプレミスのデータセンターとの接続を確立できます。 このアーキテクチャでは 、仮想ネットワーク内の Azure Database for MySQLAzure Cache for RedisKey Vaultプライベート エンドポイントを使用します。 App Service 仮想ネットワーク統合 は、すべてのデータが Azure 仮想ネットワークを経由してのみ流れるように、仮想ネットワーク上で有効になっています。

代替

  • GitHub の CTFd リポジトリの Docker Compose 定義を使用できます。 ただし、Docker Compose 定義では必要な Web アプリケーション、キャッシュ、データベース サービスが 1 つのホスト マシンにプロビジョニングされるため、スケーラブルでも高可用性でもありません。

  • 必要なサービスを、GitHub の CTFd リポジトリの Docker Compose 定義の記載に従って Azure Kubernetes Service (AKS) にプロビジョニングできますが、そうするとサービスとしてのインフラストラクチャ (IaaS) を管理する必要があります。

  • CTFd の有料レベルを使用し、選択したプランに従って、追加機能がある PaaS を取得できます。

シナリオの詳細

Capture the Flag は、プログラムまたは Web サイトに非表示のフラグが含まれているサイバーセキュリティ演習です。 競争相手は、攻撃と防御スタイルの CTF で、または Jeopardy スタイルの課題で互いにフラグを盗もうとします。

CTF イベントとして他のエンジニアリング プラクティスを教え、実践することはできますが、必ずしも CTF という用語を使用するとは限りません。 たとえば、Microsoft OpenHack コンテンツ パックは CTF とそのプロセスに似ています。 OpenHack には、AI を利用したナレッジ マイニング、機械学習、DevOps、コンテナー、サーバーレス コンピューティング、Azure セキュリティなどのトピックが含まれています。

オープンソース CTF フレームワークでは、設定可能なチャレンジ ページ、リーダー ボード、およびゼロ コードなど CTF に期待されるその他の機能を使用して、あらゆるチャレンジを CTF イベントに変えることができます。 たとえば、Open Web Application Security Project (OWASP) Juice-Shop には、チームがセキュリティ トレーニングを行うためにプロビジョニングおよび実行できるいくつかの一般的な CTF プラットフォームをサポートする CTF プラグインがあります。

最も一般的なオープン CTF プラットフォームの 1 つが CTFd です。 CTFd はオープンソース コンポーネントを使用して構築されており、使用とカスタマイズが簡単です。 マネージド ホスティングと機能の複数のプランから選択することも、独自の環境をデプロイして維持することもできます。 環境の管理にはコストとメンテナンスの影響があります。 ただし、通常はコストが低く、自身でデータを所有し、環境を組織のネットワークと統合できます。 クラウド ベンダーが提供する PaaS を使用して、仮想化されたインフラストラクチャ コンポーネントと比較して、無料のオープンソース ソフトウェアと簡単なメンテナンスと IT 処理を実現します。

この記事のガイダンスを適用し、Azure PaaS を使用してセルフホステッド CTFd 環境を設定します。 その後、参加者に対応するために、CTF 環境を簡単に保守およびスケーリングできます。

考えられるユース ケース

このソリューションは、開発者、DevOps、サイバーセキュリティ コミュニティ、および CTF イベントを実行するチーム向けに最適化されています。

スキルアップ、ハッキング、またはバグ バッシュのすべてのイベントで、このセットアップを使用して CTFd を実行することで、課題ベース、チーム、または個人の進行状況を管理および追跡できます。

考慮事項

以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。

セキュリティ

セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの設計レビュー チェックリスト」を参照してください。

  • 適切な App Service Web アプリケーションのリファレンス アーキテクチャでセキュリティに関する考慮事項を確認します。

  • Azure Database for MySQL ではデータが自動的に暗号化およびバックアップされます。 脅威をさらに軽減するために、Microsoft Defender for Cloud を構成できます。 詳細は、「オープンソース リレーショナル データベース用 Microsoft Defender を有効にする」と「Defender のオープンソース データベース アラートに対応する」を参照してください。

  • トランスポート層セキュリティ (TLS) 経由で Azure Database for MySQL にアクセスすると、サーバーとアプリケーション間のデータ ストリームが暗号化され、中間者攻撃から保護されます。 Docker イメージでルート証明書を使用できるようにする必要があります。 このソリューションでは、ビルド時に証明書をフェッチするカスタム Docker イメージを使用します。 カスタム イメージは Azure Container Registry で管理されます。

  • Azure リソース用のマネージド ID は、他の内部リソースへのアクセスをアカウントに提供します。 このソリューションでは、マネージド ID を使用して、App Service の Web アプリによる Key Vault からのシークレットの読み取りを承認します。

  • データベースやキャッシュの接続文字列などの資格情報は、シークレットとして Key Vault に格納されます。 App Service では、アプリケーション設定またはコードにシークレットを格納することを避けるために、マネージド ID を使用して Key Vault にアクセスします。

  • このアーキテクチャは、設計全体を通じてネットワーク セキュリティを提供します。 パブリックに利用可能な Web アプリケーションから内部サービスへのすべてのトラフィックは、仮想ネットワーク経由でルーティングされます。 また、データベース、キャッシュ、キー コンテナーなどのすべてのバックエンド サービスでは、パブリック ネットワーク アクセスは許可されません。

コストの最適化

コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳細については、「コスト最適化の設計レビュー チェックリスト」を参照してください。

  • CTFd 環境はエフェメラルです。 イベントに必要なリソースを持つ環境を簡単にデプロイおよび廃止できます。

  • このソリューションの実装コストを見積もるには、 Azure 料金計算ツールを使用してください。

オペレーショナル エクセレンス

オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「オペレーショナル エクセレンスのデザイン レビュー チェック一覧」を参照してください。

Azure Monitor は App Service と統合されて、すべての Web アプリ インスタンスから 1 つの場所へのログ記録をサポートします。 Monitor 診断設定は、CTFd コンテナー ログを収集して、Log Analytics ワークスペースに送信します。 そこから、Kusto 照会言語を使って、集約されたログに対するクエリを記述できます。

Log Analytics と Monitor では、サービスに取り込まれたデータがギガバイト (GB) 単位で課金されます。 詳細については、「Monitor の価格」を参照してください。

パフォーマンス効率

パフォーマンス効率とは、ユーザーからの要求に合わせて効率的な方法でワークロードをスケーリングできることです。 詳細については、「パフォーマンス効率の設計レビュー チェックリスト」を参照してください。

このシナリオのデプロイ

ソリューションのデプロイ ファイルは、GitHub に Bicep コードとしてのインフラストラクチャ (IaC) として提供されています。

ソリューションをサブスクリプションにデプロイする最も簡単な方法は、リポジトリのメイン README ファイルの「Quickstart」セクションにある [Deploy to Azure] ボタンを使用することです。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は次のとおりです。

プリンシパル作成者:

  • Avishay Balter | プリンシパル ソフトウェア エンジニアリング リード

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次のステップ