見出し画像

[DevSecOps] コンテナ時代のアンチウィルス対策はどうすればいいのか調べてみた

 エンタープライズ企業が新しいクラウドサービスを導入する時には、自社のセキュリティ基準を満たせていることを確認するのが通例である。「セキュリティチェックシート」と呼ばれるエクセルシートを利用して一点一点チェックしていくことが多い。(この質問票で聞かれる内容が個社ごとにばらばらで、システム導入時に双方の負担になってしまっているのを標準化してなんとかできないかと思うことはあるが、この記事ではそこには触れない。)

 よくあるのが、「アンチウィルスソフトウェアをサーバーにインストールしていること」というチェック項目だ。明快な質問のように見えるが具体で実現するためには色々考えなければいけないことがある。標準的なサーバー構成、つまり、ハードウェアがあって、その中でOSが稼働していて、その上でアプリケーションが動いているというシンプルな構成であれば良いのだが、クラウドインフラを使い倒すようになった今ではマイクロサービス、サーバーレス、Dockerコンテナ、Kubernetes、マネージドサービス等々、多様なアーキテクチャが存在する。

 特にECSのようなコンテナを利用する場合の「アンチウィルス」対策をどうすれば良いのか、まとまった情報があまりなく、これが決定版だというプラクティスも見当たらなかったので、調べてみた結果をまとめてみた。また、AWSを想定した記載になっているがご容赦いただきたい。

 対策としては、大きく下記の3つの方向性があるようだ。

1) コンテナのホストマシン側にアンチウィルスソフトを導入

 おそらく一番イメージしやすくオーソドックスな方法は、コンテナを動かすホストマシンにアンチウィルスソフトを入れることだろう。AWS ECSではECSエージェントが稼働していれば、カスタムのEC2 AMIを利用することができる。アンチウィルスソフトを焼き込んだEC2インスタンスを利用すれば、通常のLinuxサーバー向けの製品群を使うことができる。

 数あるAntiVirusソフトウェアの中からどれを使えばいいのだろうか。WindowsやMac向けのソフトウェアであればある程度定量的な指標を含むレポートがセキュリティの独立研究機関等から定期的に出ているのだが、Linuxサーバー向けのアンチウィルスソフトウェアはそのような統計資料を見つけることができなかった。定性的なおすすめとして、最近の記事だと2020年3月のSafetyDetectivesの記事で、Bitdefender, Kaspersky, Sophos, F-Secureあたりがおすすめされている。

スクリーンショット 2020-05-01 14.45.55

(AV-TESTより引用)

 有償のアンチウィルスソフトを利用する時に、注意すべきなのはオートスケール時の取り扱いである。ざっと調査したところ、「想定される最大時」の台数分のライセンスが要求されるケースもあるようで、場合によっては金額が爆増するので注意が必要である。

 無償のものだとオープンソースのClamAVというものがあるようだ。これは`yum install clamav`で簡単にインストールできる。

2) 「Docker向け」のアンチウィルスソフトを利用

 Dockerコンテナに特化したタイプのアンチウィルスソフトもある。このタイプは、Sidecarコンテナのように、主となるコンテナに付属する形のコンテナとして立ち上げて動作させるらしい。AquaPrisma(旧Twistlock)が代表例のようだ。

スクリーンショット 2020-05-01 14.39.08

(図はAqua資料より引用)

 コンテナに特化することで、より精度高く疑わしい振る舞いを検知することができるようになるようだ。Aquaでは事前に機械学習を利用してそれぞれのコンテナで動作するプロセスや機能を特定し、ホワイトリスト化し、それ以外のプロセスが稼働することをブロックしてくれるらしい。確かに、コンテナは機能ごとに分割し、それぞれのコンテナで必要最低限のプロセスのみを稼働させるように作ることが多い。そういう意味では振る舞いの予測可能性は高そうである。

3) マネージドホスト(Fargate) + readonlyコンテナ + コンテナイメージスキャン

 こちらはある種割り切ったアイデアだ。Fargateはマネージドサービスであり、そこに対するウィルス対策はAWS側の責任範囲と仕切ってしまうことができる。稼働中のコンテナイメージをreadonlyとすることで外部からマルウェアがディスクに保存されることを防げる。こうすれば、ビルドされたコンテナイメージに脆弱性がない限りは、論理的に問題は発生しえないと言うことができる。

 コンテナのリポジトリ管理を行うAmazon ECRでは、コンテナイメージに対するスキャン機能が最近ついた(2019年10月公開)。設定はとても簡単で、ECRのリポジトリのセッティングから、「Scan on push」をONにしておけば、全てのイメージが自動的にスキャンされるようになる。なんと、CloudWatchにスキャン結果のログを流すこともできるので、Lambdaを利用してSlack通知をすることも割と手軽にできそうである。

 「Fargateを利用できる」「コンテナをread onlyにできる」という条件をクリアできるかはサービスの作り方次第ではあるが、もしそれができるのであればすぐに導入できる案だ。実際のサービス稼働時にアンチウィルスソフトの副作用を気にする必要がないのも嬉しい。なんとこの方法で実際にPCI DSSのような厳しい各種認証を通ったという噂も聞く。

スクリーンショット 2020-05-01 14.34.40


(How to monitor ECR Image Scanningより抜粋。ボタン一つで設定完了)


 調べてみた結果は以上である。もし間違った点を含んでいたら指摘いただけると幸いである。

 私のいるMNTSQ株式会社では、DevSecOpsを通じてエンタープライズクオリティのセキュリティを実現するために、絶賛SREの採用を進めているので、興味がある方は是非ともお気軽にお声かけいただきたい。


この記事が気に入ったらサポートをしてみませんか?