「脆弱性」という言葉をよく耳にするようになりました。脆弱性とは文字通りに、もろくて弱い性質という意味があり、「地盤が脆弱である」や「脆弱な材料を使用」などの使われ方をしていました。しかし最近は、ソフトウェアの脆弱性がクローズアップされています。ここでは、特にパソコンやサーバー上で使用されるソフトウェアの脆弱性について、その意味や種類、対策などを紹介します。
目次
1. 脆弱性とは
ソフトウェアの脆弱性とは、ソフトウェアのプログラム上の欠陥やミスが原因で、本来は想定されていなかった動作を引き起こす可能性のある状態を指すもので、セキュリティホールとも呼ばれています。脆弱性にはさまざまな種類があり、ソフトウェアが突然再起動してしまったり、動作が停止したり、サイバー攻撃者に悪用されたりしてしまいます。
以前は、ソフトウェアが搭載される機器はパソコンや携帯電話、家庭用ゲーム機くらいのものでしたが、現在ではテレビやレコーダー、冷蔵庫、照明などの家電製品をはじめ、自動車鉄道、航空機などの交通機関、お店のレジや銀行のATMなど、身の回りのたくさんの機器に搭載されており、しかもインターネットに接続する機能を搭載するものも少なくありません。
インターネットに接続できるということは、ソフトウェアに脆弱性が発見されたときにインターネット経由で修正できるというメリットがある反面、サイバー攻撃者にインターネット経由で脆弱性を悪用される危険性もあります。特に、さまざまなものがインターネットにつながる「IoT時代」を迎えて、脆弱性対策はとても重要な問題とされています。
脆弱性を悪用されると、ユーザーが気づかないうちにウイルスに感染させられたり、動作を極端に遅くされたり、最悪の場合はサイバー攻撃者に乗っ取られてしまうこともあります。その場合は、さらなる攻撃の踏み台にされてしまうこともあり、被害者のはずのユーザーが加害者になってしまう可能性もあるのです。
2. 脆弱性はなぜ発生するのか
ソフトウェアは複数のプログラムによって構成されます。特に基本ソフトと呼ばれるOS(オペレーティング・システム)では非常に多くのプログラムが動作し、複雑に連携しています。このため、ちょっとしたプログラムのミスが脆弱性を生むことがあります。また、バージョンアップのスケジュールが厳しく、十分な検証がなされないこともあります。
さらに、想定が足りずに脆弱性になるケースもあります。たとえば、氏名を入力するエリアがある場合、そこに数万の文字が入力されることは想定していないケースが多いと思われます。そのため、そこに数万の文字を入力することで、想定していなかった動作が引き起こされてしまうこともあります。
このほか、パソコン向けの無料ソフトやスマートフォン向けのアプリなどでは、基本的な共通機能をまとめて提供されているパッケージが利用されているものが多くあります。このパッケージに脆弱性が確認されることもあり、そうするとたくさんのソフトやアプリが脆弱性の影響を受けることになってしまいます。
脆弱性は、開発者はもちろん、多くのセキュリティ企業や団体なども調査を行っていて、脆弱性が確認されると開発者に通知されます。開発者はこうした内外からの脆弱性の指摘を元に、脆弱性を解消した新バージョンやパッチを提供します。一般ユーザーに広く公表されるのはそのタイミングになりますが、サイバー攻撃者も情報をチェックしています。
サイバー攻撃者はアップデート情報が公表されると、そこで解消される脆弱性に対してエクスプロイトと呼ばれる攻撃コードを作成し、攻撃コードを含んだウイルスを作成してメール攻撃を開始したり、Webサイトに埋め込んだりします。脆弱性の公表からサイバー攻撃が開始されるまでの時間は確実に短くなっているので、なるべく早期の対応が重要になります。
3. 代表的な脆弱性の種類
ソフトウェアの脆弱性には、どのようなものがあるのでしょう。脆弱性の種類は、米国政府向けの技術支援や研究開発を行う非営利組織であるMITREが中心となって策定された共通脆弱性タイプ(CWE:Common Weakness Enumeration)というものがあり、日本における情報セキュリティの公的な組織であるIPA(独立行政法人 情報処理推進機構)なども採用しています。
CWEでは、脆弱性タイプを、ビュー(View)、カテゴリー(Category)、脆弱性(Weakness)、複合要因(Compound Element)の4種類に分類しています。2018年1月時点で、ビュー(View)として22個、カテゴリー(Category)として105個、脆弱性(Weakness)として638個、複合要因(Compound Element)として12個、合計777個の脆弱性タイプが分類され一覧となっています。
脆弱性の分類(CWEの構造) | |
脆弱性タイプ |
概要 |
ビュー |
ある観点からいくつかの脆弱性タイプを選択して集めたものです。 |
カテゴリー |
共通の特性(暗号に関連するもの、ユーザーインターフェースに関連するものなど)を持つ脆弱性タイプをグループ化したものです。 |
脆弱性 |
個々の脆弱性を表したもので、最も抽象的な脆弱性の属性であるクラス(Class)、特定のリソースや技術に依存しない脆弱性の属性であるベース(Base)、個々のリソースや技術、コンテキストなどが特定できるような脆弱性の属性であるバリアント(Variant)があります。 |
複合要因 |
数の要因が複合した脆弱性を表したもので、複数の脆弱性が混合して発生する脆弱性の属性であるコンポジット(Composite)、ある問題が原因で別の問題が連鎖して発生する脆弱性の属性であるチェイン(chain)があります。 |
※出所:IPA共通脆弱性タイプ一覧CWE概説を基に作成
それでは、IPAによる「脆弱性対策情報データベース JVN iPedia に関する活動報告レポート」(2017年第4四半期)から、報告の多い脆弱性について紹介します。
3-1 バッファエラー(CWE-119)
バッファオーバーフローとも呼ばれ、最悪の場合は対象のパソコンなどを乗っ取ることもできる、危険性の高い脆弱性です。スタックオーバーフローとヒープオーバフローの種類があり、スタック領域ではローカル変数にその容量を超える文字列を送ることでバッファ領域をあふれさせ、任意の命令を実行させるもの。ヒープ領域では、メモリの任意の場所に命令文を置いて実行させます。
3-2 クロスサイト・スクリプティング(CWE-79)
掲示板などのページに、悪意のあるページを表示されてしまう脆弱性です。この脆弱性が悪用されると、掲示板に悪意のあるスクリプト(命令文)を含む文字列を書き込むことで、別のユーザーが掲示板を見たときに不正なページを表示される可能性があります。
3-3 情報漏えい(CWE-200)
Webサーバコンピュータ上にある、本来は保護されるべき重要なファイルの内容を、インターネット越しに容易に読み出せてしまう脆弱性です。こうしたファイル流出の脆弱性は、Webサーバのファイル公開機能によりファイルが漏れ出す「Webサーバからのファイル流出」と、Webアプリケーションプログラムのディレクトリトラバーサル脆弱性などによって起こる「プログラムからのファイル流出」のふたつに分けられます。
3-4 認可・権限・アクセス制御不備(CWE-264)
アクセス制御には、IDとパスワードなどによる「ユーザー認証」と、そのユーザーに対して権限を制御する「アクセス認可」の2種類があります。この部分に脆弱性があると、ユーザー認証やアクセス認可を回避してログインされる可能性があり、企業などの社内システムに不正アクセスされたり、機密情報を盗まれるなどの被害に遭う可能性があります。
3-5 不適切な入力確認(CWE-20)
入力エリアにプログラムの実行コードを入力され、それが実行されてしまう脆弱性。この脆弱性が悪用されると、スパムメール送信の踏み台にされたり、別のプログラムを勝手に動作されるなどの影響を受ける可能性があります。
3-6 SQLインジェクション(CWE-89)
データベースと連携したWebアプリケーションの場合、脆弱性があると、WebアプリケーションへのリクエストにSQL文(データベースを操作する命令)を組み込むことで、外部からデータベースを操作され、情報を盗み出される可能性があります。これをSQLインジェクションといいます。データベースに顧客情報などが格納されている場合、その情報が流出してしまいます。
4. 脆弱性への対策
4-1 脆弱性に関する情報の収集
脆弱性情報は、IPAやJPCERT/CC(一般社団法人 JPCERT コーディネーションセンター)、そして両者が運営するJVN(Japan Vulnerability Notes)などで公開されていますので、定期的にチェックしましょう。ただし、これらの情報がすべてではありません。一番早い情報は提供ベンダーですので、重要なソフトウェアの更新情報は一次情報を参照するようにします。
その際、日本語の公開情報だけではなく、海外の情報も積極的に収集してくようにしましょう。実際に、2017年に多くの情報漏えい事件を引き起こした「Apache Struts 2」の脆弱性では、IPAとJPCERT/CCから日本語情報が公開されたときには、すでにこの脆弱性を悪用した攻撃が始まっていました。サイバー攻撃者も脆弱性情報をチェックしているのです。
さらに意識しておかなければいけないことは、サイバー攻撃者も脆弱性を調査しているということです。サイバー攻撃者は組織化が進んでおり、分業化も行われています。企業のセキュリティ担当者並みに脆弱性を調べていると考えたほうが良いでしょう。
こうして見つかった脆弱性は、対策のない「ゼロデイ脆弱性」となり、対応が難しくなります。その意味も含めて、日頃から複数のソースで脆弱性情報を収集するとよいでしょう。
なお、MITRE社はCVE-ID(脆弱性に付与されたユニークな識別番号でCVE-登録時の西暦-通し番号の形式)をCVE識別番号管理サイト(英語)で公開しています。CVE-ID がユニークな番号として、登録されることにより、概要、インパクト、影響するソフトウェア、対応策を紐付けて確認することができることが分かります。組織脆弱性検査ツールや脆弱性対策情報提供サービスの多くが利用しています。
一方で、脆弱性情報が公開されても、すぐにアップデートやパッチを適用できないという問題もあります。システムでは複数のソフトウェアが動作しており、複雑に影響し合っています。さらにアドオンソフトやプラグインソフトもあるので、アップデートやパッチを適用する前に検証が必要になります。本番環境に適用する前に脆弱性を悪用した攻撃が行われる可能性もあります。
4-2 脆弱性対策のツール
こうした現状に有効な対策となるのが、WAF(Web Application Firewall )や、いわゆる次世代ファイアウォール、次世代IPSといったソリューションです。これらには「仮想パッチ」と呼ばれる機能が搭載されています。仮想パッチとは、脆弱性を狙う攻撃コードを含んだ通信をシグネチャにより検出し、破棄するというもので、パッチをあてることなく脆弱性を狙う攻撃から保護できます。WAFなどで攻撃を止めている間に、正式なパッチ適用のスケジュールを組めるわけです。
このほかにも、たとえば自社開発のアプリケーションに脆弱性が存在することもあります。こうしたケースでは、脆弱性診断が有効です。脆弱性診断とは、セキュリティ対策企業などが提供するサービスで、対象となる企業に模擬攻撃を実施し脆弱性をあぶり出します。また、OWASP(The Open Web Application Security Project)が提供する「OWASP ZAP」や、Tenableが提供する「Nessus」など、脆弱性診断ツールもあるので、試してみるのも有効です。
現在、サイバー攻撃のほとんどが脆弱性の悪用を起点としています。脆弱性を悪用する攻撃は、今後さらに巧妙化し、ユーザーが気づくことなく侵入して情報を盗み出したり、別の攻撃の踏み台にする可能性が高いといえます。まずは、ソフトウェアは以前の家電製品のように「買ったら使うだけ」ではなく、定期的なアップデートが必要があること、アップデートしないまま放置しているとサイバー攻撃を受ける可能性のあることを認識することが大切です。
著者:マカフィー株式会社 マーケティング本部