トレーディング基盤ペネトレーションテスト ― 無認証APIから不正管理者へ
- Home
- 実績
プロジェクト概要
あるフィンテック企業(機密)より、実資金を扱う前段階のトレーディング基盤に対するテストをご依頼いただきました。対象はGraphQLのコアAPI、注文のルーティングとマッチングを担う.NETサービス群、そして運用担当者がユーザー承認やポジション操作を行う社内コンソールです。本番同等のミラー環境に対し、グレーボックスでのペネトレーションテストとして実施しました。結果は個別の衛生問題の羅列ではなく、ひと続きの攻撃チェーンでした。特権的なGraphQLクエリはトークンなしで応答し、アカウント作成経路はクライアントから送られたロール項目を信用していたため、通常のサインアップがそのまま有効な管理者を生み出しました。初期投入アカウントは環境をまたいで同一のパスワードを共有し、署名鍵とデータベース認証情報はリポジトリにコミットされたうえ公開済みコンテナイメージ内でも読み取れる状態で、注文取り込みサービスはメッセージ本文から攻撃者の影響下にある型を復元していました。各段階は非破壊的に実証し、CVSSで評価し、再現手順を添えて文書化し、修正適用後に再テストを行いました。
課題
- 実資金が動く注文経路を、実際の取引を発注・変更・取消することなくテストすること。
- GraphQLのコアAPI、.NETの注文サービス群、運用コンソールという性質の異なる3つのスタックを、限られた期間で網羅すること。
- マスアサインメントを理論上の指摘として報告するのではなく、権限昇格をエンドツーエンドで実証すること。
- 本当に認証が欠落している箇所と、リクエスト経路の別の場所で実施されている制御とを切り分けること。
- 規制上の期限に向けて開発を進めるチームが、実際に実行できる修正順序を提示すること。
アプローチ
- イントロスペクションでGraphQLスキーマを把握し、ベアラートークンなしで到達できるリゾルバーをすべて列挙しました。
- 権限昇格のチェーンは本番ミラー上で構築し、実証の時点で停止して、稼働中の注文フローには一切触れていません。
- Git履歴と公開済みコンテナイメージを監査し、残置された鍵・認証情報・設定を洗い出しました。
- すべての指摘をCVSSで評価し、再現手順を添付したうえで、修正をデプロイ可能な3つの段階に整理しました。
- 修正後に再テストを行い、各チェーンが一箇所で塞がれただけでなく、完全に成立しなくなったことを確認しました。
テストで判明した内容
内容はNDAのもとでクライアントに報告済みです。製品名・エンドポイント・識別につながる詳細は伏せています。他へ応用できるのはパターンの方です。
- 無認証のGraphQLアクセス。本番環境でイントロスペクションが有効なうえ、特権リゾルバーがベアラートークンなしで応答しており、エンドポイントに到達できる者に口座・残高・注文履歴が露出していました。
- マスアサインメントによる権限昇格。登録用ミューテーションがクライアント指定のロール属性を受け入れていたため、通常のサインアップ要求がそのまま完全に機能する管理者アカウントを生成しました。
- 共通の初期認証情報。初期投入されたデモアカウントとサービスアカウントがすべて同一のパスワードを使用しており、同じ値がステージングと本番の双方に存在していました。
- ソースと成果物に残された機密情報。リクエスト署名鍵とデータベース認証情報がリポジトリにコミットされ、さらに公開済みコンテナイメージ内でも読み取れる状態でした。リポジトリ側のローテーションだけでは不十分な状況です。
- 注文取り込みにおける安全でないデシリアライズ。ルーティングサービスがメッセージ本文から攻撃者の影響下にある型を復元しており、マッチングエンジンに隣接するホスト上でのコード実行に直結し得る経路でした。
- ログへの機微情報の書き出し。認証情報や注文明細を含むリクエスト本文全体が、数か月保管されるログファイルに書き出され、業務上の必要がないロールからも参照できる状態でした。
何が修正につながったか
認証はリゾルバーごとに再実装するのではなく、単一のゲートウェイで強制する方式に移行し、開発環境以外ではイントロスペクションを無効化しました。ロールの割当はサーバー側のみで行うようになり、登録時のペイロードは信頼できない入力として扱われます。初期投入された認証情報はすべてローテーションし、露出した鍵は失効・再発行のうえ、コンテナイメージはクリーンなレイヤーから再構築して旧い値が出荷されないようにしました。デシリアライズの受け口は、型の明示的な許可リスト方式に置き換えています。再テストでは、チェーンがどの段階でも成立しないことを確認しました。そして何より重要だったのは、チームがその後に構築したサービスでもゲートウェイ方式を継続したことです。
スコープ概要
- GraphQLコアAPI ― スキーマ、リゾルバー、認可
- .NETの注文ルーティング・マッチングサービス
- 運用コンソールと承認ワークフロー
- ソースリポジトリと公開ビルド成果物
- グレーボックス、本番ミラー環境、非破壊的な実証