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

ホワイトボックス診断

概要

Takumi ホワイトボックス診断機能は、GitHub リポジトリ連携またはファイルアップロードでソースコードを受け取り、Takumi が診断を行い、結果を Web 上でレポートとして出力する機能です。

Shisho Cloud byGMO の Web 画面から利用できます。定期診断とは異なり、Slack 連携は不要です。

診断の開始方法

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

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

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

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

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

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

診断設定

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

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

診断開始の UI

診断タイプ

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

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

クレジット上限

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

ソースコード設定

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

GitHub リポジトリ

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

ファイルアップロード

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

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

ファイルスコープ

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

診断範囲

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

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

除外設定

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

機能列挙結果の確認

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

診断設定の UI

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

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

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

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

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

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

診断設定の UI

このページからは、以下の操作が可能です。

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

診断結果を確認する

診断レポートは、以下の画面のように、Web 上で閲覧いただけます。

診断結果の各項目では、どの機能を、どのような観点で診断した結果、どのような深刻度・リスクの脆弱性があったかが説明されます。脆弱性が検出されたファイルパス等も含まれています。

診断結果の UI

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

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

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

診断データの取り扱い

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

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

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

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

診断の削除

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

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

診断観点

ホワイトボックス診断では、以下の観点からレビューを行います。なお、対象リポジトリの特性に応じて、実際に診断を行う観点や優先度を別途指定することも可能です。

機能単位の診断

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

リポジトリ単位の診断

  • 設定不備
  • 認証の不備

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

それぞれの詳細については、後述の「OWASP ASVS 5.0 への準拠」をご覧ください。

ブラックボックス診断との違い

ホワイトボックス診断の観点は、静的解析の特性を最大限に活かすため、ブラックボックス診断とは異なる構成をとっています。

例えばブラックボックス診断では、SSRF やコマンドインジェクションなどをそれぞれ異なるリクエストやペイロードで検査するため、観点を細分化することに意味があります。一方、ソースコードを直接解析するホワイトボックス診断では、これらを「外部入力から危険な処理への到達(taint tracking)」という共通のメカニズムで一括して追跡できます。そのため、本診断ではこれらを「インジェクション」という一つの観点に統合し、コードの重複走査を防ぎながら効率的かつ網羅的なレビューを実現しています。

OWASP ASVS 5.0 への準拠

ホワイトボックス診断では、深刻度の高い脆弱性の検出に加え、国際的な基準である OWASP ASVS 5.0 に基づいた網羅的な検査を実施します。

本診断観点と OWASP ASVS 5.0 Level 1 チェック項目の対応表は以下の通りです。

診断観点ASVS チェック項目
インジェクションV1.2.4, V1.2.5, V1.3.2, V1.5.1
ファイル操作不備V5.2.1, V5.2.2, V5.3.1, V5.3.2
XSSV1.2.1, V1.2.2, V1.2.3, V1.3.1, V3.2.2, V4.1.1
認可制御の不備V8.2.1, V8.2.2, V8.3.1
ロジックの不備V2.3.1, V14.2.1, V3.5.1 (※1), V3.5.3
設定不備V3.4.1, V3.4.2, V3.5.2, V4.4.1, V11.3.1, V11.3.2, V11.4.1
認証の不備V3.3.1, V6.2.1–V6.2.8, V6.3.1, V6.3.2, V6.4.1, V6.4.2, V7.2.1–V7.2.4, V7.4.1, V7.4.2, V9.1.1–V9.1.3, V9.2.1, V10.4.1–V10.4.5, V14.3.1

(※1) V3.5.1(CSRF に関する項目)は、偽陽性の発生を抑えるため、稼働中のアプリケーションを用いて動的検証を実施するグレーボックス診断でのみ報告対象となります。

ただし、ホワイトボックス診断では、以下の理由により一部の項目はチェック項目から除外しています。

  • 実質的にカバーされるため省略している項目

    • より具体性の高い他の項目の検査を通じて要件が満たされているか確認できるため、独立した項目としては省略しています
    • 該当項目: V2.2.1, V2.2.2, V3.2.1, V15.3.1
  • 静的解析の対象外となるため省略している項目

    • ホワイトボックス診断(静的解析)の特性上、ソースコードからの判定が困難であるか、または適さないインフラ・運用面の項目を省略しています
    • 該当項目: V2.1.1, V6.1.1, V8.1.1, V12.1.1 (※2), V12.2.1 (※2), V12.2.2 (※2), V13.4.1 (※2), V15.1.1, V15.2.1

(※2) TLS の構成や配信サーバの設定に関する項目のため、稼働中のアプリケーションに対して検査を行うグレーボックス診断では、これらは別途検査対象となります。

チャット経由のホワイトボックス診断との違い

本機能と、Slack や Web チャット経由で利用できるホワイトボックス診断では、動作する Takumi エンジンが異なります。

項目チャット経由Web コンソール経由
網羅性従来通りより網羅的
診断時間従来通り増加傾向
クレジット消費従来通り増加傾向

クレジット消費に関して

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

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

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

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

info

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

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