企業の情報システムを守る!脆弱性診断の手法と考え方

trend-m-vulnerability.png

多くの企業が使う情報システムには個人情報や財務情報、業務データなどの重要なデータが保存されています。このシステムに脆弱性が残っていたり、設定に漏れがあったりすると情報漏えいなどの被害に繋がります。そこで重要になるのが「脆弱性診断」です。

システムを開発する立場だけでなく、企業の情報システムを運用する立場でも、その必要性や実施方法、使われるツールなどについて知っておきましょう。

脆弱性診断の必要性

企業が導入しているソフトウェアは人が開発したものなので、不具合が残っている可能性があります。一般的な不具合であれば利用者が気づくかもしれませんが、一般的な利用には問題ないけれど攻撃者が悪用できる不具合もあります。

また、ソフトウェアには問題なくても、利用者が設定を誤っている、正しく使っていないことで、外部から社内の情報にアクセスできる可能性があります。たとえば、ファイルの共有範囲を誤っている、簡単なパスワードを設定している、といったことが挙げられます。

このようなシステムの弱点のことを「脆弱性」といいます。

市販されているソフトウェアやサービスを使用している場合は、その開発元が脆弱性診断を実施し、問題があれば修正することが一般的です。Windows Updateのように更新プログラムが提供されるのはこのためで、利用者としてはこのような更新プログラムを適用しなければなりません。

一方で、企業が自社で独自に開発・構築したソフトウェアや環境については、自社で脆弱性診断を実施しなければなりません。たとえば、自社でWebアプリを開発して提供している、自社でWebサーバーやメールサーバーを構築・運用している場合には、そのシステムに脆弱性がないかを調べなければなりません。

このような脆弱性を見つけ出し、攻撃を未然に防ぐための調査や評価のことを「脆弱性診断」といいます。診断結果をもとに対策を講じることで、情報漏えいやシステムの不正利用を防ぎます。

もし脆弱性が放置されたまま運用されており、その企業の情報システムが攻撃されると、情報漏えいのほかにも次のような被害が発生する可能性があります。

被害の例詳細
業務の停止 サイバー攻撃によりシステムが停止し、業務が停止する
経済的な損失被害の復旧に費用がかかるだけでなく、賠償金の支払いなど経営に打撃となる
信頼の喪失顧客や取引先からの信頼を失い、売上の低下などにつながる

これらのリスクを減らすためにも、脆弱性診断を定期的に実施し、システムの安全性を確認することが求められています。

代表的な脆弱性診断ツール

脆弱性診断の必要性がわかったところで、具体的に何をすればいいのかわからない人もいるでしょう。ここでは自社でWebアプリを開発し、それを公開している企業での取り組み方について考えます。

脆弱性診断を実施するとき、大きく「ツールによる診断」と「専門家による診断」に分けられます。まず取り組むべきはツールによる診断です。比較的安価かつ短時間に実施できるため、頻繁に更新されるシステムなどで最低限の診断を実施したいときに有効です。

脆弱性診断のツールとして、表のようなものがあります。

ツール名種類公式サイト
Nessusネットワークスキャナhttps://www.tenable.com/products/nessus
OpenVASネットワークスキャナhttps://openvas.org
OWASP ZAPWebアプリ診断https://www.zaproxy.org
Burp SuiteWebアプリ診断https://portswigger.net/burp
VexWebアプリ診断https://www.ubsecure.jp/vex
SonarQube静的解析https://www.sonarsource.com
Checkmarkx静的解析https://checkmarx.com
CodeQL静的解析https://codeql.github.com

このようなツールを使うことで、一般的な脆弱性の多くは自動的に発見できます。たとえば、ネットワークスキャナを使うと、サーバーに不要なポートが開いていないか、開いているポートで動作しているサービスが古いバージョンでないか、デフォルトのパスワードのままになっていないか、といったことを検出できます。

また、Webアプリ診断ツールを使うと、WebアプリケーションにおけるSQLインジェクションやXSS(クロスサイトインジェクション)、CSRF(クロスサイトリクエストフォージェリ)などの脆弱性を検出できます。

静的解析ツールを使うと、プログラムを動作させることなく、ソースコードを調べて脆弱性を診断できます。

専門家による診断の必要性

上記のようなツールで自動的に脆弱性を発見できるのであれば、専門家による診断は不要だと感じるかもしれません。しかし、実際にはツールでは検出できない脆弱性が存在します。

たとえば、あるURLの一部分を書き換えると、ほかの利用者の情報が表示されたとします。しかし、表示されることが脆弱性なのかどうかはサービスによって異なります。

SNSであれば、ほかの利用者のプロフィールが表示されるのは正常な動作でしょうし、銀行やクレジットカードのようなサービスでほかの利用者の明細が表示されるのは問題です。

つまり、提供しているサービスの内容を理解し、外部から閲覧できる情報が組織として守るべき情報なのか、外部から攻撃を受けたときに侵入できないか、などを判断しなければなりません。

また、ツールによる診断は既知の脆弱性が持つパターンに基づいているため、未知の脆弱性や複雑な環境で発生する脆弱性は見逃す可能性があります。さらに、ツールが脆弱性だと判断しても誤検知で、実際には成立しない攻撃もあります。

専門家も人間なので見落とすこともありますし、頻繁に実施すると非常に高価になってしまいます。そこで、ツールによる診断と専門家による診断を組み合わせて実施する必要があるのです。

脆弱性診断の主な手法

脆弱性診断を実施するときは、一般的なシステム開発におけるテストの工程と同様に、大きく分けて次の3つの手法があります。ツールによる診断、専門家による診断のいずれでも、これらを組み合わせて診断をすることが多いです。

手法内容
ブラックボックステスト システムの内部構造を確認せずに、攻撃者の視点で外部から攻撃する
ホワイトボックステストシステムのソースコードや設計資料を詳しく確認し、そのうえで脆弱性を探す
グレーボックステスト部分的に内部情報を知ったうえで診断する

ブラックボックステストを使うと、実際の攻撃者に近い視点で脆弱性を発見できるため、典型的な攻撃についてはある程度網羅できます。一方で、内部の設計による脆弱性など細かな問題は見つけにくいことが欠点です。

ホワイトボックステストを使うと、ソースコードの書き方などを参考に調査できるため、ブラックボックステストでは気づかない脆弱性を発見できる可能性があります。ただし、診断をするときには時間もかかりますし、専門知識が必要になります。

グレーボックステストは上記の2つの中間のような手法で、外部のAPIを利用するときなど、限られた情報だけが得られるときによく使われます。

開発・運用担当者として実施したいこと

新しい攻撃手法は日々変化しており、脆弱性も次から次へと発見されています。つまり、今日は問題なくても明日には攻撃を受ける可能性があります。このため、最新の情報を追い続けることが求められます。

使っているソフトウェアそのものに問題はなくても、そのソフトウェアが内部で使っているライブラリに脆弱性が見つかったことで攻撃を受ける可能性もあります。このため、以前解説したようなSBOMを作成するなど、ソフトウェアを構成しているライブラリなどを把握しておく必要があります。

関連記事

そして、発見された脆弱性に対しては、速やかに対処することが必要です。放置すると攻撃の入り口になるため、セキュリティ意識を高め、開発や運用の現場では設計段階から安全なシステム作りを心がけましょう。

著者プロフィール
増井 敏克氏(ますい としかつ)
増井技術士事務所代表。技術士(情報工学部門)、情報処理技術者試験にも多数合格。
ビジネス数学検定1級。

「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や各種ソフトウェア開発、データ分析などをおこなっている。

著書に『図解まるわかり セキュリティのしくみ』『図解まるわかり プログラミングのしくみ』『図解まるわかり アルゴリズムのしくみ』『IT用語図鑑』『IT用語図鑑[エンジニア編]』『Pythonではじめるアルゴリズム入門』『プログラマ脳を鍛える数学パズル』『プログラマを育てる脳トレパズル』(以上、翔泳社)、『プログラマのためのディープラーニングのしくみがわかる数学入門』『プログラミング言語図鑑』(以上、ソシム)、『基礎からのプログラミングリテラシー』(技術評論社)、『RとPythonで学ぶ統計学入門』(オーム社)などがある。