# ペネトレーションテスト

:::info
AIペネトレーションテスト機能は現在、段階的に提供しています。ご利用を希望される場合は、[こちらのページ](https://flatt.tech/takumi/features/pentesting)からお申し込みください。
:::

## 概要 {#overview}

AIペネトレーションテスト機能は、指定された目的の達成に向けて、Takumi が自律的に脆弱性の発見と攻撃を繰り返す機能です。

ユーザーは攻撃対象と達成したいゴール（例：「利用者データの取得」）を設定するだけで、Takumi が偵察・脆弱性の発見・攻撃の一連のプロセスを自動的に実行します。テスト完了後、攻撃の過程と結果をまとめたレポートが出力されます。

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

## 通常の診断機能との違い {#comparison}

ペネトレーションテストは、ホワイトボックス診断・ブラックボックス診断とは目的やアプローチが異なります。

|                  | ホワイトボックス / ブラックボックス診断           | ペネトレーションテスト                                   |
| ---------------- | ------------------------------------------------- | -------------------------------------------------------- |
| **目的**         | アプリケーション全体の脆弱性を網羅的に検出する    | 特定のゴール（例：機密情報の取得）が達成可能かを検証する |
| **アプローチ**   | 機能×観点のマトリクスに基づいて体系的にテストする | ゴール達成に向けて、攻撃パスを自律的に探索する           |
| **テスト範囲**   | 検出されたすべての機能と観点の組み合わせ          | ゴール達成に必要な経路に集中する                         |
| **出力**         | 脆弱性一覧とその詳細（観点ごとの検出結果）        | 攻撃過程の記録と結果をまとめたレポート                   |
| **適するケース** | 網羅的なセキュリティ診断を行いたいとき            | 実際の攻撃者の視点で特定のリスクを検証したいとき         |

:::info
ペネトレーションテストは脆弱性の網羅的な検出を目的とした機能ではありません。「このゴールは達成可能か」という問いに対する回答を得るための機能です。網羅的な脆弱性検出が必要な場合は、[ホワイトボックス診断](/docs/ja/t/assessment/features/whitebox-assessment.md)または[ブラックボックス診断](/docs/ja/t/assessment/features/blackbox-assessment.md)をご利用ください。
:::

## 事前準備 {#prerequisites}

ペネトレーションテストを開始する前に、組織認証が必要です。詳細は「[診断前の組織認証あるいは所有権証明](/docs/ja/t/assessment/features/assessment-authentication.md)」を参照してください。

## ペネトレーションテストの作成 {#create}

サイドバーの「診断」をクリックし、画面上部の「ペネトレーションテスト」タブを選択すると、ペネトレーションテストの一覧画面が表示されます。「新規作成」ボタンを押すと、作成方法を選択するダイアログが表示されます。

- **新規作成**：空の設定から新しいテストを作成する
- **既存のテストから作成**：過去のテストの設定を引き継いで作成する。同じ対象に対する再テストや、設定を一部変更して実行する際に利用する

いずれかを選択すると、設定画面に遷移します。

### 設定 {#settings}

基本設定の項目は以下のとおりです。

- **テスト名**：このテストを識別するための名前を入力する
- **レポート言語**：レポートの言語を選択する（日本語または英語）
- **クレジット上限**：テストで消費するクレジットの上限を設定する。100 以上の値を指定する必要がある

### スコープ {#scope}

テストの対象範囲と対象外を定義します。Takumi はスコープの定義に基づいて、テスト対象のシステムを判別します。

**対象範囲**には、テスト対象として許可するシステムを 1 つ以上登録してください。**対象外**には、テスト中にアクセスしてはならないシステムを登録します。たとえば、対象範囲に登録したシステムと関連するインフラや外部サービス（同一ドメイン上の管理画面、連携先の API、同一アカウント内の他のクラウドリソースなど）のうち、テストに含めたくないものがある場合は、対象外として明示的に登録してください。対象外のスコープが明確に定義されていない場合、Takumi が攻撃パスの探索中にそれらのシステムへアクセスする可能性があります。

Takumi はスコープを遵守するよう制御されていますが、自律的に攻撃パスを探索する性質上、テストの過程でスコープ外のシステムへアクセスする可能性を完全には排除できません。万が一そのような事象が発生した場合は、テスト中の操作記録をもとに事後確認が可能です。詳しくは[テスト中の操作の確認](#audit)を参照してください。

各エントリには以下の種別を指定できます。

| 種別         | 説明                        | 入力例                                 |
| ------------ | --------------------------- | -------------------------------------- |
| URL          | Web アプリケーションの URL  | `https://example.com`                  |
| IP アドレス  | IP アドレスまたは CIDR      | `192.168.1.0/24`                       |
| AWS          | AWS アカウント ID           | `123456789012`                         |
| Google Cloud | GCP プロジェクト ID         | `my-project-id`                        |
| Azure        | Azure サブスクリプション ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
| その他       | 上記に当てはまらない対象    | `S3 bucket s3://company-data`          |

各エントリには任意で補足情報を追加できます。

### 目的 {#objective}

テストの目的を定義します。以下の 3 つの要素から構成されます。

- **最終的な攻撃対象**：攻撃の起点となる URL やシステムを指定する。スコープの対象範囲に含まれるエントリから選択するか、「カスタム」を選択して自由に入力できる
- **ゴール**：達成したい目標を選択する。以下の 4 つのプリセットから選択できる
  - 利用者データの取得
  - 個人情報の取得
  - 機密情報の取得
  - システムへの侵入（任意コード実行）
- **補足情報**（任意）：ゴールの詳細や、対象データの定義、制約条件などを記述できる

### 破壊的な操作 {#destructive}

テスト中に、対象への**破壊的な操作**（大規模なサービス停止、不可逆なデータ破壊、システムへの致命的なエラーを及ぼしうる操作）を Takumi にどの程度許可するかを選択できます。

以下の選択肢が利用できます。

- **避ける**：Takumi は破壊的な操作を避け、それが唯一の手段であってもゴールを達成せずに終了する
- **最小限**：Takumi はまず非破壊的な手段を尽くし、他に方法がない場合の最終手段としてのみ破壊的な操作を行う
- **許可**：Takumi は破壊的な操作に特別な制限を設けずに行う

:::info
対象システムの状態や構成によっては想定外の挙動が生じうるため、「避ける」を選択しても、対象が予期せぬ破壊的な影響を受けないことを完全に保証するものではありません。
:::

### 認証情報 {#credentials}

対象システムにログインが必要な場合、認証情報を設定します。認証情報は複数設定でき、それぞれに以下の項目を指定します。

- **認証方式**：「パスワード」または「その他」を選択する
  - パスワード認証の場合、ユーザー名とパスワードを入力する
  - その他の場合、認証手順の説明を入力する
- **ロール / アカウント種別**（任意）：管理者、一般ユーザーなどのアカウントの役割を記述する
- **利用対象**（任意）：この認証情報を使用する対象を、スコープのエントリから選択する

:::info
対応している認証方式は ID / パスワード認証のみです。TOTP を利用する場合は、認証方式で「その他」を選択し、手順を記述してください。SMS やメールへのコード送信など、アウトオブバンド通信が必要な認証方式には対応していません。
:::

### 参考ファイル {#reference-files}

テスト中に Takumi が参照できるファイルをアップロードできます。API 仕様書やアーキテクチャ図など、テストの手がかりとなる資料がある場合に活用してください。

- 最大 5 ファイルまでアップロード可能
- 各ファイルのサイズ上限は 10 MB

## 開始前の確認事項 {#disclaimer}

ペネトレーションテストは、実際の攻撃者と同じように対象システムへ能動的に攻撃を行う機能です。開始前に、以下の事項を必ずご確認ください。テスト開始時の確認ダイアログでも、これらへの同意を求めています。

- **対象システムの所有権または承諾**：テスト対象のシステムは、ご自身が管理者であるか、管理者から明示的な承諾を得たものに限ります。承諾のない第三者のシステムへテストを行い損害が生じた場合、利用規約に従い利用者が責任を負うことになります。
- **対象システムへの影響**：テストの過程で、対象システムやデータに対して変更・破壊を伴う操作が行われる可能性があります。[破壊的な操作](#destructive)のポリシーを「避ける」に設定した場合でも、その影響を完全には排除できません。
- **テスト中に作成されるリソース**：テストの過程で、検証用のアカウントやリソースが対象システム上に作成されることがあります。Takumi はテストの終了時にこれらを可能な限り削除するよう制御されていますが、すべてが確実に削除されることを保証するものではありません。攻撃の足がかりとして残存しうるため、テスト終了後は対象環境を確認し、不要なものを削除してください。
- **スコープ外へのアクセス**：スコープ外の対象へのアクセスは監視・抑止していますが、Takumi が自律的に攻撃パスを探索する性質上、完全には防止できません。詳しくは[スコープ](#scope)を参照してください。

## テストの開始 {#start}

すべての設定が完了したら、「ペネトレーションテストを開始」ボタンをクリックします。確認ダイアログが表示されるので、[開始前の確認事項](#disclaimer)に同意したうえで開始してください。

テストが開始されると、ステータスが「実行中」に変わります。

## 進捗の確認 {#monitoring}

テスト実行中は、対象テストのページから「進行状況を確認する」ボタンをクリックすると、リアルタイムの進捗画面を確認できます。ペネトレーションテストは通常、数時間〜1日程度で完了します。

進捗画面では、攻撃の到達点を時系列で示す**タイムライン**と、攻撃経路を視覚的に示す**侵入マップ**を確認できます。進捗画面はテスト完了後も引き続き閲覧可能です。

![進捗画面](/docs/ja/_md-assets/a0b608e5d4-progress.png)

:::info
実行中のテストは、テスト一覧画面のメニューからキャンセルすることもできます。
:::

## 結果の確認 {#results}

テストが完了すると、Takumi が生成したレポートを Web 上で閲覧できます。レポートには、攻撃の過程で実施した操作と、ゴールの達成結果が記載されます。

テスト詳細ページの「進行状況を確認する」ボタンから、タイムラインと侵入マップも引き続き確認できます。

### レポートのダウンロード {#download-report}

レポートページの「Markdownをダウンロード」ボタンをクリックすると、Markdown 形式でレポートをダウンロードできます。

## テストの再開 {#resume}

ペネトレーションテストが目的を達成できないまま完了した場合、ステータスが「**再開待ち**」に移行します。その際、レポートを確認したうえで、再開分のクレジット上限を設定し、必要に応じて追加の指示を添えて Takumi にテストを再開させることができます。

本機能では、最初に設定したスコープ・認証情報・参考ファイルがそのまま引き継がれるほか、Takumi は前回のレポートを参考にしたうえでテストを再開するため、より効率的に追加のテストを行わせることが可能です。

再開も対象システムへ改めて攻撃を行う操作であるため、開始時と同じく[開始前の確認事項](#disclaimer)への同意を求めるダイアログが表示されます。

:::info
再開せずに、現在の結果のままテストを完了することもできます。テスト詳細ページの「現在の結果で完了する」ボタンを押すと、ステータスが「実行済」になります。完了したテストは再開できません。
:::

## テスト中の操作の確認 {#audit}

テスト中に Takumi が実行した操作の記録は、すべてサーバー側で保全されています。意図しない操作が行われた可能性がある場合は、事後に確認が可能ですので、サポートまでお問い合わせください。

## クレジット消費について {#credits}

ペネトレーションテストの利用にはクレジットが必要です。

テスト開始時に**クレジット上限**を設定する必要があります。最低値は **100 クレジット**で、デフォルト値も 100 クレジットです。Takumi は設定された上限の範囲内でテストを実行します。上限に達した場合、実行中のアクションが完了した後にテストが停止します。

ペネトレーションテストは、ゴールの難易度や対象システムの規模に応じて消費クレジットが大きく変動します。複雑なゴールや広いスコープを設定した場合は、より多くのクレジットが消費される傾向があります。

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