なぜオープンソースの脆弱性管理と対策が重要なのか
こんにちは。脆弱性自動管理ツール「yamory」の起案からサービス全体のディレクションに携わっている、サイバーセキュリティ事業部 プロダクト開発部 部長の鈴木康弘(やっぴー)です。
前回の記事「yamory の今までを振り返り、2020年に目指すこと」では、「yamory」の開発背景といったストーリーをお伝えしました。
ニュースサイトに掲載いただけるなど想像以上の反響をいただき、たいへん驚いております。
今回は「yamory」が対応するオープンソース・ソフトウェア(OSS)の脆弱性。
この OSS の脆弱性対策や管理がなぜ重要なのかについて皆さんにお伝えしていきたいと思います。
オープンソース・ソフトウェア(OSS)は自己責任でメンテナンスする必要がある
オープンソース・ソフトウェア(以下OSS)とは、ソースコードを無償で公開し、誰でも自由に利用や改良・再配布できるようにしたソフトウェアです。
IT / Web システムを開発する際、0 からすべてを開発するよりも、すでにある OSS を組み合わせて開発する方が圧倒的に開発効率が向上します。
そのため、昨今の IT / Web システム開発では、OSS を組み合わせてシステムを開発することが主流となっています。
ただ、OSS は無償であるがゆえにその品質が必ずしも保証されているわけではありません。
エンジニアが自由に改良することが可能であるため、その過程で意図せず不具合や脆弱性が発生してしまうケースもあります。
そして商業製品のように明確なサポートがあるわけではないため、OSS に不具合や脆弱性がある場合は、自らその情報をキャッチアップし、バージョンアップなどの対応が求められます。
Windows などの製品は、不具合や脆弱性があれば、自動でアップデートが実行され最新の状態になります。
しかし、OSS の場合は誰もやってくれません。利用者自身が自己責任でメンテナンスする必要があるのです。
IT / Web システムのほとんどは OSS で構成されている
具体的に、IT / Web システム開発でどのぐらい OSS が利用されているのでしょうか。
システムレイヤやソースコード量でどの程度 OSS が使われているのか見ていきましょう。
まずはじめに、IT / Web システムには、システムレイヤという概念があります。
下記の図をご覧ください。
システムレイヤーのうち、OS / ミドルウェアのレイヤからライブラリ / フレームワークのレイヤーまで、OSS を利用しシステムを開発しており、アプリケーションのロジック、自分たちで実際に書いたコード(下記カスタムコード)の部分はほんの一部分です。
IT / Web システムのシステムレイヤーのうち、ほとんど OSS で構成されていると言えます。
またソースコード量ベースで考えても、90% 以上が OSS であり、カスタムコードは全体の 10% 以下と言われています。
SourceClear / Finding Vulnerabilities and Malware in Open-Source Code at Scale より引用
つまり、IT / Web システムのシステムレイヤで考えても、ソースコード量で考えても、IT / Web システムのほとんどが OSS で構成されていると言えます。
よって、利用している OSS の不具合や脆弱性を確認し、リスクを管理することはとても重要です。
どのようなリスクがあるのか
では、放置しておくとどのようなリスクがあるのでしょうか。
レポートや具体的な事例も見ていきましょう。
OSS に関する脆弱性は、大きな問題として取り沙汰されている
Owasp Top10 や最近の脆弱性統計レポートでも、OSS、いわゆるシステムのコンポーネントに関する脆弱性は大きな問題として取り沙汰されています。
なぜなら、大量の脆弱性が内在していて、悪用可能な脆弱性も多いからです。
OWASP Top 10 2017 より引用
実際の事例・パターン
では、実際にどのような事例があるのでしょうか。
OSS の脆弱性が悪用されるパターンとして、大きく 2 つのパターンを見ていきましょう。
標的型攻撃で悪用されるパターン
1 つ目は、価値が高い情報資産をもつ、特定の企業が攻撃者の標的となり、攻撃の際にOSSの脆弱性が悪用される、いわゆる標的型攻撃で悪用されるパターンです。
エンジニアの採用ページや求人情報、エンジニア勉強会のログなどから、インターネットを検索すれば、標的となっている企業で、どのような言語で、フレームワークやミドルウェアでシステム開発をしているのか、推測、特定できてしまいます。
攻撃者はこれらの情報を元に、利用している OSS を特定し、狙いを定めた OSS の脆弱性情報や PoC(攻撃手法、または、攻撃用コード)の情報を探し、利用できる攻撃手法があれば、それを悪用して攻撃してきます。
国内のクレジットカード流出事件で、OSS の脆弱性が悪用された事例としては、こちらがあげあられます。
Bot 型攻撃で悪用されるパターン
2 つ目は、Bot 型攻撃で悪用されるパターンです。
OSS は世界中で同じものが利用されているため、一度攻撃手法が確立されてしまった脆弱性があれば、攻撃者はそれを利用し、機械的に攻撃を繰り返すシステム(Bot)を作り、無差別に攻撃してきます。
その結果、いつの間にかサーバーが乗っ取られ、DoS 攻撃の踏み台にされたり、仮想通貨のマイニングツールが埋め込まれサーバーリソースが奪われたり、さまざまなパターンで被害が発生します。
最近の事例では、「Nginx」と「PHP-FPM」を組み合わせ、特定環境下で利用している場合にリモートよりコードを実行されるおそれがある脆弱性(CVE-2019-11043)を悪用し、システムへ侵入後にファイルを暗号化し、身代金を要求するランサムウェア「NextCry」が確認されました。
代表的な攻撃パターンを 2 つご紹介しましたが、さまざまなパターンで被害が発生するため、OSS の脆弱性対策、脆弱性管理は進めていくことはとても重要です。
どのように対策をすれば良いのか
外部からの脆弱性診断では検知できない
IT / Web システムの脆弱性対策をしようとする際に、まず考えることはホワイトハッカーによる脆弱性診断やプラットフォーム診断、ネットワーク診断でしょう。
ホワイトハッカーに定期的な脆弱性診断は、IT / Web システムの脆弱性対策としては必須ですが、これだけで十分かと言われるとそうではありません。
OSS の問題はシステムの内部に隠れているため、外部からの脆弱性診断では検知できないケースが多いです。
IT / Web システムの大部分をしめる OSS の脆弱性管理には、独自の管理プロセスが必要です。
OSSの 脆弱性管理の3ステップ
OSS の脆弱性管理のために、やるべきことは大きく3ステップです。
- IT / Web システムで利用している OSS をリストアップする
- 利用している OSS に新しい脆弱性がないか日々確認する
- 脆弱性のなかで本当にリスクが高い物を抽出し、バージョンアップなどの対応をする
依存関係も複雑なので、人手で管理するには限界がある
ただ、OSS は依存関係があり、1 つの OSS は数百の OSS に依存していることもあります。
一般的な IT / Web システムの場合、システム全体で数千個の OSS に依存し、これらの中からリスクが大きい脆弱性を人手で管理することは、現実問題として難しいのではないでしょうか。
多様化するサイバーセキュリティに対してはセキュリティ製品なども活用いただき、横断的かつ総合的な対策を検討することをオススメいたします。