# 2-7-3-ペンテスト (Pentest)

ペネトレーションテスト (ペンテスト) はシステムやアプリケーションに対する攻撃をシミュレートして、悪用可能な脆弱性を特定するものです。ウェブアプリケーションやモバイルアプリケーション、API、ネットワークデバイス、ワークステーション、サーバーなどをテストし、SQL インジェクション、コードインジェクション、XSS、権限昇格などの問題を明らかにします。

ペネトレーションテスト担当者はスキャンや情報収集に自動ツールを使用しますが、ほとんどのテストは手作業で行われます。マニュアルテストはビジネスロジックに関連する脆弱性や、自動スキャンでは見逃される可能性のあるその他の問題を検出するために不可欠です。

ペネトレーションテストはソフトウェア開発ライフサイクルのテストフェーズで実施でき、アプリケーションがデプロイされる前に脆弱性が対処されることを確保します。また、アプリケーションが本運用となった後でも実行でき、ライブ環境でのセキュリティリスクを特定して緩和し、新たな脅威に対する継続的な保護を確保できます。開発プロセスの早い段階で実行するかどうかは、組織がどの程度成熟しているかによって異なります。

## 方法論とチェックリスト

ペネトレーションテストにはブラックボックス、グレーボックス、ホワイトボックスの三方向のアプローチがあります。

* **ブラックボックス:** テスト担当者は、IP アドレスやドメインを除いて、アプリケーションに関する事前情報を持ちません。
* **グレーボックス:** テスト担当者には、テストアカウントのクレデンシャルなどの追加情報が与えられます。このアプローチはコストと効果のバランスがとれており、ホワイトボックステストのような高額な費用をかけずに、より深い洞察を提供します。ほとんどの場合、これが推奨されるアプローチです。
* **ホワイトボックス:** テスト担当者は、アプリケーションのソースコードを含め、テスト対象の資産に関するすべての情報に完全にアクセスできます。

どのアプローチにせよ、ペネトレーションテスト担当者は一般的に公開されているあるいは内部のチェックリストやテストガイドに従うことになります。最もポピュラーなものは以下のとおりです。

* [OWASP Web Security Testing Guide (WSTG)](https://owasp.org/www-project-web-security-testing-guide/) - ウェブアプリケーションとウェブサービスのセキュリティをテストするための包括的なガイド。
* [OWASP Mobile Application Security Testing Guide (MASTG)](https://mas.owasp.org/MASTG/) - OWASP WSTG と同様な、モバイルアプリケーションをテストするための包括的なガイドです。
* [OWASP Top 10](https://owasp.org/www-project-top-ten/) - 最も一般的で影響のあるウェブアプリケーションのセキュリティ脆弱性。
* [OWASP Top 10 API](https://owasp.org/API-Security/editions/2023/en/0x11-t10/) - API に関する最も一般的なセキュリティリスクと脆弱性。
* [OWASP Mobile Top 10](https://owasp.org/www-project-mobile-top-10/) - 最も一般的で影響のあるモバイルアプリケーションのセキュリティ脆弱性を含むリスト。

## プロセス概要

### チーム編成

ペネトレーションテストチームの構成は非常に重要です。以下のいずれかで構成できます。

* **内部:** 組織のシステムとポリシーを熟知しているサイバーセキュリティの専門家。
* **外部:** 専門的なスキルと客観性を求めて雇用される第三者。内部チームが見落とす可能性がある脆弱性を特定する上で、新鮮な視点と専門知識をもたらすことができます。

### スコープ定義

ペネトレーションテストチームを編成した後、組織はテストのスコープを慎重に定義しなければなりません。このステップは、計画した目的からの逸脱や、追加の資産やエンドポイントの意図しないテストを避けるために重要です。スコープ定義は以下を含みます。

* ブラックボックス、グレーボックス、ホワイトボックスの中から方法論を決定します。
* テストフェーズの明確なタイムラインを確立します。
* テストを実施するシステムとエンドポイントを定義します。
* テストを運用環境、ステージング環境、その他のどの環境で実施するかを決定します。
* 要件 (テストアカウント、クレデンシャル、ドキュメントなど) を定義します。

### 要件

スコープと日程が定義されると、ペネトレーションテストチームは組織に要件を伝えます。これには、テストクレデンシャル、アプリケーションドキュメント、ソースコードアクセス、その他の必要なリソースが含まれることがあります。ペネトレーションテストプロセスをスムーズかつ効果的にするには、テスト開始前に、要求されたすべての情報とアクセスを迅速に提供することが、組織にとって重要です。

### 実施

クレデンシャルやドキュメントなどの必要な要件を受け取った後、ペネトレーションテストチームはシステムやアプリケーションの評価を開始します。ペネトレーションテストチームにとって、以下のことが重要です。

* テストによってシステムに何らかの混乱が生じた場合、特にそれが運用中である場合は、業務への潜在的な影響を軽減するために、直ちに組織に通知してください。
* クリティカルな脆弱性を発見した場合は、重大な財務的影響や風評被害をもたらす可能性があるため、速やかに組織に報告し、迅速な修復とリスク管理を可能にします。
* ペネトレーションテストチームはインシデントが発生した侵害の兆候 (Indicators of Compromise, IoC) を発見した場合、直ちに組織に通知しなければなりません。

### 報告

すべてのテストが完了すると、ペネトレーションテストチームは包括的な報告書の作成を開始します。この報告書は以下のように構成すべきです。

* 表紙
* 目次
* エグゼクティブサマリー
* 基本情報
  * ペネトレーションテストチーム
  * 方法論
  * スコープ
* 脆弱性
  * タイトル
  * 深刻度
  * 説明
  * 概念実証 (スクリーンショット付き)
  * 影響
  * 緩和策
  * 参考情報
* 総括

### 再テスト

最後に、報告書を提出し、脆弱性管理プロセスを開始した後、ペネトレーションテストチームは開発者が修正済みとみなしたすべての脆弱性を再テストします。この再テストによって、それぞれの脆弱性がうまく対処され、新しく実装されたセキュリティコントロールへのバイパスが存在しないことを確保します。

***

## ツール

* [BurpSuite](https://portswigger.net/burp) - ウェブアプリケーションのセキュリティテストに使用される包括的なソフトウェアツール。主な機能には、ウェブトラフィックを傍受して変更するためのプロキシ、脆弱性を自動検出するためのスキャナ、repeater、intruder などの手動テストを実行するためのツールなどがあります。
* [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF) - Android と iOS の両方のプラットフォームをサポートする、モバイルアプリケーションのセキュリティテストと分析のための自動化されたオープンソースツール。
* [Postman](https://www.postman.com/) - さまざまな HTTP リクエストの送信、ヘッダの操作、テストの自動化を可能にする API テストツール。認証の問題やデータ漏洩などの脆弱性を特定し、他のセキュリティツールと統合して包括的な分析を行うのに役立ちます。
* [Zed Attack Proxy (ZAP)](https://www.zaproxy.org) - BurpSuite と同様の機能を備えたオープンソースウェブプロキシ。

***

### リンク

* [Awesome Penetration Testing](https://github.com/enaqx/awesome-pentest)
* [OWASP Penetration Testing Methodologies](https://owasp.org/www-project-web-security-testing-guide/latest/3-The_OWASP_Testing_Framework/1-Penetration_Testing_Methodologies)
* [The Penetration Testing Execution Standard (PTES)](http://www.pentest-standard.org/index.php/Main_Page)
