
脆弱性診断とは? 必要性や種類、実施内容を詳しく解説
システムにおける脆弱性はサイバー攻撃の標的となる可能性が高く、情報漏えいやデータ損失などの被害を引き起こすリスクとなり得ます。このセキュリティリスクを防ぐのに有効なのが脆弱性診断です。サイバー攻撃の被害が拡大する昨今、定期的な脆弱性診断の実施によるリスクの早期検出・対処は、企業の資産や情報を守るうえで必要不可欠となりました。本記事では脆弱性診断の概要や必要性、実施内容について解説します。
目次
脆弱性診断とは
脆弱性診断とは、Webアプリケーションやサーバー・ネットワーク、システム全体を調査して攻撃の対象となる脆弱性(セキュリティ上の欠陥)を網羅的に検出する作業やサービスのことです。潜在的な問題を早期に洗い出して把握し、必要な対策を講じることで悪意のある攻撃による不正アクセス、情報漏えいやデータ損失のリスクを減らすことを目的とします。セキュリティ診断やセキュリティ検査と呼ばれることもあります。
脆弱性とは
そもそも脆弱性とは、Webサイトやサーバー・OS・ソフトウェアなどさまざまな場所に存在する、仕様上の問題やプログラムの不具合などによるセキュリティ上の欠陥のことです。悪意のある攻撃者はインターネット上で脆弱性のあるシステムを探し回り、脆弱性を突く攻撃の機会を伺っています。脆弱性を放置していると、サイバー攻撃の標的になる可能性が高く、不正アクセスによる被害を受ける危険性があるため、早期の対処が必要です。
脆弱性について詳しくは以下の記事をご覧ください。
脆弱性とは? 脆弱性の原因とリスク、対策について解説 | ベアケアブログ
脆弱性診断の必要性
インターネットを介したサイバー攻撃は増加を続けており、企業が運営するWebサイトやWebサービスの脆弱性をついた攻撃による個人情報の漏えいやWebサイトの改ざんなどの被害も増え続けています。このような事件が発生した場合、サービス提供の停止による機会損失や、顧客への補償や対応、社会的な信用の失墜などにより、莫大な損失を生み出しかねません。場合によっては事業が継続できなくなる可能性すらあるでしょう。これらを未然に防ぐには脆弱性診断を定期的に実施し、継続的に脆弱性を検知・改善することが必須となります。
脆弱性診断の種類と内容
脆弱性診断にはいくつか種類があります。それぞれの内容について解説します。
アプリケーション診断
Webアプリケーションやスマートフォンアプリケーションに関する脆弱性を調査します。攻撃者の視点からアプリケーションに潜む脆弱性を検査し、攻撃の余地がないか確認します。具体的には以下のような項目を診断します。
インジェクション
Webアプリケーションが被害を受ける要因として多くを占めるのが、SQLインジェクションやクロスサイトスクリプティングといったWebアプリケーションとバックエンドシステムへの不正な入出力を起点とする攻撃です。SQLの不正操作によりデータ流出につながる脆弱性や、不正なコマンドやスクリプトが動作する環境がないかをチェックします。
認証機能の強度
ユーザー認証の悪用を防ぐため、IDやパスワードなどの認証情報を使用するログイン機能をチェックします。たとえばパスワードの総当り攻撃やIDの推測に対する強度などを確認します。
アクセス制御
アクセス制御とは、ユーザに対し許可していないデータの閲覧や変更・破壊・不適切な操作などを防止する仕組みです。特権の昇格、アクセス制御の欠落や、制御をバイパスする仕組みがないかなどをチェックします。
運用管理上のミス
脆弱性だけでなく、設定ミスや誤操作などの運用管理上の問題もアプリケーションの弱点になり得ます。認証管理やファイルの属性指定、意図しない公開などの管理ミスによるセキュリティホールの有無をチェックします。
セッション管理
コンピューター通信で利用するセッションを不正操作し、本人に成り代わって通信を行ういわゆる「なりすまし」行為をセッションハイジャックといいます。これを防ぐためセッションの識別方法が適切であるか、セッションIDが推測されやすいものでないかなどをチェックします。
プラットフォーム診断
サーバーやOS・ミドルウェア・ネットワーク機器などに関する脆弱性をネットワークの内外から調査します。インターネット経由で診断する「リモート診断」と、内部ネットワークから診断する「オンサイト診断」の方法があり、これらを組み合わせて実際の攻撃に近い環境を想定して診断を行うこともあります。具体的には以下のような項目を診断します。
ポートスキャン
外部から接続可能な通信ポートを確認し、不要なポートが攻撃に悪用される危険性がないかチェックします。
バナーチェック
OSやサーバーなどの製品名やバージョンが外部から取得可能か、またそれらが攻撃に悪用される危険性がないかチェックします。
プロトコルの脆弱性
安全でない暗号スイートやバージョンのプロトコル使用がないか、不適切な平文通信がないかなどをチェックします。
セキュリティホールチェック
最新のセキュリティパッチが適用されているかなど、既知のセキュリティホールへの対策が適切に行われているかチェックします。
不適切なソフトウェアの検出
マルウェアやrootkit(※)、その他不適切なソフトウェアが検出されないかチェックします。
※rootkit:一度アクセスした侵入者が、その後も不正にアクセスし遠隔操作するためのソフトウェアパッケージ。いわゆるバックドア。
ペネトレーションテスト
ペネトレーションテストは、脆弱性診断と同じく脆弱性を検出するテストです。しかし脆弱性診断とは目的が異なることに注意しましょう。
既知の脆弱性を網羅的に検知する脆弱性診断に対して、ペネトレーションテストは「侵入テスト」の意味があり、明確な意図を持った攻撃者を想定した攻撃を試みます。実際に攻撃が成功するかどうか、セキュリティ対策の有効性を評価することを目的としています。ペネトレーションテストが攻撃を予防するためのものであるとすると、脆弱性診断は攻撃されるリスクを発見するためのものです。脆弱性診断とペネトレーションテストはセットで実施されることも多いです。
脆弱性診断を実施するには
脆弱性診断を実施するための具体的な手法や推奨される頻度・タイミングについて解説します。
脆弱性診断の手法
ツール診断
専用ツールを用いて診断する手法です。あらかじめ決められた項目を自動で検査するため、コストや作業時間を抑えられることがメリットです。専門技術がなくても、自社でツールを導入して実行することもできます。しかし細やかな設定やチューニングは難しく、ログイン機能がある場合など、検査対象が複雑な構成の場合対応できないこともあります。
手動診断(マニュアル診断)
手動で診断する手法です。専門家に依頼するのが一般的で、機械ではできない柔軟な対応が可能なことや、疑問点について質問できたり対策案を提示してもらえたりすることがメリットです。その分ツール診断よりもコストや調査期間は増加します。診断対象となるシステムの性質や費用対効果を考慮し、ツール診断と使い分けるのがおすすめです。
脆弱性診断の頻度とタイミング
脆弱性診断を行うタイミングは一般的にアプリケーションの開発が完了した後、リリース前の最終確認時です。さらにリリース前だけでなく、開発中のチェックポイントごとに脆弱性診断を組み込むケースも増えてきています。脆弱性を早期に発見し迅速に修正ができるため、開発作業の効率化にもつながります。
新たな脆弱性は日々世界中で発見されているため、運用開始後も定期的に脆弱性診断を実施することが大切です。頻度について、JPCERT/CCは「Web サイトへのサイバー攻撃に備えて」にて以下のように定義しています。
(1) 利用製品 (プラグインなど追加の拡張機能も含む) のバージョンが最新であることの確認
目的:製品の脆弱性を狙ったサイバー攻撃を回避・低減するため
対象:Web サーバなどの Web システム、Web サイト運用管理用 PC
頻度:数週間~1ヶ月に1回程度
(3) Web アプリケーションのセキュリティ診断
目的:自社のWebアプリケーションに脆弱性や設定の不備が存在しないか確認するため
対象:Web アプリケーション
頻度:1年に1回程度、および機能追加などの変更が行われた時”
項目によって頻度は異なるため、自社の環境に合わせて推奨される頻度での定期的な診断が必要です。またシステムの仕様変更などが行われた場合には、その都度診断を実施すべきです。
まとめ
日々新たなセキュリティリスクは発生し続けているため、定期的な脆弱性診断は企業にとって必須要件となっています。システム環境はそれぞれ異なるため、脆弱性診断の種類や内容について正しく理解し、自社環境に合わせた診断を実施しましょう。社内でリソースが確保できない場合は、専門業者へのアウトソースを検討することもおすすめです。