FutureVuls で収集したソフトウェア・ライブラリ情報から各々の EOL を確認できるのか試してみた

2023.09.03

稼働しているシステム、サービスで使用している OS や、ソフトウェア、ライブラリの EOL(End Of Life)、EOSL(End Of Service Life)を一括で確認する方法を調べていました。

OS や、ライブラリの情報あれば一般的な脆弱性管理ツールでも収集できるため、脆弱性管理ツールの FutureVuls で収集した情報をもとになにかできないか試してみました。

確認したかったもの

  1. EC2 などのホストや、コンテナイメージの OS、インストール済みのソフトウェア、ライブラリ情報の収集
  2. ソフトウェア、ライブラリ各々の EOL がいつまでなのかを確認したい

昨今では多くの OSS に支えられてシステム、サービスが成り立っています。さまざまなソフトウェア、ライブラリを利用していることで、サイバー攻撃の入り口となる脆弱性を抱えるものがなにかしら起きます。日々の脆弱性対応は欠かせないわけですが、人力で対応するにも限界があるため脆弱性管理ツールを導入されている企業様も多いかと思います。

今回は同僚の協力もあり 1 番の情報収集については FutureVuls を使うのがもっとも早い手段でした。そのため、FutureVuls を利用した検証となりました。

確認結果

  • FutureVuls で確認できるのは OS の EOL 情報のみ
  • FutureVuls で取得したすべてのソフトウェア、ライブラリ情報を endoflife.dateから検索するのは現実的ではない

FutureVuls で確認できたこと

Amazon Linux 2 と、Ubuntu 16.04 LTS の EC2 を新たに起動し、FutureVuls でスキャンをかけた結果から確認できたことをまとめます。

FutureVuls については以下の記事を参考にしてください。

OS 情報

OS 情報とともに EOL の日付を確認できました。Amazon Linux 2023 がリリースされていますが、Amazon Linux 2 もまだ現役です。

だいぶ古い Ubutu 16.04 LTS はどうでしょうか?EOL は期限切れと表示されていました。Ubuntu 16.04 LTS は今でも延長サポートは有効とのことです。

延長サポートについて確認してみると Canonical 社が提供する有償サポートの Expanded Security Maintenance (ESM) の有効期限の日付でした。

Ubuntu 16.04 LTS (Xenial Xerus) | Ubuntu

その他

インスタンスが複数ある場合は一覧で欲しいなと思ったので FutureVuls の機能で CSV 形式で出力したものをスプレッドシートに取り込んでみました。必要情報を含む一覧出力もできることがわかりました。※ 表示項目が多かったので必要なところのみにフィルタしています。

まとめ

FutureVuls で OS の EOL 情報を確認することができる。

FutureVuls が OS の EOL 情報を表示できることはドキュメントから事前に確認できていたので、予定通りの結果を確認した内容となりました。

2021-01-28 リリース内容 :: FutureVuls Document

疑問はライブラリの情報は収集できるけど OS 同様に EOL 情報が表示されるのかはドキュメントを確認してもわかりませんでした。試した方が早いということで今回の検証に至ります。

ソフトウェア、ライブラリ情報

インストールしているソフトウェア、ライブラリの情報は確認できるが EOL はいつかはわかりませんでした。

ソフトウェア、ライブラリのバージョンと、最新のバージョンがわかるのですが、仮に古いバージョンだからといって EOL を迎えているのかどうかはわかりません。

同様に CSV 形式で出力してスプレッドシートに取り込んでみました。Ubutu 16.04 LTS にインストールされていた OpenSSL を例にしてみるとバージョン 1.0.2 がインストールされていることがわかります。最新のバージョンも同じバージョンとなっています。

Vuls でスキャンかけた結果から脆弱性を確認してみると CRITICAL な深刻度で検出されている脆弱性があります。通常の Vuls を使い方だと脆弱性対応で OpenSSL のバージョンアップを検討することになります。

まとめ

ソフトウェア、ライブラリの EOL 情報を確認することはできない。

FutureVuls の本来の目的とするところではない EOL 情報までは確認できませんでした。ですが、日々の脆弱性対応の一環で EOL になるようなバージョンですと、アップデートして EOL を迎えるまでに手を打てることでしょう。と思いたいのですが、脆弱性が一切なかった、重要度が低いから後回しなどの理由でバージョンアップされずに残るケースもままあるかと思います。

endofile.date の API で EOL を確認

FutureVuls の機能でインストール済みソフトウェア、ライブラリの一覧は取得できました。インストールされていたすべてのライブラリの EOL を公式サイト、GitHub から人力調査は無理があります。

主要なソフトウェア、ライブラリの EOL をまとめたサイトがあったので、こちらのサイトの API を使って EOL を確認できるのか試してみました。

Home | endoflife.date

endoflife.date とは

EOL 情報をまとめてくれているサイトです。現在は 253 プロダクトの EOL 情報をトラッキングしています。

ありがたいことに検索用の API を提供してくれています。

endoflife.date API Documentation -

API があるということは FutureVuls で取得したライブラリ情報を食わせて API を叩けばプログラマブルに主要な製品については EOL 情報を確認できるのでは?という素朴な疑問を解消します。

API を叩いてみる

先ほど確認した OpenSSL を例に endflife.date から EOL 情報を取得してみます。

curl --request GET \
          --url https://endoflife.date/api/OpenSSL.json \
          --header 'Accept: application/json'

Ubuntu 16.04 LTS 時代の OpenSSL のバージョンなので 4 年前に EOL を迎えていました。レスポンスにソースのリンクも提供してくれるのは大変ありがたいです。

実行結果

[
	{
		"cycle": "3.1",
		"releaseDate": "2023-03-14",
		"eol": "2025-03-14",
		"extendedSupport": false,
		"latest": "3.1.2",
		"latestReleaseDate": "2023-08-01",
		"lts": false
	},
	{
		"cycle": "3.0",
		"lts": true,
		"releaseDate": "2021-09-07",
		"eol": "2026-09-07",
		"extendedSupport": true,
		"latest": "3.0.10",
		"latestReleaseDate": "2023-08-01"
	},
	{
		"cycle": "1.1.1",
		"lts": true,
		"releaseDate": "2018-09-11",
		"eol": "2023-09-11",
		"extendedSupport": true,
		"latest": "1.1.1v",
		"latestReleaseDate": "2023-08-01"
	},
	{
		"cycle": "1.1.0",
		"releaseDate": "2016-08-25",
		"eol": "2019-09-11",
		"extendedSupport": false,
		"latest": "1.1.0l",
		"latestReleaseDate": "2019-09-10",
		"link": "https://www.openssl.org/news/changelog.txt",
		"lts": false
	},
	{
		"cycle": "1.0.2",
		"lts": true,
		"releaseDate": "2015-01-22",
		"eol": "2019-12-31",
		"extendedSupport": true,
		"latest": "1.0.2u",
		"latestReleaseDate": "2019-12-20",
		"link": "https://www.openssl.org/news/changelog.txt"
	}
]

EOL 情報を確認できることは確認できました。URL の指定でプロダクト名(例: OpenSSL)を入力しますが、大文字小文字の区別がありませんでした。これは助かります。

curl --request GET \
          --url https://endoflife.date/api/OpenSSL.json \
          --header 'Accept: application/json'

ちなみに FutureVuls で取得できたソフトウェア、ライブラリ名はすべて小文字です。

問題なくプログラマブルに処理できそうと希望を持てたのですが、そんなに甘くありませんでした。

FutureVuls で拾えたプロダクト名 Python3 を例に確認してみます。

curl --request GET \
          --url https://endoflife.date/api/Python3.json \
          --header 'Accept: application/json'

Python3 は該当なしと結果が返ってきます。

実行結果

{
	"message": "Product not found"
}

endoflife.date には Python または python で登録されており、Python 2 系と、3 系の EOL 情報を確認できるようになっています。

curl --request GET \
          --url https://endoflife.date/api/python.json \
          --header 'Accept: application/json'

実行結果

[
	{
		"cycle": "3.11",
		"support": "2024-04-01",
		"eol": "2027-10-24",
		"latest": "3.11.5",
		"latestReleaseDate": "2023-08-24",
		"releaseDate": "2022-10-24",
		"lts": false
	},
	{
		"cycle": "3.10",
		"support": "2023-04-05",
		"eol": "2026-10-04",
		"latest": "3.10.13",
		"latestReleaseDate": "2023-08-24",
		"releaseDate": "2021-10-04",
		"lts": false
	},
	{
		"cycle": "3.9",
		"support": "2022-05-17",
		"eol": "2025-10-05",
		"latest": "3.9.18",
		"latestReleaseDate": "2023-08-24",
		"releaseDate": "2020-10-05",
		"lts": false
	},
	{
		"cycle": "3.8",
		"support": "2021-05-03",
		"eol": "2024-10-14",
		"latest": "3.8.18",
		"latestReleaseDate": "2023-08-24",
		"releaseDate": "2019-10-14",
		"lts": false
	},
	{
		"cycle": "3.7",
		"support": "2020-06-27",
		"eol": "2023-06-27",
		"latest": "3.7.17",
		"latestReleaseDate": "2023-06-05",
		"releaseDate": "2018-06-26",
		"lts": false
	},
	{
		"cycle": "3.6",
		"support": "2018-12-24",
		"eol": "2021-12-23",
		"latest": "3.6.15",
		"latestReleaseDate": "2021-09-03",
		"releaseDate": "2016-12-22",
		"lts": false
	},
	{
		"cycle": "3.5",
		"support": false,
		"eol": "2020-09-13",
		"latest": "3.5.10",
		"latestReleaseDate": "2020-09-05",
		"releaseDate": "2015-09-12",
		"lts": false
	},
	{
		"cycle": "3.4",
		"support": false,
		"eol": "2019-03-18",
		"latest": "3.4.10",
		"latestReleaseDate": "2019-03-18",
		"releaseDate": "2014-03-15",
		"lts": false
	},
	{
		"cycle": "3.3",
		"support": false,
		"eol": "2017-09-29",
		"latest": "3.3.7",
		"latestReleaseDate": "2017-09-19",
		"releaseDate": "2012-09-29",
		"lts": false
	},
	{
		"cycle": "2.7",
		"support": false,
		"eol": "2020-01-01",
		"latest": "2.7.18",
		"latestReleaseDate": "2020-04-19",
		"releaseDate": "2010-07-03",
		"lts": false
	},
	{
		"cycle": "2.6",
		"support": false,
		"eol": "2013-10-29",
		"latest": "2.6.9",
		"latestReleaseDate": "2013-10-29",
		"releaseDate": "2008-10-01",
		"lts": false
	}
]

まとめ

  • endoflife.date は主要なソフトウェア、ライブラリの EOL を確認できる API を提供している。
  • プロダクト名は大文字小文字の区別はないが enfoflife.date に登録されているプロダクト名で検索する必要がある。
  • FutureVuls で情報招集したプロダクト名をそのまま endoflife.date で検索すると、登録名との違いでヒットしない可能性がある。

おわりに

餅は餅屋といったところでしょうか。OS や、ライブラリの情報を管理できるなにかとなれば、一般的には IT 資産管理ツールや、SBOM(Software Bill of Materials))ツールが思い当たるかと思います。仕事がら利用する機会の多い脆弱性管理ツール(FutureVuls)で取得した情報をもとに確認できないかと試してみました。

脆弱性対応をやっていれば EOL をいちいち気にしなくても新しいバージョンの利用を日々検討しているのでは?という意見もあるかもしれません。 単にソフトウェア、ライブラリの EOL 情報までも欲しいとなると yamory があるよと同僚に教えてもらいました。

yamory の検証環境がないため正確なことは言えないのですが、機会があれば yamory でスキャンしてみたいものです。