Docker Hub のぜい弱性スキャン

Docker Hub のぜい弱性スキャン(Vulnerability Scanning)とは、Synk を利用して Docker イメージのぜい弱性を自動的にスキャンする機能です。 これは docker scan コマンドと同様の技術を利用するものです。

Hub のぜい弱性スキャンを有効にしていると、イメージが Log4Shell (CVE-2021-44228) に影響しているかどうかを確認することもできます。 詳しくは スキャンイメージ を参照してください。

ぜい弱性スキャン機能を有効にした上で Docker Hub へのイメージプッシュを行うと、Docker Hub ではイメージのスキャンが自動的に開始され、コンテナーイメージ内のぜい弱性をチェックします。 ぜい弱性スキャンを行うことで、開発者や開発チームはコンテナーイメージのセキュリティ状態をレビューできます。 そしてスキャンによって問題が検出された場合には、その対処を進めることができます。 つまり、よりセキュアな開発が実現できます。 スキャン結果には、OS パッケージやライブラリなどにおけるぜい弱性の存在場所、ぜい弱性が含まれるバージョン、(利用可能であれば)推奨する修正バージョンなどが示されます。 これを参考にして、発見されたぜい弱性を解消していきます。

Docker Hub 上でのイメージスキャン

Log4j 2 CVE-2021-44228

2021-12-13 17:00 UTC 以降に実施された Docker Hub のセキュリティスキャンは、Log4j2 CVE を適切に認識します。 逆にこの日付よりも前の場合、今のところぜい弱状態は反映されません。 したがってぜい弱性報告内に Log4j2 CVE の状態を確認するためにも、Docker Hub へイメージをプッシュしてスキャン実行を行うことをお勧めします。

Docker Hub のぜい弱性スキャン機能は、Docker Pro、Team、Business を購入している場合に、そのリポジトリの所有ユーザーあるいは管理ユーザーが、この機能の有効無効を設定することができます。 特定のリポジトリにおいてスキャンが有効である場合、Docker Hub へのプッシュアクセスを行えば、誰でもスキャンを起動することができます。

また Docker Pro サブスクリプションのリポジトリ所有ユーザーや、Docker Team のチームメンバー、Business サブスクリプションであれば、詳細なスキャン結果を参照することができます。 またイメージが Log4j 2 CVE に影響を受けているかどうかを確認することもできます。 Log4j 2 CVE への結果を参照するのであれば、Docker Hub に対してイメージをプッシュすることで、スキャンを起動する必要があります。

メモ

Docker Hub が現時点においてサポートするスキャン機能では、イメージが AMD64 アーキテクチャーの Linux OS であって、サイズが 10 GB 以下であるもののみを対象としています。

ぜい弱性スキャンの有効化

リポジトリの所有ユーザーあるいは管理ユーザーであれば、リポジトリ上でのぜい弱性スキャン機能の有効化を設定できます。 Docker Team または Business サブスクリプションのメンバーである場合、スキャン機能の有効化を設定するリポジトリは、Team または Business アカウントに属するリポジトリです。

ぜい弱性スキャン機能を有効にするには以下を行います。

  1. Docker Hub アカウントのログインします。
  2. メインメニューの Repositories をクリックして、一覧の中からリポジトリを選択します。
  3. デフォルトでリポジトリはすべて、スキャン機能が無効になっています。 リポジトリに対する有効化の設定は、リポジトリ個々に行っていきます。 Settings タブを開いて Enable Image Scanning(イメージスキャンの有効化)をクリックします。

イメージのぜい弱性スキャン

イメージのぜい弱性をスキャンするには、そのイメージを Docker Hub にプッシュします。

  1. ローカル環境に Docker がインストールできていることを確認します。 Docker の入手 を参照して、Docker のダウンロードとローカルマシンへのインストールを行ってください。
  2. コマンドラインから Docker アカウントを使ってログインします。 詳しくは docker login を参照してください。
  3. スキャンするイメージにタグをつけます。 たとえば Redis イメージにタグをつけるには、以下のようにします。

     $ docker tag redis <your-Docker-ID>/<your-repo-name>:latest
    
  4. Docker Hub にイメージをプッシュします。 これによって、イメージのぜい弱性スキャンが開始されます。

     $ docker push <your-Docker-ID>/<your-repo-name>:latest
    

ぜい弱性報告の参照

スキャン報告の保持期間

Docker ではぜい弱性スキャン報告を 1 年間保持します。 この期間を過ぎ、新たに最新のぜい弱性スキャン報告を得たい場合は、Docker Hub へのイメージプッシュにより、イメージの再スキャンを行ってください。

ぜい弱性報告(vulnerability report)を参照するには以下を行います。

  1. Docker Hub にアクセスして、目的のリポジトリを開いて、ぜい弱性スキャン報告の概要を表示します。

    リポジトリ画面にぜい弱性報告が表示されるまでには、数分を要します。

    ぜい弱性スキャン報告

  2. Tags タブ > Digest > Vulnerabilities をクリックして、スキャン報告の詳細を表示します。

    スキャン報告では、スキャンによって特定されたぜい弱性が表示されます。 表示にあたってはその重要度に従って並べられ、最も重要度の高いものから順に表示されます。 表示される情報として、ぜい弱性が存在するパッケージ、ぜい弱性が含まれるバージョン、最新バージョンによってぜい弱性が修正されているかどうか、といった内容が示されます。

    ぜい弱性スキャンの詳細

    メモ

    一覧の各行にある「open in browser」アイコンをクリックすれば、Synk ウェブサイトが提供するぜい弱性の詳細情報を確認することができます。

ぜい弱性スキャンの無効化

リポジトリの所有ユーザーまたは管理ユーザーであれば、リポジトリのぜい弱性スキャン機能を無効にすることができます。 無効化は以下を行います。

  1. Docker Hub アカウントにログインします。
  2. メインメニューの Repositories をクリックして、一覧の中からリポジトリを選択します。
  3. Settings タブを開いて Disable Image Scanning(イメージスキャンの無効化)をクリックします。

ぜい弱性の確認

ぜい弱性報告の一覧は、その重要度に従ってぜい弱性が並べられます。 表示される情報として、ぜい弱性が存在するパッケージ、ぜい弱性が含まれるバージョン、最新バージョンによってぜい弱性が修正されているかどうか、といった内容が示されます。

ぜい弱性スキャン報告を開発チームやセキュリティ担当が検証する際には、タグ全体のぜい弱性カウントを見ることで、時間の経過とともにぜい弱性がどのように増減したかを確認できます。

ぜい弱性の解消作業

ぜい弱性として検出され一覧表示されたものについては、そのぜい弱性解消のための手段をいくつか講じていきます。 たとえば以下を行います。

  1. Dockerfile に指定されるベースイメージは最新のものを用います。 アプリケーションレベルの依存パッケージを確認して、Docker イメージを再ビルドします。 そして Docker Hub に新たなイメージをプッシュします。
  2. Docker イメージを再ビルドします。 OS が提供するパッケージを更新するコマンドを実行します。 そして Docker Hub に新たなイメージをプッシュします。
  3. Dockerfile 内にぜい弱性のある特定のライブラリが存在していたら、削除するか最新のものに更新します。 イメージを再ビルドして Docker Hub に新たなイメージをプッシュします。

上に示す手順を実施した後に、新たなぜい弱性報告を開いて、更新されたスキャン結果を確認します。

フィードバック

Docker Hub のぜい弱性スキャン機能を利用していただきありがとうございます。 みなさんからのフィードバックを頂くことが重要です。 フィードバックは GitHub リポジトリ内の hub-feedback において issue を生成してお知らせください。

scanning, vulnerabilities, Hub, Snyk