株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

Kaspersky製品ナレッジ 第39回 ~KESLにおけるDockerコンテナスキャン機能の紹介とオンアクセススキャン検証~

皆様、こんにちは。カスペルスキー製品担当SEの小池です。

突然ですが、ご存じでしょうか・・・Kaspersky Endpoint Security for LinuxにはDockerコンテナスキャン機能があるということを。
結構使える機能なのにあんまり知られていない気がする、、、ので、今回はKESLにおけるDockerコンテナスキャン機能の概要と、機能の一部をであるオンアクセススキャンの実装手順を紹介いたします。
オンデマンドスキャンの実装手順については第42回の記事に記載しました。

今回の内容は以下の通りです。


今回の記事は以下のバージョンにて検証し、画面ショットを取得しております。

●管理サーバー
 OS:Windows Server 2019
 DB:Microsof SQL Server 2017 Express
 Kaspersky Security Center:13.0.0.111247
 Kaspersky Security Center Web Console:13.0.10285
 Kaspersky Endpoint Security 11.1.0 for Linux のプラグイン:バージョン 11.1.0.111

●保護製品
 Kaspersky Endpoint Security for Linux 11.1.0.3013

●Dockerホスト
 Red Hat Enterprise Linux 8.4 (Ootpa)

●利用ライセンス
 Kaspersky Hybrid Cloud Security Enterprise, CPU Japanese Edition.
 Kaspersky Hybrid Cloud Security, CPU Japanese Edition. (一部の比較用画面ショットのみで利用。)

1. KESLのDockerコンテナスキャン機能概要

KESLをインストールしたDockerホストにおいて、コンテナ、イメージ、および名前空間を、ウイルスやその他のマルウェアがないかどうかスキャンできる機能です。

スキャン方法はオンアクセススキャン (リアルタイム)オンデマンドスキャン (定期的) の2通りがあります。

  • オンアクセススキャン (リアルタイム)ポリシーで有効無効を設定する。起動中のDockerコンテナをスキャンすることが可能で、脅威発見時は削除や駆除だけでなく、コンテナの停止も可能。
  • オンデマンドスキャン (定期的)タスクで設定 及び 実行する。起動中のコンテナのスキャンだけでなく、イメージのスキャンも可能。脅威発見時は駆除、削除、コンテナの停止のほか、イメージの場合はイメージの自動削除も可能。専用のCLIがあるのでCICDとの連携も可能。スキャン対象のコンテナおよびイメージをマスク (*や?) で限定することが可能。

オンラインスキャンの有効/無効はKESLのポリシーの[アプリケーション設定]>[全般設定]>[インターセプターの設定]>[名前空間とDockerコンテナの監視]で設定します
本機能においては、検知・削除・駆除だけならKESLが利用できるすべてのライセンスで実装が可能です。
ただし、脅威が検知されたコンテナの特定やコンテナの停止をするにはKHCS Enterpriseライセンスが必要です。

コンテナの特定とは、Dockerコンテナ内で脅威が検知された際、そのコンテナ名を特定できるという機能です。
下図の例を用いて説明します。下図はDockerコンテナ "wordpress-prod" の/tmp/配下でEicarテイストファイルを検知した際のイベントです。左がKHCS Enterprise CPUライセンスの検知イベント、右がKHCS CPU 無印ライセンスの検知イベントです。
左の場合はコンテナwordpredd-prodの/tmp/配下で検知したことがイベントから読み取れますが、右の場合は、ローカルではないどこかの/tmp/配下で検知したことしかわかりません。
これが先述した "コンテナの特定" です。

f:id:networld-blog-post:20210730141504p:plain

また、オンアクセススキャンは KESL 11.1.0.3013 の時点ではスキャン対象のコンテナを限定することができません。
そのため、オンアクセススキャンをすべてのコンテナに対して有効にするか、無効にするかの2択となります。
なお、KESL 11.1.0.3013 においてDockerコンテナのオンラインスキャンはデフォルトでONになっています。
オンアクセススキャンに関するオンラインヘルプは以下のURLをご参照ください。

https://support.kaspersky.com/KES4Linux/11.2.0/ja-jp/198028.htm

 

オンデマンドスキャンはタスクで実施します。KSCで統合管理している場合はタスク種別 "コンテナのスキャン" というタスクでスキャンします。スタンドアロンで運用している場合は タスク種別 "ContainerScan" のタスクでスキャンします。
タスクの実行にはKHCS Enterpriseライセンスが必要です
オンデマンドスキャンでは起動中のコンテナとイメージをスキャンすることができます。1つのタスクで、コンテナのみ、イメージのみ、コンテナとイメージの両方をスキャンできます。
また、それぞれ対象となるコンテナおよびイメージをマスク (*等) で限定することができます。
なお、オンデマンドスキャンのタスクはデフォルトでは存在しないため、必要に応じて作成する必要があります。
オンデマンドスキャンに関するオンラインヘルプは以下のURLをご参照ください。

https://support.kaspersky.com/KES4Linux/11.2.0/ja-jp/201799.htm

 

2. ライセンスによる機能の違い

※本章の2021/08/18 オンデマンドスキャンに関する記載について修正いたしました。
前の章でも触れましたが、Dockerコンテナスキャンにはオンアクセススキャンとオンデマンドスキャンがあります。
以下はメーカー様の資料(こちらのPDFのP.18)の抜粋した表です。この表のうち、"KES Linux 左記以外" 列で チェックが入っている項目は オンアクセススキャン・オンデマンドスキャンともに"脅威の検知・駆除” のみとなっています。

f:id:networld-blog-post:20210730142253p:plain

このうちオンアクセススキャンの "驚異の検知・駆除" は、前章の画像の通り、「脅威を検知したコンテナは特定できないけど、一応駆除もしくは削除はするよ!」という機能です。
脅威を検知したコンテナをカスペルスキーのイベントから特定する必要がある場合、または、コンテナの自動停止等のEnterpriseにしかない機能を使いたい場合は、KHCS Enterpriseをご購入いただく必要があります。
逆に、脅威を削除・駆除できさえすれば検知したコンテナを特定する必要がない場合、且つ、Enterpriseのみで利用可能な機能はすべて不要であれば、KHCS Enterprise以外のKESL利用可能なライセンスで問題ありません。

次に、、、オンデマンドスキャンの "脅威と検知・駆除" 欄にチェックが入っていますが、少なくとも当方が動作確認した次第では、オンデマンドスキャンタスクの実行にはKHCS Enterpriseライセンスが必須です。この辺りはKESLのバージョンによって差がある可能性がありますので、利用予定のバージョンでの使用をメーカーにご確認いただいた方がよいかと存じます。。。 

3. Dockerコンテナスキャンの設定 (オンアクセススキャン)

Docker コンテナスキャンをリアルタイムで実施したい場合は、ポリシーで設定します。
KSCのWebコンソールから、[デバイス]>[ポリシーとプロファイル]を開き、KESLのポリシー名をクリックします。

f:id:networld-blog-post:20210730142324p:plain

[アプリケーション設定]タブ>[全般設定]>[インターセプタ―設定]をクリックします。

f:id:networld-blog-post:20210730142343p:plain

[名前空間とDockerコンテナの監視] と [強制適用] を両方有効にします。

f:id:networld-blog-post:20210730142356p:plain

必要に応じて、脅威検知時の挙動を変更します。デフォルトでは "驚異の駆除または削除に失敗したらDockerコンテナを停止" となっています。
また、ソケットはデフォルトの /var/run/docker.sock が設定されていますが、もしソケットのパスを変更しているようであればこちらも併せて変更してください。Dockerのソケットのファイルパスを変更した場合は、併せて[強制適用] を有効にします。
最後に[OK]をクリックします。

f:id:networld-blog-post:20210730142447p:plain

設定を変更した場合は、[保存]ボタンが表示されるので、[保存]をクリックします。

f:id:networld-blog-post:20210730142458p:plain

以上でDockerコンテナスキャン (オンアクセススキャン) の設定は完了です。

 

4. 検証 (オンアクセススキャンで検知+削除させる場合)

KESLのポリシーで下図の通り設定したと仮定して、Dockerコンテナスキャン (オンアクセスキャン) の検知テストをしてみます。
この検証ではKHCS Enterprise CPUライセンスを使っております。

f:id:networld-blog-post:20210730142519p:plain

今回の検証では、WordpressのDockerコンテナを起動し、コンテナ内の任意の場所にEicarテストファイルを作成し、検知+削除されることを確認します。
(下図は別のコンテナも起動していますが、気にしないでください。。。)

f:id:networld-blog-post:20210730142536p:plain

/var/www/html/配下にEicar-Test.comを作成します。
(下の画面は作成前の/var/www/htmlの状態です。VimコマンドでEicarテストファイルを作成したところは撮り損ねました…。すみません…。)

f:id:networld-blog-post:20210730142607p:plain

vimでEicarテストファイルを作成後に即削除されたので、さっそくKSCでイベントがどのように出ているのか確認します。
Webコンソールの[監視とレポート]>[イベントの抽出]>[最近のイベント]をクリックします。

f:id:networld-blog-post:20210730142619p:plain

画面右上の検索ボックスでファイル名 "Eicar-Test.com" で検索すると、検知~削除までのイベントが出ていることが確認できます。

f:id:networld-blog-post:20210730142648p:plain

上記の3つのイベントの詳細は以下の通りです。
本環境ではKHCS Enterprise ライセンスを利用しているので、確かにコンテナ名 (今回の場合は wordpress-sample) を特定できていることがわかりました。

f:id:networld-blog-post:20210730142702p:plain

 

5. 検証 (オンアクセススキャンで検知+コンテナを停止させる)

Dockerコンテナスキャンにおけるオンアクセススキャンでもう1つ検証します。
今度はポリシーを以下の通り設定し、脅威を検知したコンテナを停止が停止されることを確認します。
この検証ではKHCS Enterprise CPUライセンスを使っております。

f:id:networld-blog-post:20210730142731p:plain

今回もWordpressのDockerコンテナを起動し、コンテナ内の任意の場所にEicarテストファイルを作成し、検知+コンテナが停止されることを確認します。
(下図は別のコンテナも起動していますが、気にしないでください。。。)

f:id:networld-blog-post:20210730142748p:plain

コンテナ "wordpress-sample" に入り、/var/www/html/配下にEicarテストファイルをファイル名 "Eicar-Test-ContainerStop.com" で作成します。
で・・・以下は作成直後の画面なのですが、見てお分かりいただけるように、vimコマンドでEicarテストファイルを保存した直後にexitしました
これは私のオペミスではなく、KESLによりEicarテストファイルが検知され、このコンテナが停止されたために勝手にexitしています

f:id:networld-blog-post:20210730142836p:plain

Dockerホストでdocker ps -aを実行すると、確かにEicarテストファイルを検知させたコンテナが停止しているのがわかります。

f:id:networld-blog-post:20210730142855p:plain

KSCで確認してみましょう。
Webコンソールから[監視とレポート]>[イベントの抽出]>[最近のイベント] をクリックします。

f:id:networld-blog-post:20210730142909p:plain

Eicarテストファイル名で検索フィルターをかけるとコンテナ停止のイベントがヒットしなくなるので、今回はフィルターは利用しません。
下図赤枠のところが今回のEicatテストファイル検知、削除 (駆除できない旨のイベント含む) 、コンテナ停止のイベントです。

f:id:networld-blog-post:20210730142927p:plain

Eicarテストファイル検知、駆除できない、削除完了のイベントは以下の通りです。
コンテナ名を特定できていることがわかります。

f:id:networld-blog-post:20210730142941p:plain

次にコンテナ停止イベントの詳細は以下の通りです。
コンテナID (ショートIDではなく、ガチの64桁のIDのほう) が表示されています。

f:id:networld-blog-post:20210730142954p:plain

実際に停止したコンテナID (64桁) をdocker inspectコマンドで確認すると、確かにKSCのコンテナ停止イベントの詳細に表示されたコンテナIDと一致していることがわかります。コンテナ停止イベントにはコンテナ名は表示されませんが、コンテナIDが出るので特定はできます。

f:id:networld-blog-post:20210730143021p:plain

 

6. 余談

今回の記事を書くにあたり、Dockerコンテナスキャンのオンアクセススキャンにおける "脅威をスキップ" という設定も試していました。

f:id:networld-blog-post:20210730143046p:plain

字面だけ見ると「脅威検知だけして処理はスキップするのかな…」と思っておりましたが、検証したところライセンス種別問わずEicarテストファイルを削除するという挙動が確認されました
一応そういう仕様のかなと思いつつオンラインヘルプを確認してみたところ、以下の通り記載されていました。

f:id:networld-blog-post:20210730143100p:plain

( ^ω^)・・・
上のオンラインヘルプの説明を見ると確かに、「Dockerコンテナ内で検知した脅威を削除・駆除だけします。」と読めなくもないですが・・・。うーん。
ま、まあ、とりあえずKESL11.1.0.3013においては "脅威をスキップ" を設定すると、Dockerコンテナ内の脅威を削除・駆除するという挙動になりますということだけここでは述べておきます。
以上、余談でした。

※2021/08/18追記
KESL11.2では、"脅威をスキップ" を設定するとDockerコンテナ内に脅威を発見した場合でも特に処置は行わず、検知のイベントも発生しないという挙動であることを確認しました。

 

今回はKESLにおけるDockerコンテナスキャン機能の概要と、機能の一部をであるオンアクセススキャンの実装手順を紹介いたしました。
Dockerコンテナのウイルス対策ソフトをお探しの場合は、今回紹介したKaspersky Endpoint Seucurity for Linuxもご検討いただけますと幸いです。

 

この度は最後まで記事をご覧いただき誠にありがとうございました。
記載事項へのご指摘、ご不明点、ご質問等ございましたら、以下からご連絡いただければと存じます。

https://www.networld.co.jp/product/kaspersky/

 

それでは次回の記事でお会いしましょう!