Skip to main content

Dockerイメージ上位10種に、脆弱性につながるパスが8,000件以上

著者
Headshot of Hayley Denbraver

Hayley Denbraver

Security in The Container Registry small

2019年3月7日

0 分で読めます

はじめに

この投稿では、オープンソースセキュリティの現状レポートで取り上げたDockerイメージとコンテナエコシステムについて詳しく見ていきます。Dockerイメージ上位10種に、脆弱性につながるパスが8,000件以上存在するという調査結果もご紹介します。

Dockerのセキュリティについて、コミュニティの皆さんに理解を深めていただけるよう、私たちも力になりたいと考えています。前回のオープンソースセキュリティの現状を公開して以来、Snykは開発者がコンテナの脆弱性を理解し、軽減するためのツールをリリースしました。オープンソースセキュリティの現状に関する知見を共有するだけでなく、コンテナイメージの脆弱性を見つけて修正するためのツールも提供できることをうれしく思います。

オープンソースセキュリティの現状レポートの調査を通じて、コンテナセキュリティの責任を誰が担い、実際に誰が対策を実践しているのかについて、次の統計が明らかになりました。

  • ユーザーの68%が、Dockerコンテナイメージのセキュリティ責任は開発者が担うべきだと考えています。

  • 開発者の54%は、Dockerイメージのセキュリティテストをまったく実施していません。

  • 開発中にDockerイメージの脆弱性をテストしていると回答したユーザーは、わずか15.5%でした。

これらの結果から、セキュリティの責任を担う人と、実際に対策を実践している人との間に隔たりがあることがうかがえます。開発者がコンテナイメージのセキュリティ責任を担うのであれば、開発中にワークフローの早い段階からセキュリティを取り入れることが大きなメリットになります。しかし、実践しているのはわずか15.5%です。さらに、セキュリティの責任を担っていても、積極的に対策していない開発者がいることも示唆されています。その結果、ベースタグの更新やDockerイメージの再ビルドで修正できるような、比較的簡単な脆弱性でさえ見過ごされてしまう可能性があります。

こうした理由から、Dockerコンテナに関係するセキュリティ上の問題を開発者に理解してもらえるよう、見つかった脆弱性をさらに詳しく調べることにしました。

Dockerセキュリティを詳しく見る

脆弱性につながるパス、依存関係と脆弱性の関係、そして脆弱性の深刻度を詳しく見ていきます。

注:以下の数値はこの記事の執筆時点のものであり、「オープンソースセキュリティの現状」レポートに掲載した数値とは若干異なります。

脆弱性につながるパス

特定の脆弱性が、複数の依存関係を介して持ち込まれることがあります。脆弱性を重複して数えると、実際以上にイメージの安全性が低いという印象を与えてしまうため、Snykでは重複してカウントしません。ただし、脆弱性が複数の経路から持ち込まれる可能性があることは理解しておく必要があります。関連する依存関係が多いほど、修正が難しくなる可能性があるためです。こうしたケースがどの程度あるのかを示すため、Snykでは「パス」という考え方を用いて、イメージに脆弱性が持ち込まれる経路の数を表しています。そこで、Dockerイメージから脆弱性を取り除く難しさを大まかに把握するため、パス数と脆弱性数の比率を調べることにしました。

Dockerイメージごとの脆弱性数、パス数、脆弱性あたりのパス数を比較した表。合計は脆弱性1,075件、パス8,204件。

この表から、nodeのDockerイメージは脆弱性の除去が最も難しいと考えられます。また、調査対象となった10種すべてのイメージで、存在する脆弱性のそれぞれに複数のパスが関連している可能性が高いこともわかります。幸い、Snykを使えば、こうした絡み合った経路を自分で解きほぐす必要はありません。SnykのDockerツールは、脆弱性の除去方法を特定したり、代わりに使用できる別のDockerイメージを提案したりします。

依存関係

次に、それぞれのDockerイメージの依存関係を詳しく見ていきましょう。以下の表は、依存関係の数と脆弱性の数がどのように対応していたかを示しています。

Dockerイメージごとの脆弱性数、依存関係数、脆弱性と依存関係の比率、および合計を比較した表。

調査したDockerイメージ10種全体を見ると、依存関係が10個増えるごとに、脆弱性が7件増える傾向がありました。nodeは例外で、依存関係が10個増えるごとに平均14件の脆弱性が持ち込まれていました。平均の2倍です。

深刻度

Snykでは、脆弱性の深刻度を「高」「中」「低」に分類しています。これらの分類によって、ユーザーはどの脆弱性から修正するかを判断し、優先順位を付けやすくなります。Dockerイメージで見つかった脆弱性の深刻度を把握することで、セキュリティ上の問題の規模をより明確にできます。

脆弱性の深刻度については、明るい材料があります。調査で確認された脆弱性の大半は深刻度が低く、全体の74.9%を占めていました。深刻度が中の脆弱性は16.9%、高の脆弱性は8.2%でした。深刻度の高い脆弱性は少数なので、優先的に対処することで、コンテナのセキュリティを大きく改善できます。

Dockerイメージ別の脆弱性の深刻度内訳は、次のとおりです。 

node、postgres、nginxなどのDockerイメージについて、低・中・高の重大度の割合を比較した表。

個々のDockerイメージによって違いはあるものの、脆弱性の大半は深刻度が低いという全体的な傾向が見られます。これは朗報です。

まとめ

Dockerイメージ上位10種に、脆弱性につながるパスが8,000件以上存在するという調査結果と、これらのイメージに含まれる依存関係のほぼすべてが脆弱性をもたらしていたという結果から、最小限のベースイメージを使うべきだと強く言えます。この推奨事項は、最近公開したDockerセキュリティに関するチートシートでも、最も重要なセキュリティ対策として挙げています。

プロジェクトの実行に必要なシステムツールとライブラリだけを含む最小限のイメージを選べば、攻撃者が狙える領域を減らし、安全なOSを提供できます。つまり、脆弱性や脆弱性につながるパス、依存関係の総数を減らし、コンテナ全体のセキュリティを高められます。

Dockerのセキュリティ対策は複雑になりがちですが、Snykのツールを使えば、脆弱性の修正も安全なベースイメージの発見も簡単です。

開発者ファーストのコンテナセキュリティ

Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。