メインコンテンツまでスキップ

グレーボックス診断

概要​

Takumi グレーボックス診断機能は、アプリケーションのソースコードと、そのソースコードが稼働しているアプリケーションのURLの両方を受け取る診断機能です。ソースコードの解析によって脆弱性の候補を洗い出し、稼働中のアプリケーションに対して実際に攻撃を行って再現の可否を確認し、その結果を Web 上でレポートとして出力します。

Shisho Cloud byGMO の Web 画面から利用できます。

動的検証で再現が確認できたものだけが指摘事項として報告されます。静的解析が指摘した脆弱性の候補のうち再現が確認できなかったものは、レポート内の別のセクションに記録されるため、再現が確認できた脆弱性と確認できなかった脆弱性を区別して読むことができます。詳細は 診断結果を確認する をご覧ください。

組織または診断対象の所有権証明​

グレーボックス診断は稼働中のアプリケーションに対してリクエストを送信するため、診断を開始する前に、組織認証あるいは診断対象の所有権証明が必要になります。詳細は「診断前の組織認証あるいは所有権証明」を参照ください。

診断の開始方法​

サイドバーの「診断」をクリックすると表示される画面において、画面右上の「診断を作成」ボタンを押すと診断が開始できます。

既存の診断の設定を引き継ぐ​

過去の診断と同じ設定で新しい診断を実行したい場合は、設定を最初から入力し直す代わりに、既存の診断の設定を引き継いで作成することが可能です。以下の手順で操作してください。

  1. 診断一覧画面の右上にある「診断を作成」ボタンを押す
  2. 表示されるダイアログで「既存の診断から作成」を選択する
  3. 一覧から設定を引き継ぎたい診断を選択する

選択した診断の設定があらかじめ入力された状態で作成画面が開きます。内容を確認・調整してから診断を開始してください。

本機能は、実行に失敗した診断について、同じ設定のもとで診断をやり直す場合にもご利用いただけます。

診断設定​

設定画面の主な項目は以下のとおりです。

  • 診断名:この診断を識別するための名前を入力する
  • レポート言語:診断レポートの言語を選択する(英語または日本語)
  • 診断手法:「グレーボックス診断」を選択する

診断開始の UI

診断タイプ​

診断開始時に、以下の 2 つのモードから選択できます。

  • 全体を診断:対象ソースコードの機能列挙・初回スキャンを一気通貫で実行し、完了後に「診断再開待ち」状態で停止する
  • 一部だけ診断:最初に診断対象のコードベースから「機能」を列挙し、完了すると列挙された機能が表示される

クレジット上限​

クレジット上限は、機能列挙およびスキャンのそれぞれのフェーズについて設定することが可能です(「一部だけ診断」モードの場合は機能列挙のみ)。Takumi は指定されたクレジット上限の範囲内で機能列挙およびスキャンを実施します。

スキャンのクレジット上限は最小 40 クレジットであり、ホワイトボックス診断よりも大きい値が必要です。グレーボックス診断では、この上限を静的解析と、その後に続く動的検証との間で分け合うためです。

ソースコード設定​

以下のいずれかの方法でソースコードを提供できます。

GitHub リポジトリ​

GitHub リポジトリを1つ以上指定できます。「リポジトリを追加」ボタンから診断対象のリポジトリを追加します。この際、対象リポジトリのブランチを指定することができます。指定しない場合は、リポジトリのデフォルトブランチが診断対象となります。

ファイルアップロード​

ソースコードのアーカイブファイルを直接アップロードできます。GitHub 連携が利用できない場合や、ローカルのコードベースを診断する場合に便利です。

  • 対応フォーマット:.zip または .tar.gz
  • 「ファイルをアップロード」ボタンからアーカイブを選択してアップロードする
  • 展開後のルートディレクトリが表示され、後述のファイルスコープの指定で使用される

ファイルスコープ​

診断対象に含めるファイルパスと除外するファイルパスを指定できます。すべてのファイルパスには glob パターン(例:src/auth/**、backend/services/**)を使用できます。スコープを空にした場合、コードベース全体が診断対象となります。

診断範囲​

  • 対象:対象となるリポジトリまたはアップロードしたファイルを選択する
  • 機能タイプ(オプション):機能のカテゴリを指定する(例:authentication、payments、api)
  • ファイルパス:診断対象に含めるファイルパスを指定する

診断対象として指定された場合でも、Takumi の判断によりファイルパスが除外される場合があります。

除外設定​

  • 対象:対象となるリポジトリまたはアップロードしたファイルを選択する
  • 理由(オプション):除外する理由を記録する(例:「テストコード」「自動生成ファイル」)
  • ファイルパス:除外するファイルパスを指定する

アプリケーション設定​

動的検証の対象となる、稼働中のアプリケーションに関する設定です。

  • 対象URL:診断対象に指定したソースコードが稼働しているアプリケーションの URL を入力する。1つのソースコードが複数のオリジンで稼働している場合(例:Web フロントエンドとその API が別ホストで動作している場合)は、複数指定できる
  • スコープ外URL:動的検証において検証対象から除外する URL を指定する
  • アプリケーション内の認証:アプリケーションにログインするための認証情報を設定する。ID とパスワードを入力するほか、「その他」を選択して認証手順を自由記述で説明することもできる。「アカウント種別」(例:管理者、一般ユーザー)には、その認証情報がどの権限を持つものかを記入する
info

スコープ外 URL は、動的検証が何を検証対象として扱うかを判定するために使われます。そのため、スコープ外の URL であっても、診断の過程で Takumi が実際にアクセスすること自体はあり得ます。この設定は、こうしたアクセスを完全に遮断するものではない点にご注意ください。

機能列挙結果の確認​

「一部だけ診断」モードで機能の列挙が完了すると、検出された機能と診断観点の一覧がマトリクス形式で表示されます。この画面において、スキャンに使用するクレジットの上限と各機能・観点ごとの診断優先度を設定することができます。

機能と観点の組み合わせごとに「おまかせ・高・中・低・なし」の優先度を設定でき、優先度の高いものから順に診断されます。「おまかせ」を選択した場合は、Takumi がリスク分析に基づいて優先度を自動的に決定します。

設定後、「診断を開始」ボタンを押すと、実際にスキャンが開始されます。

診断結果の確認と追加スキャン​

スキャン中に指定されたクレジット上限に達するか、すべての組み合わせに対するスキャンが完了すると、診断は「診断再開待ち」の状態で一時停止します。

「診断再開待ち」の診断を開くと、マトリクス画面が再度表示されます。各セルの状態は以下のように表示されます。

状態説明
診断済み診断が完了した組み合わせに表示されます
スキップ診断の必要がないと判定されたためスキップされた組み合わせに表示されます
優先度メニューまだ診断が完了していない組み合わせに表示されます

この画面からは、以下の操作が可能です。

  • 中間レポートのプレビュー:「レポートをプレビュー」をクリックすると、現時点のレポートを別タブで確認できる
  • 追加スキャンの実行:クレジット上限および未診断の組み合わせに対する優先度を設定し、「診断を開始」をクリックして追加のスキャンを実行する
  • 診断の完了:追加スキャンが不要な場合、「診断を完了する」ボタンをクリックして診断を完了する

診断結果を確認する​

診断レポートは Web 上で閲覧いただけます。診断結果の各項目では、どの機能を、どのような観点で診断した結果、どのような深刻度・リスクの脆弱性があったか、そして動的検証によってそれをどのように確認したかが説明されています。

指摘事項に関するセクションの分類は以下のとおりです。

  • 「指摘事項一覧」には、動的検証で再現が確認できた脆弱性が記載されます。各指摘事項には、検証によって何が確認できたかを述べる「検証結果」と、そのために実際に行った操作を示す「再現手順」が含まれます。再現手順は、読み手が同じ手順をたどって脆弱性を確認できる粒度で記述されます
  • 「再現が確認できなかった事項」には、静的解析が挙げた脆弱性の候補のうち、動的検証では再現が確認できなかったものが記載されます。再現していないため、このセクションに再現手順は含まれません

PDF レポートのエクスポート​

診断レポートを PDF としてダウンロードできます。診断レポートページの 「PDFレポートを発行」 ボタンから、表紙の言語(英語または日本語)を選んで発行します。発行が完了すると、ログイン中のアカウントに紐づいたメールアドレスに対して、ダウンロードリンクが送付されます。

ダウンロードリンクの有効期限は 15 分ですが、再度ダウンロードボタンをクリックすることで新しいリンクを取得できます。発行した PDF は 30 日後に削除されるため、必要に応じて保存してください。

再診断の開始方法​

完了した診断のページから「再診断を実行」ボタンをクリックすると、以下の 2 つのモードから選択できます。

  • 全体を再診断:機能列挙から診断をやり直す。元の診断の設定(リポジトリ、診断対象 URL、認証情報など)が入力された診断の作成画面が開き、設定を確認・変更した上で開始できる。診断は開始した時点で作成される
  • 全体を再診断 (クロール結果を再利用):元の診断の設定と機能列挙結果を引き継ぎ、機能列挙を省略してアプリケーション全体の診断を実施する。機能列挙が完了した状態の診断が作成され、診断する機能・観点を確認・調整した上で開始できる

いずれのモードでも、ソースコードは診断の実行時に GitHub から取得し直すため、指定したブランチ(指定がない場合はデフォルトブランチ)の最新のコードが診断されます。元の診断からアプリケーションの機能が大きく変わっている場合は、「全体を再診断」を選んでください。

再診断は、ソースコードを GitHub リポジトリで指定した診断でのみ利用できます。アップロードしたファイルは一定期間のみ保持されるため、ファイルをアップロードして作成した診断は再診断できません。

診断対象への影響について​

グレーボックス診断では、静的解析が挙げた脆弱性の候補を、稼働中のアプリケーションへの攻撃で検証します。サービス停止を目的としたテストは行わず、リクエストの送信レートにも制限を設けていますが、対象の構成や状態によっては想定外の負荷や挙動が生じる可能性があり、可用性への影響がないことを保証するものではありません。

また、診断の過程で、対象アプリケーション上にアカウントやデータが作成されたり、既存のデータが更新・削除されたりすることがあります。

このため、可能な限り、本番環境から独立した検証環境に対して診断を実施することを推奨します。

診断データと認証情報の取り扱い​

診断データ(設定した認証情報を含む診断設定と、機能列挙結果・実行メッセージ・レポートなどの実行結果)は、診断を作成した組織に所属し、かつ以下のいずれかのロールを持つユーザーのみが閲覧できます。

  • オーナー(organization/owner)
  • Takumi管理者(organization/takumi_manager)
  • Takumi利用者(organization/takumi_user)

診断の作成と実行も、これらのロールを持つユーザーが行えます。

また、診断の削除は、このうち「オーナー」または「Takumi管理者」のロールを持つユーザーのみが実行できます。

設定した認証情報は、動的検証の際に対象アプリケーションへログインするため、また既存の診断から設定を引き継ぐために、診断設定の一部として保持されます。保持された認証情報は、診断設定の画面から参照できるほか、診断の実行状況を示すメッセージなどにマスキングされずに表示されることがあります。

診断対象へのログインには、診断用に用意したアカウントを利用することを推奨します。

診断の削除​

診断を削除する際は、サイドバーの「診断」から診断一覧を開き、対象の診断の行の右側にあるメニューアイコンをクリックして「削除」を選択してください。表示される確認ダイアログで delete と入力し、「削除」ボタンをクリックすると削除が実行されます。

なお、診断を削除すると、設定した認証情報を含む診断設定や、機能列挙結果・レポートなどの関連データもあわせて削除されます。削除は元に戻せない操作であり、削除した診断やそのデータを後から復元することはできません。

診断観点​

グレーボックス診断における静的解析は、ホワイトボックス診断と同じ観点でコードをレビューします。

機能単位の診断

  • インジェクション
  • ファイル操作不備
  • XSS
  • 認可制御の不備
  • ロジックの不備

リポジトリ単位の診断

  • 設定不備
  • 認証の不備

インジェクションや XSS などの脆弱性は、診断の網羅性を担保するため、Takumi が事前に特定した「各機能ごと」に検査を実行します。一方、設定不備や認証の不備など、機能ごとに分散せず特定の箇所(設定ファイルやミドルウェア層など)に問題が存在することの多い観点は、対象全体に対して一度だけ実行されます。

これらの観点から挙げられた脆弱性の候補は、稼働中のアプリケーションに対する攻撃によって検証され、再現できたものだけが指摘事項として報告されます。再現できるかどうかは稼働中のアプリケーションの状態に依存するため、静的解析の指摘そのものが正しくても再現に至らない場合があります。たとえば、該当の機能が、設定した認証情報では到達できないデータや権限を必要とする場合が挙げられます。

各観点と OWASP ASVS 5.0 との対応については、OWASP ASVS 5.0 への準拠 をご覧ください。

クレジット消費に関して​

利用にはクレジットが必要です。クレジット消費量は、診断対象の特性やサイズに応じて変動します。

診断開始時および再開時に、機能列挙フェーズとスキャンフェーズそれぞれにクレジット上限を設定できます。各フェーズの消費量が指定した上限を超えることはありません。

おおよその目安として、ある「機能・観点」の組み合わせ(設定画面での特定のセルに該当)に対して、5〜8 クレジット程度が消費されます。ただし、実際の消費量は対象の機能の規模や、診断中に Takumi が発見した手がかりの数等によっても変動するため、上記の範囲に収まらない場合もあります。

なお、診断の実行中は、指定したクレジット上限分があらかじめ残高から確保されるため、表示されるクレジット残高は確保分を差し引いた値となります。詳細は 診断実行中のクレジット確保 を参照してください。

info

実際の消費クレジットが設定した上限を超過した場合でも、超過分のクレジットは請求されません。

たとえば、設定したクレジット上限が 10 であった場合、実際に消費されたクレジットが 11 であっても、最終的に計上される消費クレジットは 10 になります。