yamory Blog

なぜオープンソースの脆弱性管理と対策が重要なのか

こんにちは。脆弱性自動管理ツール「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システムには、システムレイヤという概念があります。下記の図をご覧ください。

ITシステムはレイヤーに分かれていて、今やほとんどのレイヤでOSSが利用されている

システムレイヤーのうち、OS/ミドルウェアのレイヤからライブラリ/フレームワークのレイヤーまで、OSSを利用しシステムを開発しており、アプリケーションのロジック、自分たちで実際に書いたコード(下記カスタムコード)の部分はほんの一部分です。

IT/Webシステムのシステムレイヤーのうち、ほとんどOSSで構成されていると言えます。
またソースコード量ベースで考えても、90%以上がOSSであり、カスタムコードは全体の10%以下と言われています。

Open Source = ~ 90%, Open-source code (~ 70%), Custom Code (~ 10%), Open-source code (~ 20%)
SourceClear / Finding Vulnerabilities and Malware in Open-Source Code at Scale より引用

つまり、IT/Webシステムのシステムレイヤで考えても、ソースコード量で考えても、IT/WebシステムのほとんどがOSSで構成されていると言えます。よって、利用しているOSSの不具合や脆弱性を確認し、リスクを管理することはとても重要です。

どのようなリスクがあるのか

では、放置しておくとどのようなリスクがあるのでしょうか。レポートや具体的な事例も見ていきましょう。

OSSに関する脆弱性は、大きな問題として取り沙汰されている

Owasp Top10や最近の脆弱性統計レポートでも、OSS、いわゆるシステムのコンポーネントに関する脆弱性は大きな問題として取り沙汰されています。なぜなら、大量の脆弱性が内在していて、悪用可能な脆弱性も多いからです。

OWASP Top 10
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ステップです。

  1. IT/Webシステムで利用しているOSSをリストアップする
  2. 利用しているOSSに新しい脆弱性がないか、日々確認する
  3. 脆弱性のなかで、本当にリスクが高い物を抽出し、バージョンアップなどの対応をする

依存関係も複雑なので、人手で管理するには限界がある

ただ、OSSは依存関係があり、1つのOSSは数百のOSSに依存していることもあります。
一般的なIT/Webシステムの場合、システム全体で数千個のOSSに依存し、これらの中からリスクが大きい脆弱性を人手で管理することは、現実問題として難しいのではないでしょうか。

多様化するサイバーセキュリティに対してはセキュリティ製品なども活用いただき、横断的かつ総合的な対策を検討することをオススメいたします。

OSSの依存構造: OSSは数百から数千のOSSに依存したコードになっており、脆弱性診断ですべてを把握することは困難

オープンソース脆弱性管理ツール yamory

  • 利用中のOSSを抽出し
    脆弱性を自動スキャン
  • 脆弱性への対応優先度を自動で分類
  • 組織規模に合わせたプランを選択可能

フリー

¥0

個人向け

1チームまでの開発チーム作成

yamory を使いはじめる

プロ

有料料金はお問い合わせください

中〜大規模組織向け

無制限の開発チーム作成

開発チームを俯瞰できるセキュリティチーム機能

危険な脆弱性の Slack 連携通知機能

Jira Cloud と連携

シングル・サインオン(SSO)連携*

* SSO 連携は無料トライアルではご利用できません。プロプラン契約後からご利用できます。

30日間の無料トライアルを開始