Webサイトや業務システムは、公開した時点では問題なく動いていても、設計や実装のわずかな不備が、攻撃の入口になることがあります。そうした弱点を、攻撃される前に見つけて対処するための取り組みが、脆弱性診断です。本記事では、脆弱性診断の種類、ペネトレーションテストとの違い、実施のタイミング、進め方、診断会社を選ぶ際のポイントを解説します。日常の保守でできる対策は、サイバー攻撃から守る!システム保守でできるセキュリティ対策もあわせてご覧ください。
脆弱性診断とは
脆弱性とは、システムのプログラムや設定に含まれる、セキュリティ上の欠陥や弱点のことです。脆弱性診断は、システムを調べて、こうした弱点がないかを洗い出し、報告書にまとめる取り組みです。見つかった脆弱性は、修正や設定の見直しを行い、悪用されるリスクを減らします。
脆弱性は、開発した会社が注意していても、ゼロにはできません。新しい攻撃の手法が見つかったり、使っているライブラリに問題が公表されたりすることがあるためです。そのため、第三者の視点で定期的に確認することが、有効な対策になります。
診断の主な種類
Webアプリケーション診断
Webサイトや、Webシステムのプログラムそのものを対象にした診断です。入力フォームなどを通じて、不正なデータを送り込み、問題がないかを確認します。代表的な確認項目には、データベースを不正に操作されるSQLインジェクションや、悪意のあるスクリプトを埋め込まれるクロスサイトスクリプティング、ログインや権限の管理の不備などがあります。診断の観点としては、OWASP(Webアプリケーションのセキュリティ向上を目指す国際的な団体)が公開している「OWASP Top 10」などが、広く参考にされています。
プラットフォーム診断
サーバーやネットワーク機器など、システムの土台となる部分を対象にした診断です。OSやミドルウェアに、既知の脆弱性が残っていないか、不要なポートが開いていないか、設定に問題がないかなどを確認します。
スマートフォンアプリ診断
スマートフォンアプリを対象とした診断です。アプリ内に保存されるデータの扱いや、サーバーとの通信の安全性などを確認します。アプリを提供している場合は、検討したい種類です。
診断の手法:ツール診断と手動診断
- ツール診断:診断ツールを使って、自動的に網羅的な確認を行う方法です。短期間で、比較的低い費用で実施できますが、画面の流れや業務のルールに依存する問題は、見つけにくい傾向があります。
- 手動診断:専門の技術者が、システムの仕組みや業務の流れを踏まえて、手作業で確認する方法です。権限の不備や、処理の順序を悪用した問題など、ツールでは見つけにくい項目を確認できますが、費用と期間は増えます。
重要なシステムや、個人情報・決済情報を扱うシステムでは、ツールと手動を組み合わせる方法が選ばれる傾向があります。
ペネトレーションテストとの違い
脆弱性診断と混同されやすいものに、ペネトレーションテスト(侵入テスト)があります。脆弱性診断は、システムの弱点を、網羅的に洗い出すことが目的です。一方、ペネトレーションテストは、攻撃者の立場で、実際にシステムへ侵入できるか、重要な情報に到達できるかといった目的の達成を試すものです。どちらが優れているというものではなく、目的が異なります。まずは、脆弱性診断で弱点を洗い出し、必要に応じてペネトレーションテストを検討する流れが、一般的です。
診断を実施するタイミング
- 新しいシステムやWebサイトを公開する前(リリース前)
- 大規模な機能追加や改修を行った後
- 定期的に(たとえば年に1回など、システムの重要度に応じて)
- 使っているソフトウェアに、深刻な脆弱性が公表されたとき
- 個人情報や決済情報を新たに扱うようになったとき
特にリリース前の診断は、公開後に修正するよりも、費用も影響も小さく済むため、おすすめです。
診断の進め方
1. 対象範囲と目的を決める
どのシステム、どの機能を対象とするのかを決めます。すべてを診断するのが難しい場合は、個人情報を扱う画面や、ログイン後の機能など、リスクの高い部分を優先します。
2. 診断を行う環境を決める
診断は、本番環境で行う場合と、本番に近い検証環境で行う場合があります。本番で行うと、診断の負荷やデータの変更が、業務に影響する可能性があります。そのため、可能であれば、検証用の環境を用意するのが安全です。検証環境の重要性は、ステージング環境を用意すべき理由で解説しています。
3. 診断を実施する
診断会社が、合意した範囲と手法で、診断を実施します。事前に実施日時を共有し、システムの監視担当者にも伝えておくと、診断による通信を攻撃と誤認するトラブルを避けられます。
4. 報告書を確認し、対応を決める
診断の結果は、報告書として受け取ります。見つかった脆弱性は、危険度の高いものから優先して、修正の計画を立てます。開発・保守を担当する会社と、修正の方法とスケジュールを相談しましょう。
5. 修正後に再診断する
修正が正しく行われたか、新たな問題が生じていないかを、再診断で確認します。再診断が見積もりに含まれているかは、事前に確認しておきたい点です。
費用の考え方
脆弱性診断の費用は、診断の対象(画面数や機能数、サーバーの台数)、手法(ツールか手動か)、診断の深さなどによって大きく変わるため、一律の相場は示せません。見積もりを依頼する際は、次の情報を整理して伝えると、正確な金額が出やすくなります。
- 診断したいシステムの概要と、利用している技術
- 画面や機能のおおよその数
- ログイン機能や、権限の種類の有無
- 診断を行う環境(本番か検証環境か)
- 診断の目的(リリース前の確認、取引先からの要請など)
診断会社を選ぶポイント
- 報告書に、問題の内容だけでなく、具体的な修正の方法が書かれているか
- 再診断が含まれているか、費用はどうなるか
- 診断を担当する技術者の体制と、経験があるか
- 開発・保守の担当会社と、連携して進められるか
- 診断中に起きうる影響と、その対処について説明があるか
診断だけでは安全にならない
脆弱性診断は、ある時点での状態を確認するものです。診断のあとも、OSやライブラリの更新、ログの監視、アクセス権の見直しといった日常の保守を続けなければ、安全な状態は保てません。また、開発の段階から、安全なプログラムを書く意識も大切です。IPA(情報処理推進機構)が公開している「安全なウェブサイトの作り方」などの資料は、開発時の参考になります。
よくある質問
Q. 診断ツールだけで、十分でしょうか?
A. ツールは、広い範囲を効率よく確認できますが、業務の流れに依存する問題や、権限の不備などは見つけにくい傾向があります。扱う情報の重要度に応じて、手動の診断も組み合わせることを検討しましょう。
Q. システムを開発した会社に、診断も依頼できますか?
A. 依頼できる場合もありますが、第三者の視点で確認するほうが、見落としに気づきやすいという考え方もあります。開発会社による日常のチェックと、第三者による診断を、組み合わせるのが理想的です。
まとめ
脆弱性診断は、システムの弱点を、攻撃される前に洗い出す取り組みです。診断には、Webアプリケーション、プラットフォーム、スマートフォンアプリなどの種類があり、ツールと手動の手法を、システムの重要度に応じて使い分けます。リリース前や大きな改修の後など、タイミングを決めて実施し、診断後も日常の保守を続けることが、安全なシステムの運用につながります。