著者:田中麻維
大手電機メーカー系のSierに入社後、インフラエンジニアとしてLinuxサーバーの構築や保守・運用、ソフトウェアの開発業務を経験。アイティベル入社後は、IT領域の執筆などを行う。
ペネトレーションテストは、企業のセキュリティを強固なものにするうえで極めて重要です。
ペネトレーションテストでは、対象システムの脆弱性に対して疑似攻撃を仕掛け、攻撃成功の可否と攻撃手法、サイバー攻撃に対するシステムのセキュリティ強度の検証を行います。脆弱性診断に比べて、現実に近いテストを実施でき、サイバー攻撃に対して適切な対策を立てられる点が特徴です。
本記事では、ペネトレーションテストの目的、ペネトレーションテストの種類、効果的なテストの実施方法と対策を解説します。
1. ペネトレーションテストとは
ペネトレーションテストは、システムに対して疑似的に攻撃を行い、攻撃の成否を検証するテスト手法です。実際に攻撃することで、システムはサイバー攻撃を防げるのか、攻撃を防げなかった場合はどの程度の被害や影響があるのかを検証でき、より具体的な対策を立てられます。
狭義のペネトレーションテストは、システムの脆弱性に焦点をあて、ネットワーク、システム、プログラムに対して疑似攻撃を仕掛けます。
一方、広義のペネトレーションテストは、ソーシャルエンジニアリングや攻撃に対する初動・対応といったトレーニングの要素も含み、従業員のセキュリティ意識の向上にも効果的です。
ペネトレーションテストと脆弱性診断の違い
ペネトレーションテストとそれ以外の脆弱性診断、コードレビューの違いは、以下のとおりです。
テスト方法 | 実施目的 | 実施内容 | テスト方法 | 実施期間 |
ペネトレーションテスト | ・サイバー攻撃の成功可否・システムの脆弱箇所の発見・攻撃による被害・影響検証・攻撃手法・シナリオの実証 | ・システムへの疑似攻撃 | ・専用のペネトレーションテストツールの使用・手動によるテスト | 1日~数日 |
脆弱性診断 | ・脆弱性有無の確認・システムに対する脅威の評価・ランク付け | ・自動ツールによるチェック・設定内容の確認 | ・脆弱性診断ツールの使用・一部手動作業 | 数週間~1カ月 |
コードレビュー | ・プログラムのバグや脆弱性有無の確認 | ・ツールによるコードの品質やセキュリティ検査・目視によるソースコードのチェック | ・コードチェックツールの使用・手動のレビュー | 数日~数週間 |
2. ペネトレーションテストの目的
ペネトレーションテストの目的は、主に以下の3つです。
- セキュリティリスクの発見
- 企業のセキュリティポリシーの強化
- 攻撃シナリオのシミュレーション
セキュリティリスクの発見
ペネトレーションテストを行うことで、システムが抱える脆弱性を具体的に特定できます。外部からの脅威に対する適切な対処方法を検討する際には、非常に役立つでしょう。
また、ペネトレーションテストでは、「サーバーの乗っ取り」「機密情報の詐取」といった攻撃目標を設定します。これにより、攻撃を受けた場合の被害と攻撃手法を把握できます。
企業のセキュリティポリシーの強化
現実に即したセキュリティポリシーの立案や対策の強化も、ペネトレーションテストの目的のひとつです。現実に起こりうるサイバー攻撃を模擬的に実行した結果に対して、有効なセキュリティポリシーを作成することで、システム全体の防御体制をより強固にできます。
攻撃シナリオのシミュレーション
ペネトレーションテストでは、疑似攻撃によって攻撃手順も確認できるため、実際のサイバー攻撃をシミュレーションできます。攻撃者の視点からシステムを評価することで、攻撃に対する防御策の改善が可能です。
3. ペネトレーションテストの種類
ペネトレーションテストにはいくつかの種類があり、テスト方法や攻撃元によるテスト種別、テスト手法がそれぞれ異なります。
テスト手法の違いは、以下のとおりです。
テスト方法 | テスト内容 |
ホワイトボックステスト | システム設計やソースコードをもとにしたテスト。システム構成を事前に把握することで、脆弱性がどこにあるのか把握する。どのような攻撃が行われ、脆弱性によってどのような被害が発生するのか深く理解できる。 |
ブラックボックステスト | システム構成や設計情報を伝えずに行うテスト。攻撃者は、事前情報がない状態で、あらゆる手段を使って疑似攻撃を行う。実際の攻撃を想定した状況に近く、攻撃手段やシステムへの影響の把握が可能。 |
グレーボックステスト | ホワイトボックステストとブラックボックステストの中間に位置づけられるテスト。一部情報を提供された状態でテストを実施する。内部構造を理解したうえで、あくまで外部から見た機能や振る舞いに着目してテストを進める点が特徴。 |
また、外部から疑似攻撃を仕掛けるのか、あるいは社内ネットワーク内で疑似攻撃を行うのかによって、外部ペネトレーションと内部ペネトレーションテストの2つのテストに分かれます。
両者の違いは以下のとおりです。
攻撃元によるテスト種別 | テスト内容 | 対象 |
外部ペネトレーションテスト | インターネットや社外から疑似攻撃を仕掛けるテスト。一般的にサイバー攻撃は外部から受けることが多いため、多くは外部ペネトレーションテストを実施する。 | ・公開サーバー(Webサーバー、アプリケーションサーバー)・外部向けインフラ基盤(外部DNSサーバー、メール中継サーバーなど)・インターネットと接続する機器(ファイアウォール、VPNサーバーなど) |
内部ペネトレーションテスト | 社内ネットワークの内部で疑似攻撃を仕掛けるテスト。マルウェアに感染したデバイスやサーバーからの感染拡大を検証できる。 | ・社内システム・DBサーバー・デバイス・社内ネットワークに配置されている機器 |
さらに、ペネトレーションテストの手法にも違いがあります。
テスト手法 | テスト内容 | 検証項目 | テスト参加者 |
シナリオベース | 事前に作成したシナリオ、攻撃目標(情報の不正取得、不正アクセスなど)にもとづき攻撃が成功するか検証する。 | ・攻撃成功可否・脆弱性の問題個所・攻撃手法 | ・攻撃者(テンペスター)・セキュリティ担当責任者・テスト実施時の立会い者 |
脅威ベースのペネトレーションテスト(TLTP) | 攻撃者と防御側に分かれ、疑似攻撃を実施する。攻撃の検知、分析と対処方法を検証できる。担当者のセキュリティスキル向上にも役立つ。 | ・攻撃成功可否・脆弱性の問題個所・攻撃手法・自社の初動、対応状況・担当者のスキル | ・攻撃者(テンペスター)・セキュリティ担当責任者・セキュリティ実務担当者 |
このように、さまざまなペネトレーションテストがあるため、テストの目的や確認したい項目を整理のうえ、実施するテストを決定するとよいでしょう。
4. ペネトレーションテストの進め方
ペネトレーションテストを進めるステップは、以下のとおりです。
- 準備
- テストの実施
- テスト結果の報告
本章では、それぞれのステップを解説します。
1.準備
はじめに、ペネトレーションテストの対象システムとテストの目的を整理し、テスト計画を作成します。
整理する項目(計画書に記載する項目)は以下のとおりです。
項目 | 内容 | 具体例 |
テスト実施日時 | 具体的な日時を決定する | 2024年10月10日〜2024年10月12日 |
対象システム | 対象となるシステムを明確にする | 社内販売管理システムとWebサーバー |
外部向け公開サービス(該当する場合) | 外部に公開されているサービスがある場合、詳細を記載する | インターネット上で公開されている企業のeコマースサイト |
ネットワーク構成 | テスト対象となるシステムが接続されているネットワークの構成情報を記載する | ファイアウォールを経由してインターネットに接続している |
システム構成・環境情報 | システムの構成や環境に関する詳細情報を整理する | Apache 2.4で稼働しているWebサーバー |
ペネトレーションテストの目的 | テストを行う目的を明確にする | 外部からの不正アクセスに対する脆弱性の検出する |
確認すべき項目 | テストで特に確認したい項目をリストアップする | ・SQLインジェクション脆弱性の有無・Webサーバーの設定ミスの検出 |
攻撃者側の環境(実施環境・制約事項) | ペンテスターが使用する攻撃環境や制約を記載する | ・攻撃者は外部のIPアドレスからテストを実施・ファイアウォールルールの一部は解除するが、すべてのポートは開放しない |
テストシナリオ | 具体的な攻撃シナリオを作成する | SQLインジェクションを使用してデータベース情報の漏えいを狙う |
計画作成後、システムオーナーや管理者に計画を説明し、承認を得ることも重要です。
2.テストの実施
ペネトレーションテストは、ペンテスターと呼ばれる専門のテスターが実施します。ペンテスターは、サイバー攻撃に対する技術と知見を持ち、与えられた情報にもとづき疑似攻撃を行う専門家です。
脆弱性診断のようにツールを使用することもありますが、多くのケースではペンテスターが手動で疑似攻撃を行います。現在、サイバー攻撃の手法は多岐にわたっており、機械的に処理できないためです。
なお、ペンテスターの技量によって、同じ脆弱性でも、無効化できるケースとできないケースが発生する場合もあります。つまり、ペネトレーションテストの品質は、ペンテスターのレベルによって左右されるといえるでしょう。
3.テスト結果の報告
テスト実施後、ペネトレーションテストの内容と結果を詳しく報告書にまとめ、システムオーナーや管理者に報告します。この報告書は、今後の改善策や対応策を検討するための重要な資料となります。
報告書に記載する項目は、以下のとおりです。
項目 | 内容 | 具体例 |
サマリー | テストの概要と結果の要点を簡潔にまとめる | 5つの脆弱性を発見し、そのうち3つが重大なセキュリティリスクと判定する |
実施期間 | テストを実施した期間を記載する | 2024年10月10日~2024年10月12日の3日間 |
テスト範囲 | テストの対象システムや範囲を明記する | 社内の販売管理システムと外部に公開されているWebサーバー |
テストを実施した環境 | テストが行われたシステムやネットワーク環境を記載する | Windows Server 2022上で動作するWebサーバー、ファイアウォールを通じた外部ネットワーク接続環境 |
制約事項 | テスト中に発生した制約や限界を記載する | 一部のネットワークポートは、セキュリティ上の理由で開放されていなかった |
テスト結果 | 発見された脆弱性や問題点の詳細を記載する | SQLインジェクション脆弱性が発見され、データベースから機密情報の漏えいリスクが確認された |
テスト実施時の状況 | テスト中に発生した重要な状況やできごとを記載する | テスト中にファイアウォールが特定の攻撃を自動的にブロックしたため、手動でポリシー変更を依頼した |
使用したツール | 使用したペネトレーションテストツール | Nessus、Metasploit、Burp Suite |
テスト終了後の処理 | テスト終了後のシステム処理内容を記載する | テスト終了後、システムの状態を元に戻し、攻撃痕跡をすべてクリアした |
テストの詳細な評価 | テストの結果を詳細に評価する | 認証機構において多要素認証が未導入であり、アカウントの乗っ取りリスクが高いと判定した |
課題点と今後の対策 | 発見された脆弱性に対する課題と対策を提案する | SQLインジェクション対策として、入力値のバリデーションとプリペアドステートメントの導入を提案する |
報告では、テストの結果をわかりやすく伝えるとともに、課題と解決策を明確に説明することが重要です。実施状況は、詳細にわかりやすく記述し、漏れがないように注意する必要があります。
5. ペネトレーションテストのポイント
ペネトレーションテストを効果的で滞りなく実施するためには、いくつか押さえておくべきポイントがあります。
主なポイントは、以下のとおりです。
- テスト範囲の明確化
- テスト実施前の準備
- 結果の報告と対応策の提示
- 定期的なテストの実施
テスト範囲の明確化
ペネトレーションテストを実施する際には、テスト範囲を明確にすることが重要です。
テスト範囲を明確にしないままテストを実施した場合、現実に即した適切なテストシナリオが作成できず、システムの脆弱性を落としてしまう恐れもあります。セキュリティポリシーや対策の不備につながる可能性があるため、注意しましょう。
テスト実施前の準備
ペネトレーションテスト中のシステム攻撃によって、本番環境に影響を与える恐れがあります。場合によっては、業務に重大な支障をきたすこともあるでしょう。
そのため、ペネトレーションテストを実施する場合は、影響範囲や問題発生時の対応を事前に考慮する必要があります。必要に応じて、システムの事前バックアップや緊急時の対処方法を、手順も含めて取りまとめておくとよいでしょう。
結果の報告と対応策の提示
ペネトレーションテストの実施後は、検証結果を整理して報告するとともに、発見した問題点を解決するための対策を提示することが重要です。
具体的な対策としては、以下のようなものが挙げられます。
- アプリケーションの改修
- セキュリティ製品の導入
- セキュリティ設定の見直し
- セキュリティ構成の変更
- セキュリティ製品やアプリケーションのバージョンアップ など
また、従業員の教育をはじめとする、システム以外のセキュリティ対策も考慮しましょう。
定期的なテストの実施
ペネトレーションテストは、一度で終わりではなく、定期的に実行することが重要です。システムや社内ネットワークに脆弱性がないかを定期的に確認し、対応策とセキュリティポリシーを常に更新し続ける必要があります。
半年あるいは1年に1回の頻度で、定期的に実施するとよいでしょう。
まとめ
ペネトレーションテストは、対象システムに対して疑似攻撃を行い、不正アクセスや情報の不正取得といったサイバー攻撃の可否を検証するテスト手法です。攻撃手法や脆弱性がもとで発生する恐れのある被害を把握し、事前に対策を立てることを目的としています。
ペネトレーションテストにはさまざまな種類があり、目的に応じて使い分ける必要があります。ペネトレーションテストの目的や対象範囲を明確にし、適切なテストシナリオを実施することで、効果的な対策とセキュリティポリシーの策定が可能です。