はじめに
今回はPrisma CloudのCWPP領域のセキュリティ機能であるランタイム防御(Runtime Defense)でLambda関数を監視し、
許可していないプロセスの起動を拒否してみようと思います。
そもそものCWPPについて知りたい方は弊社、鎌田の以下記事が参考になると思います。
Prisma Cloud の主要機能の1つ CWPP のアーキテクチャを解説
また、ランタイム防御を設定するためには、事前にLambda関数にディフェンダー(エージェントのようなもの)を導入する必要があります。
本記事ではディフェンダーがLambda関数に導入済みである前提で、導入手順については記載しません。
ディフェンダーの導入手順については弊社、渡邊の以下記事が参考になると思います。
【CWPP】Prisma Cloud のサーバーレスディフェンダーの導入方法
本記事はPrisma Cloudのランタイム防御に関する以下公式ドキュメントを参考に作成します。
Runtime Defense for Serverless Functions (prismacloud.io)
ランタイム防御でできること
ランタイム防御では、コンテナに対する予測的保護と、実行中のコンテナ、ホスト、サーバーレス機能に対する脅威からの保護を提供しています。
予測的保護は、コンテナが元のイメージに含まれていないプロセスを実行したり、予期せぬネットワークソケットを作成したりする際に、それを検出してくれます。
脅威からの保護は、ワークロードにマルウェアが追加された場合や、ワークロードがボットネットに接続する場合に、それを検出してくれます。
ランタイム防御では検出以外にも、プロセス、ネットワーク、ファイルシステムにおけるアクティビティを許可、拒否することができます。
本記事では実際に、ランタイム防御でLambda関数のプロセスのアクティビティを拒否してみます。
サーバレスランタイムポリシー
まずは、サーバレスランタイムポリシーを作成します。
本ポリシーでランタイム防御で利用する機能や防御対象とするLambda関数などを指定します。
「Defend > Runtime > Serverless policy」を開き、「Add rule」をクリックします。
ポリシーのルール画面が表示されます。
Scopeではランタイム防御の対象を設定することができます。この対象をcollectionと呼びます。
Scopeの「Click to select collections」をクリックします。
collectionを選択して、「Select collections」をクリックします。
今回は既に作成していたcollectionを選択しますが、右上「Add collection」で新たにcollectionを作成することもできます。
ポリシーを作成できたので、ここからはランタイム防御でプロセスのアクティビティを拒否してみます。
許可していないプロセスの起動を拒否
それでは、許可していないプロセスがLambda内で起動するのを拒否してみます。
実行するプログラムはPythonのsubprocessモジュールを使って、「ls -l」コマンドを実行するプロセスをLambda内に立ち上げ、その結果を返すプログラムとなります。
ランタイム防御の適用前にプログラムを実行すると以下が出力されます。
ポリシーは以下設定とします。Lambda内でPythonプロセス以外はプロセスが立ち上がらない設定としました。
ポリシーを保存した後、TW_POLICY環境変数を取得し、Lambdaに設定することでポリシーが適用されます。
※TW_POLICY環境変数の取得方法は弊社渡邊の以下記事に記載があります。
【CWPP】Prisma Cloud のサーバーレスディフェンダーの導入方法
Lambdaを実行したところ失敗し、「ls -l」コマンドを実行するプロセスが立ち上がらなかったことが分かります。
検知結果の確認
ランタイム防御でポリシー違反をおこしたリソースを確認できます。
「Monitor > Events」を開き、検知行をクリックすると検知の詳細が表示されます。
まとめ
本記事では、Prisma CloudのCWPP領域のランタイム防御(Runtime Defense)でLambda関数を監視し、
許可していないプロセスを拒否してみました。本記事でPrisma Cloudを利用することのメリットが伝わりましたら幸いです。