2つの層で検証
自らを攻撃する内部レビューと、独立した外部評価を組み合わせています。
内部の攻撃者視点レビュー
独立したチームが複数回にわたり実際の攻撃シナリオでコードを検証し、発見事項をデータベース層とサーバー層で構造的に解消しました。
外部レビュー — AEGISonar
WebEASMのAEGISonarによる、攻撃対象領域とウェブ脆弱性の独立した外部評価です。
内部の攻撃者視点レビュー — 実施方法
「丁寧にコーディングした」ではなく、実際に侵入を試みました。異なる手法を用いる独立したチームが複数回にわたり並行してコードを検証し、各発見事項は到達可能性を独立して反証する試みを経た後にのみ確定されました。
手法
テストした攻撃シナリオ
以下の攻撃を実際に試み、データベースとサーバーコードのレベルで遮断されることを確認しました。
✓テナント分離の回避
他の事務所のお客様・書類・依頼の読み書きを試みました。読み取りだけでなく、書き込み(INSERT/UPDATE)も事務所↔お客様の関係に紐づけられ、遮断されます。
✓垂直方向の権限昇格
スタッフ→オーナー、お客様→事務所メンバーへの昇格を試みました。ロールの判定と招待の受諾はサーバーとデータベースで強制されます。
✓招待リンクの乗っ取り
メールアドレスが一致しない状態での招待受諾を試みました。ログインのメールアドレスは招待されたメールアドレスと一致する必要があります。
✓MFAの回避
パスワードだけでデータに到達することを試みました。要素を登録した時点で、データベースはaal2(2要素)セッションを要求します。
✓通知・メール中継の悪用とフィッシングの注入
通知経路を通じて偽のログインリンクを注入することを試みました。送信者の識別情報とリンクのドメインは信頼された値に固定されています。
✓登録フローの悪用
サービスを停止させたり事務所アドレスを占有したりするための、登録APIへの匿名の大量呼び出し。サーバールーティング・レート制限・決済セッションの紐づけで遮断されます。
✓秘密情報の露出、XSS、オープンリダイレクト
サーバーの秘密情報がブラウザに漏れないか、ユーザー入力がスクリプトとして実行されないか、リダイレクトが悪用されないかを確認しました。
✓受信SMSウェブフックの偽造
SMS同意を切り替えるための受信ウェブフックの偽造を試みました。必須の署名検証により遮断されます。
確定した実際の問題は、ほとんどが実際のお客様を迎える前に、データベースポリシーとサーバーコードのレベルで解消されました。
正直な境界線
セキュリティは「完了」のない継続的なプロセスです。内部レビューは静的解析とシナリオに基づき、外部のAEGISonar評価で補完しています。お客様が増えるにつれ、テストの範囲を広げ続けています。完璧を主張するのではなく、何をどのように検証したかを透明に示すことを選びます。