情報システムやネットワークに対する攻撃は多様化し、情報漏洩や不正アクセスのニュースは世界中で後を絶ちません。脆弱性への知識や脆弱性診断の需要は高まるばかりですが、皆さんは脆弱性について、どれくらい理解しているでしょうか。今回のコラムでは、エンジニアとして、脆弱性について知っているとよい内容をまとめました。
脆弱性とバグの違い
ソフトウェアなどにバグがあると、利用者は想定した操作ができず、通常の使い方であっても問題になります。つまり、設計された通りに実装されておらず、利用者はその問題に気づきます。
それに対し、脆弱性の場合は利用者が通常の使い方をしている場合は気づきません。その製品の開発者すら気づいていないことがほとんどです。しかし、攻撃者がその脆弱性を見つけると、その問題点を狙った攻撃が可能となり、情報漏洩やファイルの破壊などの攻撃が成立してしまいます。
脆弱性と似た言葉にセキュリティホールがありますが、一般的には脆弱性の方が広い意味で使われます。例えば、教育不足による「人の脆弱性」や、ハードウェアに存在する問題に使われることもあります。一方で、セキュリティホールは主にソフトウェアの脆弱性に使われます。
脆弱性やバグがソフトウェアに存在すると、多くの場合は開発会社から修正プログラムや更新プログラムが提供されます。このプログラムをダウンロードし、適用することで、脆弱性を修正できます。このようなプログラムの中でも、セキュリティに特化したものをセキュリティパッチと呼ぶこともあります。
ただし、サポートが終了した製品に対してはこのような修正プログラムが提供されない場合があるため、サポート期間には注意が必要です。もし修正プログラムが提供されない場合は、該当のソフトウェアを使用しない、代替のソフトウェアに切り替える、といった対応が必要かもしれません。
なお、「情報セキュリティ早期警戒パートナーシップガイドライン」が定められており、ソフトウェアやWebサイトに脆弱性を発見した場合にはIPA(情報処理推進機構)に報告することになっています。
脆弱性を防ぐために開発者が注意すること
開発者にとっては、開発の各ステップにおいてセキュリティを意識することが大切です。ソフトウェアの開発においては、要件定義から設計、実装、テスト、運用という大きな流れがあります。この各ステップにおいて、セキュリティレビューやソースコードレビュー、脆弱性診断やシステム監査・セキュリティ監査などを実施します。
特に脆弱性診断は重要で、開発したアプリケーションに脆弱性がないか調べるだけでなく、以下の図のようにネットワークの設定漏れやファームウェアの更新状況、サーバーの設定ミスやOS、アプリケーションの修正プログラム適用状況、不要なサービスの有無なども確認します。データベースには不要なユーザーが登録されていないか確認することも必要です。
また、脆弱性を作り込まないために最新の情報を仕入れることも大切です。例えば、Webアプリを開発する場合は、IPAによる「安全なウェブサイトの作り方」を読んでおくことは必須です。
さらに、最新の情報を収集します。IPAの情報セキュリティページ(https://www.ipa.go.jp/security/index.html)や、JVN(https://jvn.jp)を使う方法があります。JVNは情報セキュリティに関するポータルサイトで、各ベンダーのサイトを順に調べるよりも手軽に、統一されたフォーマットで一覧表示できます。
また、発見された脆弱性が対応を優先すべきかどうか調べるには、CVSS(Common Vulnerability Scoring System)を使う方法があります。JVNのサイトではCVSSの評価値が公開されていますし、以下の図のようなCVSS計算ソフトウェアを使って自分でCVSS値を計算することもできます。
脆弱性診断手法を知る
脆弱性診断は手作業で実施することもできますが、多くの場合は専用のツールを使用します。例えば、無料のツールとして、OWASP ZAPやBurp SuiteのCommunity版などがあります。また、脆弱性があるとどのような攻撃が可能なのかを学ぶには、IPAが公開している脆弱性体験ツールAppGoat(https://www.ipa.go.jp/security/vuln/appgoat/index.html)を使用するのも一つの方法です。
2019年2月にはIPAから「脆弱性対策の効果的な進め方(ツール活用編)」という資料も公開されています。この資料には脆弱性を取り巻く状況や脆弱性対策の考え方がまとめられています。 (参考:https://www.ipa.go.jp/security/technicalwatch/20190221.html)
なお、脆弱性診断を行う場合には、自分が管理しているサーバー、アプリ以外には行わないようにしてください。勝手に攻撃すると、不正アクセス禁止法などに抵触する恐れがあります。脆弱性診断を行うとデータを破壊する場合があり、ページの内容やデータベースが書き換えられるため、事前にバックアップを取得しておくことは必須です。
このとき、誤検知の可能性についても理解しておきましょう。脆弱性診断ツールが検知しても、攻撃が成立するとは限りません。また、脆弱性診断ツールが検知できなくても、脆弱性が存在しないとは言えません。このため、手作業での脆弱性診断と組み合わせて実施することが一般的です。
脆弱性に関する理解は深まったでしょうか。たとえば、Webアプリを公開してから脆弱性が見つかった場合、サービスの停止などに追い込まれ、企業の存続に関わる場合もあります。脆弱性に関する最新の情報をキャッチアップすることは、大きなアクシデントを防ぐ一助となり得ます。日々のセキュリティに関するニュースを見る際は、原因に目を向けてみると、また違った見方ができそうです。