開発生産性の脅威ともなる、コンテナ・サーバレス環境の脆弱性
日本においても、いずれは欧米と同様にコンテナやサーバレスの環境が利用されるようになるだろう。そのため、これからコンテナやサーバレス環境を開発する人、あるいはサーバレス環境でアプリケーションを開発する人にこそ「今のうちにセキュリティを意識しておいてほしい」と福田氏。それが、セキュリティの専門家であるトレンドマイクロが開発者向けのDevelopers Summitで話をする理由だと言う。
ところで、サーバレス環境のセキュリティは誰が責任を持つべきなのか。トレンドマイクロの調査によると、この問いに対して、ITオペレーション担当者だとの回答が34%と高いが、DevOpsおよびアプリケーションの開発者だとの回答も16%ある。今後は、アプリケーションを開発する中でセキュリティを検討するケースがより増えていくだろうと福田氏は予測する。
一般論として、コンテナ環境の構成で起こる被害パターンとしてどのようなものがあるだろうか。1つが攻撃者によりパブリックなレポジトリに悪意のあるコンテナイメージが登録され、それを取得し展開したサイトで、攻撃者がそれを利用するケースがある。またはユーザーのレジストリに不正侵入され、悪意のあるイメージを登録されるケースもあるだろう。
コンテナイメージのスキャン機能を搭載したクラウドベンダーもあるが、「脆弱性発覚のタイミングの問題や不正プログラム対策機能の有無などによって見逃してしまい、悪意のあるイメージがデプロイされ、ファイル実行がされることも起こり得ます」と福田氏。このような流れの攻撃は、トレンドマイクロでも既に観測している。その例として仮想通貨を発掘する不正なDockerコンテナ、コンテナ経由でホスト侵害するコンテナエスケープの例が示された。
さらに攻撃の様子が、デモでも紹介された。攻撃者が脆弱性のあるサイトにアクセスし、コマンドを実行してサイトがLinux、Kubernetesで動いていることを確認。wgetコマンドでkube-controller-managerをダウンロードし、それを使い権限を付与して攻撃者がPodを作れる状況や、侵入したPodからホストの制御ができ、ランサムウェアによってファイルが暗号化される様子までもが紹介された。これらは、Kubernetes環境に不要な権限が付与されていることで攻撃を許している例だ。
多くのコンテナ環境にはKubernetesという特有の環境があり、それがうまく設定されていないために悪用されることがある。結果的にホストごと乗っ取られ攻撃者に操作されてしまう。こういったコンテナ環境の脅威があることを、開発者もしっかり認識してほしいと言う。
さらに福田氏は、AWS LambdaなどのFaaS(Function as a Service)環境の脅威も説明した。クラウドサービスの利用では、責任共有モデルという考え方があり、FaaSではアプリケーションとデータは顧客側が守る必要がある。FaaSで動くアプリケーションに脆弱性がないか、そこで取り扱うデータの正確性に関する責任はユーザーにあるのだ。
FaaS環境の脅威の原因は、インジェクション攻撃が多い。アプリケーションの脆弱性を利用したインジェクション攻撃で、不正アクセスが起きないようにする必要がある。福田氏は、FaaS環境が攻撃される様子についてもデモで紹介した。Amazon API Gateway、AWS Lambdaで動いているWebサーバがあり、Amazon Simple Storage Service(以下、Amazon S3)がバックエンドにある構成で、アプリケーションの不備を利用してクレデンシャルを奪い、それを使って権限昇格を行いAmazon S3の機密情報を抜き出すものだ。
AWS Lambdaで提供されている脆弱性のあるWebサイトのURIに、特定の文字列を入れるとAWS Lambdaの情報が見られる。さらにAWS Lambdaの環境変数を見るスクリプトを入れると、クレデンシャルの情報も見られてしまう。それを使い管理者権限を付与すれば、Amazon S3に入っている情報も見られるようになるのだ。これには、従来のソフトウェアをサーバにインストールしてサーバごと守る方法は通用しない。責任共有モデルに則り、利用者はサーバレイヤにソフトウェアをインストールできないからだ。サーバレス環境では、セキュリティもサーバレスに即した対策を行く必要がある。それを開発者も認識してほしいと福田氏は言う。
コンテナやサーバレスを使うのは、DevOpsやアジャイル開発で迅速なアプリケーション開発を実現するためだろう。素早く開発しても、デプロイ段階で脆弱性が見つかれば、開発に後戻りして対策するしかない。結果的に速く開発する目的は達成できない。これを福田氏は即席麺の作り方で説明した。
カップのかき揚げうどんであれば、先にかき揚げを取り出し後から載せてうどんを完成させる。しかしきつねうどんの場合は、蓋を開けてすぐにお湯を入れる。「かき揚げうどんは後載せだからサクサク、一方きつねは先入れし、それによりしっとり食べられる。IaaS中心のクラウド環境はかき揚げうどん方式で、セキュリティの後載せでうまく回っていたケースもあります。サーバレスではこれだとうまくいきません。後載せではセキュリティのせいで開発、設計のし直しが発生しかねません」と福田氏。サーバレスでは、シフトレフトでなるべく前段階でセキュリティを組み込み、セキュリティ対策がサーバレスのメリットを阻害しないよう設計すべきだと説明する。
責任共有モデルによりコンテナ、FaaSでは、IaaSとはセキュリティが実装できるレイヤが異なる。そのためアプリケーションレイヤでのセキュリティ実装が必要であり、開発パイプラインにセキュリティを組み込むDevSecOpsの取り組みが重要となる。
コンテナやFaaSでは、アプリケーション自体へのセキュリティ実装を
コンテナ、サーバレスのセキュリティ対策として、トレンドマイクロではTrend Micro Cloud Oneを提供している。これは、7つの多様なサービスで構成される、クラウド環境をまとめて保護するセキュリティサービス群だ。ストレージ向けサービス、アカウントの設定不備を見つけるサービス、オープンソースの脆弱性を確認するサービスなどが用意されており、コンテナ、サーバレスのセキュリティ機能もある。それらがCloud Oneのプラットフォームで提供されている。
Trend Micro Cloud One – Container Securityは、コンテナ環境の開発プロセスの中で、レジストリに保存されているコンテナイメージに対して脆弱性や不正プログラムなどを見つけることができる。また決められたポリシーベースで、コンテナのデプロイを制御する機能もある。他にもコンテナランタイムを監視して、不正ファイルの実行なども検知できる。これは「イメージのデプロイ前にセキュリティチェックができるサービスになっています」と福田氏。セキュリティをシフトレフトできるサービスだと言う。
アプリケーションセキュリティは、アプリケーション自体にセキュリティを実装することで保護する機能だ。これによりコンテナのマネージドサービスやサーバレスで動いているアプリケーションも守ることができる。RASP(Runtime Application Self Protection)というセキュリティ機能の実装方法を採用したもので、保護対象のアプリケーションのコードに数行追加することで、トレンドマイクロが用意している外部ライブラリを読み込み、アプリケーション自体にセキュリティ機能を実装するものとなる。この機能を使えば脆弱性を突いた攻撃通信や、リモートコマンドの実行防止、リダイレクト攻撃や不正なファイルアクセスなども防止できる。
「WAFはネットワーク・インラインで、外部からの通信を捌いて実施するセキュリティ製品になります。一方RASPは、アプリケーションの内部の挙動を見るので、WAFを通過してもアプリケーションの内部で脅威を捕まえることができます」と福田氏は説明する。
この他にもCloud Oneには、ネットワークIPSのサービス(Trend Micro Cloud One – Network Security)も搭載している。コンテナ、サーバレスの環境を外部接続する場合に、一旦このIPSのサービスでアクセスをスキャンしてからアプリケーションに戻すことができる。たとえばパブリックサブネットでIPS機能を用いてスキャンしてから、プライベートサブネットのPodに安全な通信を流すような使い方ができる。
改めてコンテナやFaaSでは、アプリケーションレイヤでのセキュリティ実装を検討してほしいと強調する。「これはトレンドマイクロの人間としてではなく、セキュリティ屋さんとしての意見です」と福田氏。利用するクラウドサービスによっては仮想マシンやネットワークレイヤでできる対策もあるが、境界防御を突破され、侵入前提の対策をとるという発想から、アプリケーション自体で守り、多層防御を強くしていくのはおすすめだ。そのため開発のパイプラインにセキュリティを組み込んでいくとの発想を、ぜひ持ってほしい。「キーポイントはかき揚げうどんではなくきつねうどんの作り方です」と言うのだった。