Dockle
https://github.com/goodwithtech/dockle/raw/master/imgs/logo.png
Dockle とは?
Dockle - Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start
Dockle は Docker イメージのベストプラクティスを構築できる、セキュリティ向けの Linter。
機能一覧
公式の README に確認時点で記述されている機能が下記の通り。
コンテナの脆弱性検知
簡単な使用方法 (イメージ名を渡すだけで利用できる )
code:bash
# 使用例
$ dockle node:latest
ベストプラクティス Linter としての Dockle
Docker では公式に Dockerfile のベストプラクティス が定められており以下のページで確認できる。
Dockle は Dockerイメージ を解析する過程で、構築に利用された Dockerfile に記述されている内容がこのベストプラクティスに沿っているかチェックする。
ありがちな例を上げると「apt でパッケージをインストールしたあとに同じレイヤーで apt のキャッシュ を削除していない」など。これが見つかると Dockle の結果として指摘されるため、意図しないイメージサイズの肥大化を避けることができる。 Dockerfile もない生成済みの Docker イメージからどうやって Dockerfile を逆算しているのかと言うと、イメージを解析の際に docker history [IMAGE_NAME] で得られるコマンドの履歴とおおよそ同じ内容が記録されたテキストデータを生成し、Dockerfile ベストプラクティスとのパターンマッチを行って実現しているようであった。
セキュリティ Linter としての Dockle
Dockle は Dockerfile をテキスト的に解析するのではなく実際にあるイメージから検証しているため、利用しようとしている実際のイメージ中に存在する脆弱性のある設定を検知できるようになっている。
セキュリティの検査項目は、Dockle 独自のものに加えて、CIS Benchmark の Docker に関するチェック項目 に対応しているため、基本的なセキュリティの項目を高精度に抑えられるようになっているとのこと。
Dockle のチェック項目の一覧については下記でまとまっている。一部については Trivy を併用するように明記されている。 Trivy との違い
Dockle はイメージ構築に関わるベストプラクティスとその過程において検証可能なセキュリティチェックを行うことにスポットを当てている。
一方で Trivy はイメージに含まれるOSやアプリケーションの依存関係に関わる脆弱性を検知する仕組みとして設計されている。 カバーする領域が異なるので、併用することで Docker イメージのセキュリティをより向上することが期待できる。
イメージ解析の仕組み
イメージの解析処理には、goodwithtech/deckoder というパッケージが利用されており、具体的には解析対象のイメージをイメージを構成するレイヤーごとに展開する仕組みが利用されている。(これは Dockle の作者が別のパッケージを fork して拡張したものになる) deckoder はイメージを解析する際に、解析対象のイメージを生成する際に利用されたコマンドを /config という名前で参照できるようにする仕組みを用意している。
展開された結果を利用して解析処理を開始する処理は下記。
コアになる箇所は下記の通り。Dockleで持っている評価軸を初期化している箇所を定義して、事前の展開処理によって得られたファイルを評価軸に従い検証している。
例として user の評価においては、/etc/password 中に同じユーザーが定義されていないかをチェックしている。
その他にも CIS Benchmarks をベースにした検証項目があるので具体的には下記を参照してほしい。
イメージを解析した後は、Docker の設定でエラーレベルの条件や意図的に無視する設定に該当するものを除外した後、ヒットしたものがあれば終了コードと出力で結果を通知するという仕組みになっている。
CI と組み合わせての利用
CI 環境上でも Dockle のバイナリを取得して、検証する対象のイメージ名を指定するだけで簡単にCIに組み込むことができる。
Dockle でも CI での活用を推奨しているようで、メジャーどころの CI ツールとの統合方法が記載されているので興味があれば参考にしてほしい。