コンテナセキュリティ リスクと対策

コンテナイメージ/コンテナレジストリ

「コンテナを使って次期システムの構築を検討しているのですが、セキュリティは従来の仮想マシンと同じでよいものでしょうか。」――弊社のお客さまやパートナーさまからこんなご質問をいただくケースが増えてきました。ここ数年のクラウドの普及に伴い、保守や維持に人的リソースや金銭的コストを費やす従来型のIT部門から、よりビジネスに貢献できる攻めのITを目指すため、保守に重きを置くのではなく、新しい技術を用いた業務改善や新しいビジネスへの進出を積極的に支援するIT部門が増えています。いわゆる”DX (Digital Transformation)”を起こそうという動きです。
その動きの中で、多くのIT部門が着目しているのがコンテナ技術です。リソース効率がよく、環境全体として高パフォーマンスを出しやすいことや、環境のコピーも容易であるなどの特長から、高スピードでのアプリケーション・システム開発が求められるDXやDevOpsといった領域と相性が良いのです。

コンテナセキュリティの6ポイント

コンテナ環境のセキュリティを考える際に重要となるのが「コンテナ特有のライフサイクル」を踏まえた対策ができるかどうかです。 コンテナ環境はサーバ、ネットワーク、ホストOS、コンテナで動作するアプリケーションだけで成立するものではなく、コンテナイメージ、レジストリ、オーケストレーションツール、コンテナランタイムなど、コンテナのライフサイクルにおいて特有の登場人物があり、これらを考慮したセキュリティ設計が求められるのです。コンテナ環境のセキュリティを考えるうえで踏まえておくべきポイントは下記の6つに分類できます。

① 安全なコンテナイメージを利用
② コンテナレジストリの保護
③ オーケストレーションツールの保護
④ アプリケーション、ネットワークの保護
⑤ コンテナホストの保護
⑥ ビルドパイプラインの保護

今回は上記の①と②についてご説明差し上げます。

コンテナのライフサイクルとセキュリティのポイント

図1 : コンテナのライフサイクルとセキュリティのポイント

① 安全なコンテナイメージを利用

コンテナを用いて新しいシステムを作るとき、利用するアプリケーションをゼロから作りこむこともできますが、オンライン上のレジストリに保管されているコンテナイメージを取得して実行したり、これを自社の仕様にあわせてカスタマイズして利用したりするケースが多くみられます。 このようにレジストリを介して、コンテナイメージを共有することで、開発効率の向上を図ることができるのです。
 第三者が作ったコンテナイメージを利用する場合、そのイメージ内にマルウェアが含まれていたり、イメージ内のアプリケーションに脆弱性が存在したりするリスクは少なからず存在します。悪意のある第三者がマルウェアを仕込んだコンテナイメージをレジストリ(パブリックリポジトリ)に設置して、これを利用することで被害に遭うのは想像に容易いだろうと思います。 しかし、公式のイメージを利用する場合やプライベートなレジストリを利用する場合においても、アプリケーションに思わぬ脆弱性が存在することもあり、セキュリティリスクを無視することはできません。
当社で確認した不正なコンテナイメージが展開される流れとその動作について、セキュリティブログにまとまっていますので、こちらもご覧ください。

当社が確認した不正なコンテナイメージが感染する流れ

図2 : 当社が確認した不正なコンテナイメージが感染する流れ

また、コンテナイメージは悪意ある攻撃に用いられるだけでなく、例えばそのイメージ内に誤ってクラウドサービスへ接続するための暗号鍵・シークレットキーなどを保存してしまうことでも、セキュリティリスクが発生します。シークレットがコンテナイメージに含まれていることを把握しないまま、パブリックリポジトリにPushしてしまうと、機密情報の漏えいなどにつながります。
そこで、コンテナをデプロイして稼働させる前に、コンテナイメージが安全であるかをスキャンするためのセキュリティフローをコンテナのライフサイクル、CI/CDパイプラインに組み込むことが求められます。 コンテナが本番稼働してから、マルウェア・脆弱性の存在やシークレットキーが紛れ込んでいることが明らかになると、稼働し始めたシステムを止める必要が出てきますし、ステージング環境で発覚したとしても、もう一度コンテナイメージをカスタマイズするところから開発フローをやり直すことになります。コンテナを用いてDevOpsを行うような、素早い開発が求められる場合は、開発フローのできるだけ早い段階でセキュリティ上の問題を明らかにして、手戻りを少なくすることが重要なのです。

② コンテナレジストリを保護

コンテナレジストリは主に、コンテナイメージを保管、組織内外で共有する際などに利用され、他の組織が作成したイメージを活用することができるため、開発効率をあげるために積極的に利用されるシステムです。このレジストリのセキュリティを考える際には2つポイントがあります。
ひとつめは「レジストリに保存されているコンテナイメージが安全なものかどうかをスキャン」することです。これは①で説明した通りですが、イメージの安全性を確認するにはレジストリに保管されている段階でスキャンを行うことが多いです。そしてこの時、重要なのは「自動化」です。コンテナイメージを作成してレジストリにPushしたあと、手動でスキャンをかけるのではなく、PushされたときにAPIなどを利用して自動でそのイメージをスキャンするように仕組みを作っておくことで、セキュリティ運用が煩雑にならず、「コンテナを使って素早く開発したい、DevOpsを推進したいのに、セキュリティオペレーションが邪魔をする」という事態を避けることができます。『コンテナを用いたDevOps』と『セキュリティ』をうまくブレンドするためには『自動化』がとても重要なキーワードなのです。
そしてレジストリのセキュリティを考える際のポイントふたつめは、レジストリ自体を適切に保護することです。AWSやMicrosoft Azure、Google Cloudなどのクラウドベンダーが提供するレジストリを利用する際は、利用者はこのレジストリへのアクセス権を適切に設定することで基本的には安全に利用できますが、自社環境内に独自のレジストリを設置する際は、アクセス権の設定だけではなく、脆弱性を利用した不正侵入などに対応するためのセキュリティシステムを構築する必要があります。

レジストリと脅威

図3 : レジストリと脅威

今回はコンテナセキュリティを考える際のポイント6つのうち「①安全なコンテナイメージを利用」「②コンテナレジストリの保護」についてご説明差し上げました。次回は「③オーケストレーションツールの保護」「④アプリケーション、ネットワークの保護」についてお話しする予定です。

トレンドマイクロ株式会社
ビジネスマーケティング本部 マネージャ
福田 俊介

Trend Micro Cloud One・Deep Securityのプロダクトマーケティングおよび、クラウドセキュリティマーケティングに従事。クラウドセキュリティのエキスパートとしてお客さまの情報資産を守るため、各種セミナー・講演などでセキュリティの重要性を説く。