セキュリティとプライバシーのホワイトペーパー(概要)第 10 章
第 10 章: ログ、監視、インシデント対応
FileBolt の可観測性は、ゼロナレッジの境界と整合していなければなりません。システムは、障害を特定し、攻撃を検知し、性能を定量化しながらも、 新たな機密データの漏えい経路を生まないようにする必要があります。この章では、どのようなイベントを記録するかを定め、特定の情報の記録を明示的に禁止し、アラートと異常検知の方法を整理し、 セキュリティインシデント対応 (IR) のプロセスと、外部への情報発信の原則を詳しく説明します。
10.0 概要
- SHOULD: ログと監視は、必要な運用イベントとセキュリティイベントのみを対象とし、集計とサンプリングを活用して、生の詳細情報の保持を最小限に抑えます。
- MUST NOT: ログ、APM、エラーレポートに、CEK、URL フラグメント (
location.hash)、またはフラグメントを含む完全な URL を含めてはなりません。 - MUST NOT: 平文のコンテンツ、復号されたチャンク、導出可能な鍵素材を記録してはなりません。
- MUST: 列挙、ブルートフォース、トラフィックの急増、異常なパターンに対する検知とアラートを整備し、封じ込めの手段を用意します。
- MUST: インシデント対応のプロセス (トリアージ、封じ込め、フォレンジック、是正、レビュー、コミュニケーション) を維持します。
10.1 記録するイベント (最小限の原則)
システムのログと監視は、「運用とセキュリティに必要な」イベントのみを対象とすべきであり (SHOULD)、ユーザーのコンテンツや機密性の高い認証情報が可観測性システムに取り込まれないようにします。 イベントは、ライフサイクル、認証、ストレージ/ネットワーク、セキュリティ保護に分類し、集計して扱うことを推奨します。
10.1.1 転送ライフサイクルのイベント
- 転送の作成 (transferId の生成)
- チャンクのアップロード完了 (平文ではなく、暗号文のレベルで記録)
- マニフェストの書き込み/更新
- 有効期限切れによるクリーンアップ、ユーザーによる削除/取り消し (クリーンアップタスクの起動と完了を含む)
- ダウンロードの開始/完了 (暗号文のダウンロードのレベルで計測)
10.1.2 認証・認可のイベント
- セッショントークンの発行、検証の失敗 (スコープの不一致、期限切れ、取り消し済みなど)
- 長期ログイントークンの検証の失敗 (管理操作の拒否)
- 不審なアクセスパターン: 401/403/404 の異常な急増
注: 記録するのは「結果と理由コード」のみです。トークンの平文、Authorization ヘッダーの平文、署名パラメーターの平文を記録してはなりません (MUST NOT)。
10.1.3 システムの健全性とパフォーマンスの指標
- リクエストのレイテンシー (p50/p95/p99)、エラー率、スループット
- オブジェクトストレージの読み書き失敗率、オリジン取得の失敗率、リトライ回数
- エッジノードの異常、キューの滞留、バックグラウンドのクリーンアップタスクの成功率
- 帯域幅とトラフィックの推移 (集計した単位)
10.1.4 セキュリティ保護のイベント
- レート制限の発動、WAF/ファイアウォールのルールへの該当
- 列挙やブルートフォースの疑いがある動作のしきい値超過
- 異常な同時実行数とトラフィックのパターン (同一の送信元からの高い同時実行数、リソースへの異常なアクセス集中)
10.1.5 集計とサンプリング
- SHOULD: 件数とレイテンシーの分位数を分/時間単位で集計し、粒度の細かいログを減らします。
- SHOULD: 成功した高頻度のリクエストはサンプリングし、エラーや異常な経路についてのみ必要な詳細を保持します。
- SHOULD: 異常イベントについては、監査や機械による分析を容易にするため、安定した分類フィールド (eventType、reasonCode など) を保持します。
10.2 記録を禁止する情報 (CEK、フラグメント、認証情報)
ゼロナレッジの約束を守るうえで重要なのは、すべての可観測性システムで「機密データの記録禁止」ポリシーを厳格に適用することです。 このポリシーは、サーバーログ、APM、エラーレポート、サードパーティの監視ツール、クライアントのログ、ブラウザのコンソール出力のすべてを対象としなければなりません。
10.2.1 サーバー側で記録してはならないもの (MUST NOT)
- CEK (コンテンツ暗号鍵) と、導出可能なすべての素材
- URL フラグメント (
#...)、location.hash、およびフラグメントを含む完全な URL - 平文のコンテンツ: ファイルの平文、プレビューの内容、復号されたチャンク、または平文の要約
- 機密性の高い認証情報の平文: セッショントークン、長期トークン、Authorization ヘッダーの平文、署名付き URL に含まれる署名フィールドの平文
デバッグのために URL を記録する必要がある場合は、サニタイズ (フラグメントの削除、機密性の高いクエリのマスクまたは削除) を必ず行い (MUST)、それをコードのレベルで強制します (人手による運用ルールに頼りません)。
10.2.2 クライアント側で記録してはならないもの (MUST NOT)
- 本番環境で
location.href(フラグメントを含む可能性があります) を出力しないこと - フラグメント、CEK、noncePrefix を含む URL をエラーレポートに含めないこと
- デバッグログと開発者ツールの出力は、デフォルトでは無効にするか最小限にすること
SHOULD: フロントエンドでログ/レポートの出力用関数を 1 つにまとめ、出力や送信の前に、その内部で URL のサニタイズと機密フィールドのフィルタリングを行います。
10.3 監視指標とアラート (可用性、パフォーマンス、セキュリティ)
10.3.1 可用性とパフォーマンスのアラート
- エラー率のアラート: 5xx の急増、4xx の異常な上昇 (認証の失敗と不正利用を区別する)
- レイテンシーのアラート: p95/p99 のしきい値超過、リージョンごとのオリジン取得の異常
- ストレージのアラート: オブジェクトストレージの書き込み失敗の増加、読み取りのタイムアウト
- クリーンアップタスクのアラート: 有効期限切れのクリーンアップの滞留、削除タスクの過度なリトライ
10.3.2 セキュリティのアラート
- レート制限の発動率の異常な上昇
- 同一の送信元からの高頻度の 401/403/404 (列挙やブルートフォースの疑い)
- 単一のリソースに対する異常なダウンロード帯域幅/同時実行数 (トラフィックの洪水やホットリンクの疑い)
- 重要なポリシーの変更 (WAF ルール、CSP/ヘッダーの変更など) は、変更監査とアラートの対象とすべきです (該当する場合)
10.3.3 アラートの運用管理
- SHOULD: アラートを分類 (P0/P1/P2) し、ローテーションとエスカレーションの経路を設けます。
- SHOULD: ノイズの多い指標にはデバウンスやウィンドウ集計を適用し、アラート疲れを避けます。
- SHOULD: 各アラートには、機密データを含まない最小限の診断情報 (理由コード、推移グラフ、影響を受けるリージョン/経路) を添付します。
10.4 異常検知と不正利用の特定
ファイル転送サービスは、その性質上、列挙、ブルートフォース、トラフィックの洪水、リソースの不正利用といったリスクにさらされます。このセクションでは、検知できるシグナルと対応の原則を示します。 具体的なしきい値や対策は、事業の規模と誤検知のコストに応じて、動的に調整する必要があります。
10.4.1 代表的な異常パターン
- 列挙: 短時間に transferId やリソースのパスを大量に探る試行、404/401/403 の急増。
- ブルートフォース: 短いコード、パスワード、トークンに対する高頻度の試行、異常な失敗率の推移。
- トラフィックの洪水: 単一のリソースの異常な帯域幅、同一の送信元からの大量の同時接続、繰り返されるダウンロード。
- プロトコルの異常: 不自然なチャンクの順序、重複したアップロード、頻繁な中断とリトライ、異常な UA パターン。
10.4.2 緩和策 (原則)
- SHOULD: レート制限、段階的なブロック、チャレンジの仕組み (該当する場合)、ASN/リージョン/フィンガープリントに基づく動的なポリシーを用います。
- SHOULD: 誤検知の影響を受けやすい経路 (通常のユーザーでも頻繁にダウンロードすることがあります) には、遅延や段階的なスロットリングなど、より穏やかな対策を採用します。
- MUST: 実施した措置について、監査可能な発動条件 (理由コード、しきい値の区分) を保持し、(該当する場合) サポート窓口を提供します。
10.5 インシデント対応プロセス
FileBolt は、被害を素早く抑え込み、事後に検証でき、透明性のある情報発信ができるよう、セキュリティインシデント対応 (IR) のプロセスを確立しなければなりません (MUST)。 ゼロナレッジの約束に影響しうるイベント (XSS、サプライチェーンへの不正コード混入、フラグメントのログへの漏えいなど) は、最優先で扱うべきです。
- トリアージ: 影響範囲と重大度 (P0/P1/P2 など) で分類し、エスカレーションの経路と担当者を定めます。
- 封じ込め: リスクの発生源を速やかに隔離します (攻撃元のブロック、機能の一時停止、ポリシーの強化、鍵やトークンのローテーション)。
- フォレンジックとレビュー: 最小限のログと指標をもとにタイムラインを再構築し、判断、影響、是正、改善点を文書化します。
- 是正と検証: パッチの適用、回帰テスト、セキュリティの検証を行い、必要に応じて第三者によるスキャンを再実施します。
- コミュニケーションと開示: 攻撃対象領域を広げない範囲で、ユーザーと一般に向けて透明性をもって説明し、必要に応じてステータスページでインシデントレポートを公開します。
外部への情報発信では、鍵素材や平文が露出した可能性があるかどうか、影響範囲、実施した対策、ユーザーに必要な対応 (ある場合) を明確にすべきです。
10.6 データの保持とアクセス制御
ログと監視データは、それ自体が機密性の高い資産です。漏えいや悪用のリスクを最小限に抑えるため、実用上最短の保持期間と、最小権限のアクセス制御を適用すべきです。
- SHOULD: ログの種類ごとに保持期間を変えます (エラーとセキュリティイベントはやや長く、成功したリクエストの詳細は短くするか保持しない)。
- SHOULD: ログと監視のプラットフォームには最小権限のアクセス (RBAC) を採用し、アクセスの監査記録を保持します。
- SHOULD: ログをエクスポートまたは共有する際は、サニタイズと最小化を行います (機密性の高い認証情報や PII を含めることを禁止します)。
10.7 サードパーティの監視ツールと連携の原則
サードパーティの APM やエラー追跡ツールは、デフォルトで URL、ヘッダー、フォームのフィールド、デバイス情報を収集する場合があります。 サードパーティの監視ツールを使用する場合は、その収集範囲がゼロナレッジの約束に反しないことを確認してください。
- MUST: ダウンロード/復号のページでは、サードパーティのスクリプトを読み込みません (第 9 章と同様です)。
- MUST: サードパーティの収集設定を明示的に行います。フラグメントを収集せず、機密性の高いヘッダーの平文を収集せず、平文のコンテンツを収集しません。
- SHOULD: レポート用の URL のサニタイズを一元化し、機密フィールドを含む可能性のあるペイロードは、禁止するか強力にマスクします。
- SHOULD: エンドポイント側の収集範囲を減らすため、クライアント側の細かな計測よりも、サーバー側の集計指標を優先します。
10.8 関連するクレーム ID (予約)
この章は、「機密データの記録禁止、アラートと IR、サードパーティの監視ツールの制約」を扱います。 対応するクレーム ID は、 付録: クレーム ID 一覧 に、唯一の正式な情報源として追加されます。