# ブラックボックス診断

## 概要

Takumi ブラックボックス診断機能は、アプリケーションのURL・認証情報を受け取り、当該アプリケーションを擬似的に攻撃し、診断結果を Web 上でレポートとして出力する機能です。

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

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

診断を開始する前に、組織認証あるいはブラックボックス診断対象の所有権証明が必要になります。詳細は「[診断前の組織認証あるいは所有権証明](/docs/ja/t/assessment/features/assessment-authentication.md)」を参照ください。

## 診断の開始方法

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

![診断開始の UI](/docs/ja/_md-assets/d853a2d4c2-ui-simple.png)

### 基本設定

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

- 「診断名」：この診断を識別するための名前を入力する
- 「レポート言語」：診断レポートの言語を選択する（英語または日本語）
- 「診断対象」：「WebアプリのURL」を選択する

### 診断タイプ

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

- 「**全体を診断**」モード：対象アプリケーションのクローリング・初回スキャンを一気通貫で実行し、完了後に「診断再開待ち」状態で停止する。以降の手順は [診断結果の確認と追加スキャン](#診断結果の確認と追加スキャン) を確認する
- 「**一部だけ診断**」モード：クローリング終了時点で Takumi が停止する。その後、診断したい機能・観点の優先度とスキャンに対するクレジット上限を設定してから、診断を再開する。診断範囲を細かくコントロールしたい場合におすすめ

### クレジット上限

クレジット上限は、クロールおよび診断のそれぞれについて設定することが可能です（「一部だけ診断」モードの場合はクロールのみ）。Takumi は指定されたクレジット上限の範囲内でクロールおよび診断を実施します。

### Web アプリケーション設定

Web アプリケーション関連の項目は以下のとおりです。

- 「アプリケーションの URL」：診断対象のアプリケーションの URL を入力する
- 「認証情報」：アプリケーションにログインするための認証情報を設定する

:::info
Takumi は診断中に新たなアカウントを作成せず、事前に設定された認証情報のみを使用してログインします。対応している認証方式は以下のとおりです。

- ID / パスワードによる認証
- 事前に共有されるシークレットコードを活用した TOTP（時間ベースのワンタイムパスワード）認証

SMS やメールへのコード送信など、アウトオブバンド通信が必要な認証方式には現在対応しておりません。
:::

## クロール結果の確認

### 優先度とクレジット上限の設定

「一部だけ診断」モードを選択した場合、クロール完了後に診断が一時停止します。対象の診断のページを開くと、検出された機能と診断観点の一覧がマトリクス形式で表示されます。

この画面において、スキャンに使用するクレジットの上限値と診断の優先度を設定することで、診断を開始することができます。

![診断の設定](/docs/ja/_md-assets/0d6684761b-setting.png)

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

優先度とクレジット上限を設定したら、「診断を開始」ボタンをクリックして診断を開始します。

### 追加クロール

「クロール済」状態の診断では、メニューから「追加クロール」を選択することで、追加のクローリングを実行できます。
初回のクローリングで検出されなかったエンドポイントを発見したい場合に有用です。

追加クロールでは、以下の設定が可能です。

- **クレジット上限**: 追加クロールで消費するクレジットの上限値
- **追加クロールの指示**: クロール対象を絞り込むための自由記述の指示（例: 特定のAPIパスに注目してクロールする等）

追加クロールが完了すると、マトリクスに新たに検出されたエンドポイントが追加されます。

:::info
追加クロールを実行しても、必ずしも新しいエンドポイントが検出されるとは限りません。新しいエンドポイントが見つからなかった場合でも、クレジットは消費されます。
:::

### クロール結果の手動編集

「クロール済」状態の診断のページにアクセスし、診断優先度を設定するマトリクスの左下に表示される「クロール結果を編集」ボタンを押すことで、クロール結果を手動で編集する機能を利用することができます。

当該ページでは、以下の操作が可能です。

- 検出された機能にエンドポイントを追加する
- 検出された機能に含まれるエンドポイントを削除する
- 新たに機能、および、その機能に含まれるエンドポイントを追加する

![診断の設定](/docs/ja/_md-assets/c592c18497-ui-manual-edit.png)

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

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

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

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

![診断結果の確認](/docs/ja/_md-assets/3258b83c54-pending.png)

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

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

### 診断を完了させる

「診断を完了する」をクリックすると、診断結果のレポートが表示されるページに遷移します。

### 診断結果を確認する

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

![診断結果の UI](/docs/ja/_md-assets/f0bfa90a43-ui-result-1.png)

フォーマットは、およそセキュリティベンダに診断を依頼した際のアウトプットに近いものです。

![診断結果の UI](/docs/ja/_md-assets/35492e79bc-ui-result-2.png)

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

![診断結果の UI](/docs/ja/_md-assets/495354be92-ui-result-3.png)

### PDF レポートのエクスポート {#pdf-report}

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

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

## 再診断の開始方法

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

- **全体の再診断**：アプリケーション全体に対してセキュリティ診断を再実行する。元の診断の設定（URL、認証情報など）を引き継いだ新しい診断が作成され、設定を確認・変更した上で開始できる
- **部分機能・観点のみ再診断**：前回の診断で脆弱性が検出された機能・観点に絞って再診断を実施する。修正後の確認に向く

いずれのモードでも、診断開始前に設定画面が表示されるため、事前に診断対象やクレジット上限等を調整することが可能です。

![再診断の UI](/docs/ja/_md-assets/01b337d6ae-ui-partial.png)

## 診断観点

Takumi はクロールで検出した各機能に対して、以下のような観点でレビューします。

- インジェクション
- XSS
- CSRF
- SSRF
- ファイル操作不備
- オープンリダイレクト
- 認証の不備
- 認可制御の不備
- ロジックの不備
- クリックジャッキング
- CORS設定不備

各観点はさらに具体的な検査項目に細分化されています。
例えば「インジェクション」では SQL インジェクションや OS コマンドインジェクション、「認可制御の不備」では他ユーザーのデータへの不正アクセスや権限昇格、「ロジックの不備」ではレースコンディションやマスアサインメントなど、攻撃手法ごとに個別の検査が行われます（ここに挙げたものは一例であり、実際にはさらに多くの検査項目が含まれます）。

また、これらの観点全体は、GMO Flatt Security が手動診断サービスとして提供している [Web アプリケーション診断](https://flatt.tech/assessment/web_app)の診断項目をほぼ網羅する形で設計されています。
専門のセキュリティエンジニアが実施する診断と同等の観点を、Takumi が自動で検査します。

特色は、**特に（ビジネス）ロジックの脆弱性が診断対象に含まれること** です。
AI エージェントを活用した弊社技術により、アプリケーション仕様に基づいた診断が可能となっています。

細部が気になる場合は、開発者とのお打ち合わせも可能です。是非お問い合わせください。

## 精度評価

GMO Flatt Securityが独自に脆弱性を埋め込んだデモアプリケーションを対象に、ブラックボックス診断機能単体による診断を行った結果、**約20時間のスキャン** を通して **検出率は48%**、**誤検知（偽陽性）率は33.3%** という結果になりました。

なお、デモアプリケーションには、ソースコードを参照しないと発見が本質的に困難である脆弱性も含まれており、そのようなものを除いた場合の **検出率は70%** でした。

## クレジット消費に関して {#credits}

利用にはクレジットが必要です。

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

診断開始時に **クレジット上限** を設定する必要があり、スキャンはその範囲内で実行されます。スキャン中にクレジット上限に達した場合、実行中のテストが完了した後にスキャンが停止します。

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

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