こんにちは。サイオステクノロジー OSS サポート担当 山本 です。
今回は OSS と脆弱性について、大まかな形でお話したいと思います。
■そもそも OSS って…
Open Sourse Software (OSS) は、その名のとおりソースコードが公開されているソフトウェアです。
少し細かく言うなら、OSS は Open Source Initiative (OSI) という非営利団体が提唱する概念で、
「誰もが透明性を持って開発・レビューに参加できることで、より高い品質・信頼性・柔軟性を持ち低コストを実現しつつ、ベンダーロックインを避ける」ことを目的とし、「誰でも自由にアクセス、使用、変更、共有できる」ことを満たすライセンスが OSI によって “OSS ライセンス” と認められ、
この OSS ライセンスを適用したソフトウェアが「OSS」となります。
OSS ライセンスの詳細な選定基準は、以下のリンクを参照してください。
・The Open Source Definition
このため、ソースコードが公開されていれば必ずしも OSS というわけではないですが (例:SSPL)、
OSS であるソフトウェアは、多くの場合何らかの形でソースコードが公開されています。
少し話は逸れましたが、ソースコードを見ることができることが、今回のお話に関わります。
■脆弱性とは…
脆弱性は、”悪用された場合に様々な悪影響を及ぼすような、ソフトウェアやハードウェアコンポーネントに見られる計算ロジック (コードなど) の弱点” を指します。
脆弱性は基本的に予期できるものではなく、後から発覚する問題であり、未然に防ぐことはまずできません。
脆弱性によって受ける悪影響はその脆弱性ごとに大小様々で、一例としては
・メモリを過剰に (または無限に) 消費してしまう
・認証をすり抜けられてしまう
・やりとりするデータや保持しているデータが漏洩してしまう
・システムがクラッシュしてしまう
・任意のコードや SQL などを実行されてしまう
・システム内の権限を書き換えられてしまう
などがあります。
また、脆弱性を突く攻撃の成立条件も様々なので、特定の脆弱性について知るにはその脆弱性をきちんと確認する必要があります。
脆弱性が発見されると、基本的にはそのソフトウェアの開発元などが脆弱性の対処を行なったパッチやバージョンを公開することが多いため、脆弱性対策のためにも使用しているソフトウェアのバージョンは定期的に確認したほうがよいでしょう。
近年では脆弱性の発見件数は増加傾向にあり、脆弱性を取りまとめたデータベースとして有名な CVE には毎月1000件を超える脆弱性が登録されています。
■OSS と脆弱性
脆弱性は当然気を付けなければならないものですが、OSS の脆弱性については特に気を付ける必要があります。
OSS は先述のとおり原則としてソースコードが公開されています。
もしも脆弱性対策のパッチ・バージョンが公開されて、かつ脆弱性対策前のバージョンのソースコードも入手可能である場合、それらの差分から変更箇所や変更内容を特定することができます。(当該 OSS のフォーラムなどから修正内容や脆弱性の再現方法が読み取れる場合もあります)
一方、脆弱性情報などによりその脆弱性はどんな脆弱性だったのかは知ることができます。
このように OSS の既知の脆弱性は、その脆弱性を悪用した攻撃を行うためのヒントが簡単に入手できる状態である可能性が高く、詳細不明の脆弱性や未知の脆弱性を狙う攻撃と比べて、悪用するのが比較的容易であると言えます。
尤も、これは OSS が「誰もが透明性を持って開発・レビューに参加できる」ことによるもので、その分、脆弱性の発見機会や精度が高く、迅速に修正が行われる可能性が高いということでもあります。
(しかし例えば、Shellshock という 10年以上気づかれなかったとされる bash の致命的な脆弱性群のように、なかなか見つからない脆弱性が存在するのもまた事実です。)
勿論、脆弱性の対策パッチや対策済みバージョンを適用すればその脆弱性による攻撃は成立しなくなるので、(OSS に限った話ではないですが) 脆弱性対策のためにはソフトウェアを極力最新の状態に保つことは重要です。
■EOL と脆弱性
OSS などのソフトウェアでは、機能追加や更新、全体のブラッシュアップなど様々な目的のためバージョンが更新されることがあります。
この際、古いほうのバージョンは End of Life (EOL) や End of Service/Support (EOS) などのような、サポート終了の告知が行われる場合があります。
EOL などサポート終了となったバージョンのソフトウェアは、ほとんどの場合、原則としてそれ以上の更新はなくなります。
また、脆弱性もそれ以降は基本的に発表されなくなります。
しかし、脆弱性は基本的に後から発覚する予期しない問題であり、EOL バージョンのソフトウェアに脆弱性がないということではありません。
EOL バージョンのソフトウェアについては、仮に実際に影響を受ける脆弱性があったとしても調査も修正もされることはない、ということです。
古いバージョンに何らかの拍子に悪用できるような問題が発覚した場合…例えば、偶然新しい脆弱性が発見されたり、新しいバージョンの脆弱性と同様の攻撃方法が通用してしまったり、新しく作られた攻撃手法が通用してしまったり、マシン性能の向上などでかつては不可能だと考えられていた問題が実現できるようになったり…などがあった場合、気づく機会すら得られることなく、システムが危険に晒され続けることになります。
このような状態を避けるためにも、先述のとおりソフトウェアを極力最新の状態に保つことは重要です。
■最後に
今回は脆弱性についてお話しました。
脆弱性のあるソフトウェアを使用していても必ずしも脆弱性による攻撃を受けるというわけではありませんが、場合によってはサービス停止、データ破壊、情報漏洩などのような甚大な被害の温床となりうる、ということは認識しておきましょう。
また、一度脆弱性対策を行なったから安心、ということはありません。
脆弱性はあくまで後から発覚するものであり、システムを運用する限り常に付き纏う課題です。
脆弱性の内容や使用方法・環境によっては脆弱性の影響を受けない可能性というのは考えられますが、
(公式な回避方法等の発表がない限り) 「影響を受けない」と言うためには、その脆弱性のあらゆる詳細情報だけでなく、そのシステム全体との関連を正確に把握・調査・検討する必要があり、非常に大きな手間をかけてもなお不確実な部分が残ってしまう可能性があります。また「影響を受けない」と判断した場合でも、次の脆弱性、そのまた次の脆弱性…でも同じことを繰り返す必要があり、あまり現実的とは言えません。
ソフトウェアの更新も通常大きな手間や時間のかかる作業ではありますが、もし脆弱性を気にする必要がある環境であれば、十分な検証と確認の上で更新を行うのが安全確実かつ建設的だと考えられます。
お持ちの情報資産を守るためにも、これを機に一度脆弱性対策を含めてセキュリティについて再確認してみませんか?