ソフトウェアの弱点!? 「脆弱性」って何だろう?
こんにちは。
しなもんです!!
世の中は受験シーズンですね。
しなもんは学校を卒業して何年も経つので直接関係はないのですが、電車の中などで受験生の方を見かけると懐かしい気持ちになりますね。
頑張ってください!!
さて、今回はソフトウェアなどに潜む「脆弱性」についてお話します!
脆弱性とは?
脆弱性*1 (ぜいじゃくせい) とは、独立行政法人情報処理推進機構 (以下、IPA) と JPCERT コーディネーションセンター (以下、JPCERT/CC) など 6団体が共同で制定した「情報セキュリティ早期警戒パートナーシップガイドライン」*2によれば、
脆弱性とは、ソフトウエア製品やウェブアプリケーション等において、コンピュータ不正アクセスやコンピュータウイルス等の攻撃により、その機能や性能を損なう原因となりうるセキュリティ上の問題箇所です。
なお、製品開発者の不適切な実装やウェブサイト運営者の不適切な運用によって、個人情報等が適切なアクセス制御の下に管理されておらずセキュリティが維持できなくなっている状態も含みます(後略)。
……長いですね。(ー''ー;)
ここではわかりやすさのためざっくりと説明します。
皆さんは「バグ」をご存じでしょうか?
バグとは、ソフトウェア (など) の不具合のことです。
本来の仕様に反して、おかしな動作をすることですね。
上の画像のように、ゲームで画面の表示がメチャクチャになるのもバグの症状です。
そうしたバグのうち、悪い人に攻撃されるとセキュリティ上の問題を生じるようなもののことを特に「脆弱性」と呼んでいます。
セキュリティ上の問題とは例えば、
- 内緒の情報を悪い人に見られてしまう
- ファイルなどの内容を書き換えられてしまう
- ソフトウェア (など) が使えなくなってしまう
といった問題です*3。
脆弱性は何に含まれているの?
脆弱性は様々なものに潜んでいます。ここではいくつか例をあげます。
情報端末で動くソフトウェア
一番わかりやすいと思います。
ワード・エクセルのようなオフィスソフト、Internet Explorer や Firefox のようなブラウザ、あるいは Windows・Mac OS のようなオペレーティングシステムもソフトウェアです。
もちろんパソコン上で動くものにとどまらず、スマートフォンで動く、いわゆる「アプリ」もソフトウェアです。
産業用システム
実はこれもソフトウェアなのですが、パソコンなどの情報機器で動くわけではありません。
例えば ATM (現金自動預払機) を想像してください。
タッチパネルで操作することで、預入れ、引出し、振込みなどいろいろな取引ができますね。
これはコンピュータによって制御されています。
ATM の中にソフトウェアが入っているといってもいいでしょう。
こうした専用の機器にも脆弱性が隠れていることがあります。
他にも産業用システムとしては、工場や発電所の制御システム、電車や飛行機の自動運転システム、自動改札システムなど、様々なものがあります。
大規模で、安全性に直結することが多いのが特徴です。
IoT 機器
IoT (Internet of Things、モノのインターネット) の普及には目を見張るものがあり、従来では考えられなかったものがインターネットにつながるようになりました。
外出先からでも自宅の様子がわかる「スマートカメラ」。
スマホなどを使って簡単に開け閉めできる「スマートロック」。
歯磨きをアプリで管理できる「スマート歯ブラシ」なんてものもあるそうですよ。
便利なのは結構なことですが、脆弱性があったらと思うと怖いですよね。
インターネットにつながるということは、インターネットの先の誰かに攻撃されるかもしれないということですから。
私生活を覗かれたり勝手に家電を操作されたりしてしまうかもしれません。
Web アプリケーション
Web サイト上で動くソフトウェアです。
例えば各種通販システムや、Youtube のような動画サイト、Twitter・Facebook のような SNS も Web アプリです*4。
脆弱性が見つかったらどうなるの?
世の中では、大勢の人が脆弱性を探しています。
例えば、
悪い人が最初に発見した場合は最悪です。防御できずに攻撃されてしまうからです。
こうした「対策がまだない脆弱性」のことをゼロデイ脆弱性、それを悪用した攻撃をゼロデイ攻撃と呼びます。
この場合は攻撃事例が出てから原因を調べて対処することになります。(T T)
悪い人に見つかる前にメーカー自身が発見したり、善意の人が発見して最終的にメーカーの知るところとなることもあります。
その場合には、メーカーは対策を考えます。対策には次のようなものがあります。
そのまま修正する
Web アプリなどの場合は、特に利用者に何かをしてもらうこともなく、そのまま修正することができます。
アップデートもしくはパッチを提供する
脆弱性を修正した新しいバージョンを出して利用者にアップデートしてもらうか、パッチと呼ばれる修正プログラムを出して、利用者に適用してもらいます。
回避策を教える
回避策*6とは、脆弱性を根本的になくすことはできないけれど、とりあえず被害を受けない状態にできる方法のことです。
「〇〇の設定をオフにして使ってね」とか「〇〇機能は使わないようにしてね」というのが回避策の例です。
アップデートやパッチと一緒に回避策が示されることもあります。
使わないでと呼びかける
古い製品によくある対応です……。
「その製品はもうサポート終了してるからもう使わないでね!」と利用者に呼びかけます。
最新版がある場合にはそっちを使ってね!ということもあります。
脆弱性情報の公開
対策方法を見てお気づきになった方もいるかと思いますが、そのまま修正できる場合 (Web アプリなど) の場合を除けば、どの対策も利用者に何かをしてもらう必要があります。
そのため、脆弱性の情報を利用者に的確に届ける必要があります。
多くの場合、その方法として「公式サイトなどで情報公開する」ことになります*7。
公開のしかたにも注意点があります。
ただ「こんな脆弱性がありま~す!」とだけ公表したらどうでしょう。
利用者は対策できないですね。
それに公開情報を見るのは利用者や善人だけではありません。悪い人に見られたら悪用されてしまいます。
ですから必ず、パッチや回避策などを用意してから、それらと一緒に公開しなければいけないのです。
ここまでくれば、利用者の人はメーカーのサイトを訪れて適切な対策を実施できます。
ところで、脆弱性を発見するのは悪い人やメーカー自身だけではありませんね。
善意の誰かが脆弱性の発見者になることがあります。
こうした人が発見した脆弱性の情報は、メーカーに届けば対策を講じてもらうことができますね!
しかし、多くの人にとって、メーカーと直接やり取りをするのは決して簡単なことではありません。
メーカーに脅迫者と間違えられて相手にされない場合もあるそうです。
せっかく脆弱性を見つけても役立ててもらえないのでは意味がないですし、発見者も報われないですよね。
そこで、日本では「情報セキュリティパートナーシップ」という官民の連携体制があります。
流れをすごく簡単に説明すると (ソフトウェア製品の場合*8 )、
- 脆弱性を見つけた人 (発見者) は、受付機関である IPA に報告する。
- IPA はそれを分析し、調整機関である JPCERT/CC に渡す。
- JPCERT/CC は開発者 (メーカー) と調整して対策してもらい、公表日を決める。
- 開発者サイトと、脆弱性情報ポータルサイト「JVN」で公表する。
jvn.jp(脆弱性識別番号がJVN#~のものが、早期警戒パートナーシップに基づいて公表された脆弱性です。)
この制度を利用すれば、
- 発見者は、自分自身はメーカーと直接やり取りすることなく対策してもらうことができますし、JVN のサイトで発見者として名前を掲示してもらうこともできます*9。
- 開発者は、様々な人から脆弱性情報を得て修正する機会を得られます。
- 利用者は、JVN を見て脆弱性情報を入手し、対策をとることができます。
余談ですが、このような連携体制は世界でもかなり珍しいそうです。
脆弱性があるのは悪いこと?
ここまでの話を聞いて、
「脆弱性があるソフトは危険だから使わなければいいんだな」
と思った方もいるのではないでしょうか。
でも実は、「脆弱性=悪!!」というのは、ちょっと危ない考えなのです。
バグ・脆弱性をなくすことはできない
脆弱性に限らず、バグはないに越したことはないですね。
なるべく脆弱性をつくらずに開発する「セキュアプログラミング」という技法もあります。
ただ、それでもまったくバグのないソフトウェアをつくるのは、きわめて困難だといわれています。
例をあげましょう。
有名なコンピュータ学者・数学者に、ドナルド・クヌースという人がいます。
プログラミングの神様みたいなとってもスゴイ人です。
クヌースは TeX バージョン 3、METAFONT バージョン 2 をリリースして、
「これらは完成版。今後は不具合があればその修正だけを行う」
と表明しました。
さて、その後、TeX ver3 と MRETAFONT ver2 は何回修正されたでしょうか。
2020年 1月現在、TeX は 8回、METAFONT は 7回*10も修正されています!
超大御所が完成版と銘打ったソフトでさえこんなに修正するほどバグがあったのです。
普通のソフトにバグがあったとしてもなんら不思議ではなく、むしろあって当然といえるでしょう。
脆弱性のあるソフトにはメジャーなものも多い
各製品にどれだけ脆弱性が見つかって報告されたか見てみましょう*11。
2019年の実績はこちらです。
(英語サイトですが内容はわかると思います)
Android、Windows、Acrobat (Reader)、Chrome、iOS など非常に有名でよく使われているソフトが目白押しです。
これらのソフトをまったく使わないことは現実的ではありません。
実際にはこれら上位のソフトが特別ヤバいのではなく、
ことが主な要因です。
脆弱性は、あるからダメ、なければいい、というようなものではありません*12。
もし、利用者の間でこうした考えが支配的になればどうでしょう。
メーカーは「脆弱性情報を公表したら、欠陥製品だと思われて売れなくなるかもしれない……」と考えるようになり、脆弱性情報を隠そうとするようになるでしょう。
そうなれば対策ができず、結局利用者が損することになります。得するのは悪い人だけです。
脆弱性があるかどうかで製品を評価するのはやめましょう。
利用者のことを考えてきちんと脆弱性に対応したかで評価するべきです。
参考図書
脆弱性について興味がわいてきた方には、この本をおすすめします。
タイトルこそ「サイバー攻撃」ですが、内容の大部分は脆弱性の話題です。
脆弱性について掘り下げた書物があまり見当たらない中で、一般の方向けに脆弱性を様々な観点から解説する本書は貴重です。
技術的なパートには結構難しいことも書かれている (実はしなもんにとっても ^^;;) のですが、それ以外に限っても大変勉強になります。
安くてコンパクトですし、ぜひご一読を。
まとめ
- 脆弱性とは、セキュリティの問題につながるバグのこと
- 脆弱性はパソコンソフトのほか、スマホアプリや IoT 機器などにもある
- 脆弱性と対策情報の適切な公開のために、官民連携の制度がある
- 脆弱性があるから悪いソフトというわけではない。きちんと対処したかどうかを見よう
今回は脆弱性についてお伝えしました。
最新の脆弱性情報を見たい方は、ぜひ JVN や JPCERT/CC の Weekly Report などを参照してくださいね!
それでは、またお会いしましょう!
*1:「脆」は常用漢字ではないので、「ぜい弱性」と書くこともあります。
*2:引用は 2019年版の P.3 から
*3:難しい言葉で表現すると、この3つは情報セキュリティの3要素と呼ばれる「機密性」「完全性」「可用性」がそれぞれ損なわれている例です。
*4:これらの有名サービスは Web アプリではない、ダウンロード・インストールして使うアプリも用意しています。
*5:メーカーによっては自社製品の脆弱性を報告した人に、その重大性などに応じてお金を支払う制度を設けているところがあり、その収入で生活している人もいるらしいです。バグ報奨金、バグバウンティなどということもあります。
*7:脆弱性が見つかってアップデートなどができても、情報公開を行わない場合もあるにはあるようです。それはメーカーが顧客をしっかり把握していて、個別に連絡をとって対処できる場合です。
*8:Web サイトの場合は調整機関を介さず、受付機関の IPA が直接サイト運営者とやり取りして修正してもらいます。また JVN での公表も行いません。理由は明示されていませんが、利用者に何かを促す必要がないからだと思われます。
*9:希望次第で開発者と直接やり取りしたり、発見者名を伏せることもできます。
*10:これら 2 つのソフトはバージョンが上がるたびに少数以下の桁が増えるユニークな仕組みです。裏を返せば、何回バージョンアップしたか=不具合修正したかは桁を数えればすぐわかります。
*11:このランキングは世界一有名な脆弱性情報データベース「CVE」をもとにしています。上で紹介した JVN ではありません。