なぜ、オープンソースの脆弱性管理と対策が重要なのか
こんにちは、脆弱性自動管理ツール「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/ミドルウェアのレイヤからライブラリ/FWのレイヤまで、OSSを利用しシステムを開発しており、アプリケーションのロジック、自分たちで実際に書いたコード(下記カスタムコード)の部分はほんの一部分です。
IT/Webシステムのシステムレイヤのうち、ほとんどOSSで構成されていると言えます。
またソースコード量ベースで考えても、90%以上がOSSであり、カスタムコードは全体の10%以下と言われています。
つまり、IT/Webシステムのシステムレイヤで考えても、ソースコード量で考えても、IT/WebシステムのほとんどがOSSで構成されていると言えます。よって、利用しているOSSの不具合や脆弱性を確認し、リスクを管理することはとても重要です。
どのようなリスクがあるのか
では、放置しておくとどのようなリスクがあるのでしょうか。レポートや具体的な事例も見ていきましょう。
OSSに関する脆弱性は、大きな問題として取り沙汰されている
Owasp Top10や最近の脆弱性統計レポートでも、OSS、いわゆるシステムのコンポーネントに関する脆弱性は大きな問題として取り沙汰されています。なぜなら、大量の脆弱性が内在していて、悪用可能な脆弱性も多いからです。
実際の事例・パターン
では、実際にどのような事例があるのでしょうか。
OSSの脆弱性が悪用されるパターンとして、大きく2つのパターンを見ていきましょう。
標的型攻撃で悪用されるパターン
1つ目は、価値が高い情報資産をもつ、特定の企業が攻撃者の標的となり、攻撃の際にOSSの脆弱性が悪用される、いわゆる標的型攻撃で悪用されるパターンです。
エンジニアの採用ページや求人情報、エンジニア勉強会のログなどから、インターネットを検索すれば、標的となっている企業で、どのような言語で、FWやMWでシステム開発をしているのか、推測、特定できてしまいます。
攻撃者はこれらの情報を元に、利用している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に依存し、これらの中からリスクが大きい脆弱性を人手で管理することは、現実問題として難しいのではないでしょうか。
OSSのリストアップや脆弱性スキャン、リスク分類まで自動化したのがyamory
yamoryでは、人手でやろうとすると膨大な工数がかかってしまう、OSSの脆弱性管理を自動化し、現実的な運用にのるところまでサポートします。
具体的には、下記の3点の自動化を実現することで、現実的なOSS脆弱性運用を実現します。
- 複雑な依存関係を紐解き、OSSのリストアップを自動化
- 日々新しい脆弱性があるかないか、脆弱性スキャンを自動化
- 本当に攻撃リスクが高いか(PoC、攻撃コードの有無や、公開システム非公開システム)の情報も含めて、リスク分類を自動化
yamory では現在、以下のプランが利用可能です。無料トライアルもご用意しておりますのでぜひご利用ください。
「yamory」を一緒に盛り上げていく仲間を探しています
yamoryでは、yamoryのミッションやビジョンに共感し、一緒に「yamory」を盛り上げていく仲間を探しています。ご興味のある方はぜひ下記のリンクよりお気軽にご応募ください。
積極採用中のポジション
- 経験豊富なScalaエンジニア
- エンジニアリングマネージャー
- SaaSプロダクトのセールス、CSやマーケティング経験豊富な責任者
SNS
Twitter, Facebookにてソフトウェアプロダクトのセキュリティ、脆弱性情報やDevSecOps、セキュア開発情報を発信しています。ぜひフォローよろしくお願いいたします。
「yamory」公式Twitter
https://twitter.com/yamory_sec