Skip to main content

人気のDockerイメージ上位10個には、それぞれ少なくとも30件の脆弱性が含まれている

著者
the state op open source small

2019年2月26日

0 分で読めます

Snykの年次レポート「State of Open Source Security 2019」へようこそ。このレポートは複数の記事に分かれています。

これらすべての情報をまとめた、手作りの素敵なPDFレポートもダウンロードできます。

2019年版オープンソースセキュリティレポートをダウンロード

Dockerイメージに含まれる既知の脆弱性

アプリケーションコンテナ技術の導入は驚異的な速さで進んでおり、451 Researchによると、2020年にはさらに40%成長すると予想されています。多くのDockerイメージにはシステムライブラリが含まれています。これは、Linuxディストリビューションをベースとする親イメージに依存しているためです。

Dockerイメージは大きな価値をもたらす一方で、ほぼ常に既知の脆弱性も含んでいる

Snykが最近リリースしたDockerスキャン機能を使い、最も人気のあるイメージ10個をスキャンしました。

調査の結果、スキャンしたすべてのDockerイメージで、脆弱性のあるバージョンのシステムライブラリが見つかりました。公式Node.jsイメージには脆弱性のあるシステムライブラリが580個含まれており、ほかのイメージにもそれぞれ少なくとも30件の公知の脆弱性が含まれていました。

Dockerイメージ別のOS脆弱性を示す棒グラフ:node 580件、postgres 89件、nginx 85件、httpd 69件、mongoとmysqlはそれぞれ61件。

Snykは最近、開発者がDocker化されたアプリケーションのセキュリティに全面的に責任を持てるよう、コンテナの脆弱性管理ソリューションをリリースしました。この新機能を使うと、開発者はDockerのベースイメージに含まれる既知の脆弱性を見つけ、Snykの修正アドバイスに従って対処できます。Snykは、最小限のアップグレード、または脆弱性がより少ない、あるいは含まれない代替ベースイメージを提案します。

把握していれば、修正は簡単です。イメージの20%はDockerイメージを再ビルドするだけで、44%はベースイメージを入れ替えるだけで脆弱性を修正できます。

Snykユーザーが実施したスキャンによると、Dockerイメージのスキャンの44%で既知の脆弱性が見つかり、それらにはより新しく安全なベースイメージが存在することがわかりました。この修正アドバイスはSnyk独自のものです。開発者はこれに基づいてDockerイメージをアップグレードできます。

またSnykは、Dockerイメージのスキャンの20%で既知の脆弱性が見つかり、イメージを再ビルドするだけで脆弱性の数を減らせることも報告しました。

イメージタグによる脆弱性の違い

Node.jsランタイムの現行の長期サポート(LTS)バージョンはバージョン10です。「10」というタグが付いたイメージ(例:node:10)は、実質的にはnode:10.14.2-jessie(テスト時点)へのエイリアスです。jessieは、現在は積極的に保守されていない古いDebianのバージョンを指します。

Dockerfileのベースイメージにこのイメージを選ぶと、イメージに含まれる脆弱なシステムライブラリ582個にさらされることになります。別の選択肢として、不要な依存関係(manページやその他のアセットなど)を省いた軽量イメージを提供するnode:10-slimタグを使う方法があります。ただし、node:10-slimを選んでも、脆弱なシステムライブラリが71個含まれます。

脆弱性の大半は、選択したベースイメージに由来します。そのため、修正はベースイメージの改善に重点を置くべきです

非常に小さく、システムライブラリを最小限に抑えたベースイメージが必要な場合は、node:10-alpineがより適した選択肢です。ただし、テストしたAlpineイメージのバージョンでは脆弱性が検出されませんでしたが、セキュリティ上の問題が一切ないとは限りません。

Alpine Linuxの脆弱性への対応は、パッチをバックポートすることを好む他の主要ディストリビューションとは異なります。Alpineでは、イメージを頻繁にリリースし、各リリースでシステムライブラリをアップグレードする方針を採用しています。

Nodeイメージタグ別の脆弱性を示す棒グラフ:node:10は582件、node:10-slimは71件、node:10-alpineは0件。

さらに、Alpine Linuxにはセキュリティ勧告プログラムがありません。そのため、システムライブラリに脆弱性があっても、Alpine Linuxから公式の勧告は発行されません。利用可能な場合、Alpine Linuxは問題を修正する新バージョンのライブラリを含む新しいベースイメージを作成して脆弱性に対処します(前述のバックポート方式とは異なります)。

脆弱なライブラリの修正版がAlpine Linuxですぐに利用可能になる保証はありませんが、多くの場合は速やかに提供されます。それでも、アプリケーションに影響を与えずにAlpine Linuxのバージョンへ安全に移行できれば、使用するライブラリが少なくなるため、環境の攻撃対象領域を縮小できます。

node:10のようなイメージタグは、実際には別のイメージへのエイリアスであり、10の新しいマイナーバージョンやパッチバージョンがリリースされるたびに参照先が変わります。

Node.jsのDockerイメージに826件の脆弱性があることを示すターミナルのレポート。深刻度別の内訳と、リスクを低減できるベースイメージの推奨を表示。

エイリアスではなく特定のバージョンタグを使い、たとえばベースイメージをnode:10.8.0-jessieに固定するチームもあります。しかし、Node 10の新しいリリースが登場すれば、新しいイメージにはシステムライブラリの脆弱性がより少ない可能性があります。

SnykのDockerスキャン機能を使って調べたところ、node:10.8.0-jessieのような特定のバージョンタグをプロジェクトで使っている場合でも、脆弱性の少ない新しいイメージを推奨できることがわかりました。

システムライブラリに含まれる既知の脆弱性

Debian、RedHat Enterprise Linux、Ubuntuなどの主要なLinuxディストリビューションに影響するシステムライブラリの脆弱性が増加しています。2018年だけで、これらのディストリビューションに関してCVEが割り当てられたシステムライブラリの脆弱性を1,597件追跡しました。これは2017年の4倍を超える数です。

2008年から2018年にかけて、Debian、RHEL、UbuntuのLinux OSの脆弱性が着実に増加していることを示す折れ線グラフ。

脆弱性の内訳(高および重大)を見ると、こうした深刻度の脆弱性が2017年から2018年にかけて増え続けていることが明らかです。

2014年から2018年までのシステムライブラリにおける高・重大度の脆弱性を示す積み上げ棒グラフ。合計数は2017年と2018年にピークに達しています。

続きを読む: