Aqua NanoEnforcerを利用してLambdaのランタイム保護を利用してみる

2021.11.17

こんにちは、コンサル部@大阪オフィスのTodaです。

aqua社が提供しているAqua Enterpriseを試す機会がありましたので内容について色々まとめています。
今回はAqua NanoEnforcerを利用してLambdaのランタイム保護について確認します。

前回、別記事にてFUNCTION ASSURANCEの機能を利用してLambdaプログラムスキャンしてライブラリの脆弱性と機密情報の取扱が出来ているかを確認いたしました。
上記は、Lambdaプログラムと設定のチェックがメインとなりますのでプログラム動作時のチェックは保護範囲に入っておりません。
追加でランタイム保護を導入頂く事でプログラム内で悪意のある実行可能ファイルが動いていないかチェックも可能になります。

Aqua Enterpriseとは?

Aqua Enterpriseはaqua社が提供するソリューションでコンテナとクラウドネイティブアプリのために開発された、 フルライフサイクルなセキュリティソリューションになります。

■ aqua コンテナ・クラウドネイティブアプリのためのセキュリティソリューション
https://www.creationline.com/aqua

製品の内容については下記記事をご覧ください。

NanoEnforcerについて?

NanoEnforcerはLambda処理内で動作をチェックするプログラムになります。
対象のLambda処理にレイヤーを追加する事で監視と保護をおこないます。
NanoEnforcerの導入方法は3パターンます。

導入パターン

  • SQSとLambda関数(ハンドラ関数)を利用しての自動導入
  • 監視用レイヤーの作成、手動導入
  • Aquactlを使用した手動導入

今回は、SQSとLambda関数(監視導入処理)を利用した導入方法を試してみます。
複数のLambdaに監視レイヤーを設置する場合、自動導入は作業が少なくおすすめになります。

処理イメージ

監視対象のLambda処理があるAWS環境にAqua監査ハンドラ関数を設置してAqua Serverで設定した内容に合わせて監視が設定されるように対応致します。
Aqua監査ハンドラ関数が未設置の状態から対応いたします。

処理イメージ

導入ドキュメント

【重要】Aqua Enterpriseのドキュメントは全て認証が必要になっております。

■ Deploy the Aqua Audit Handler Stack with SQS
https://docs.aquasec.com/docs/deploy-the-aqua-audit-handler-stack-with-sqs

前提条件

Aqua Enterpriseは検証用ライセンスを利用して対応しています。
導入はAqua ServerとAqua Gatewayが設置済みの状態から開始いたします。
監視対象としてLambda(testAquaApi)というAPI Gatewayと連携したLambdaを利用しています。

ハンドラ関数導入操作

Aqua Deployment Tokenの確認

Aqua Serverにログインを頂き左メニューから[Administration] > [Enforcers]をクリックしてください。
一覧内の[default nano enforcer group]をクリックすると表示される「Deployment Token」をメモに残してください。
GatewayサーバのドメインまたはIPも必要となりますので合わせて残します。

■ 必要な情報(仮)
Deployment Token:xxxxxxxx-9999-9999-9999-9999999999
Gateway Server:xx.xxx.xxx.xxx:8443

Aqua Deployment Tokenの確認

監視対象の識別タグ設置

AWSマネージメントコンソールにログインを頂きサービスから[Lambda]を選択ください。
監視対象のLambda処理に識別用のタグを設置します。
今回は仮で「aqua_enable : true」というタグを設置しています。

監視対象の識別タグ設置

S3にハンドラ関数を含むファイル設置

下記URLにてハンドラ関数の構築に必要なファイルをダウンロードします。

■ Aqua-SQS-audit-handler-6.5.zip
https://download.aquasec.com/serverless/auditlambda/Aqua-SQS-audit-handler-6.5.zip
※バージョンが変わる場合がございますので導入ドキュメントにてURLをご確認ください。

圧縮ファイルは解凍せず、aqua用のS3バケットを新規作成して設置します。
パブリックアクセス設定は全てブロックの状態で作成します。
アップロードが完了したらバケット名とファイル名を指定するためメモに残します。

■ 必要な情報(仮)
S3バケット名:xxxxxx-aqua
ファイル名:Aqua-SQS-audit-handler-6.5.zip

Cloud Formationによるデプロイ

AWS環境にCloud Formationを利用してSQSとLambda処理を設置します。
下記Githubの画面に表示される内容から[Serverless - Aqua Security Serverless]を選択頂き画面内の[Launch Stack]ボタンをクリックください。

■ Aqua Security AWS Deployments
https://github.com/aquasecurity/aqua-aws/tree/6.2

スタックの作成画面が表示されるため[次へ]をクリックします。
パラメータにはそれぞれ取得をした情報を入力します。

■ 入力情報
AquaGatewayAddress:(Gateway Server:xx.xxx.xxx.xxx:8443)
AquaToken:(Deployment Token:xxxxxxxx-9999-9999-9999-9999999999)
CommunicationMethod:grpc
S3Bucket:(S3バケット名:xxxxxx-aqua)
S3CodeKey:(ファイル名:Aqua-SQS-audit-handler-6.5.zip)

上記入力後、[次へ]をクリックして画面を進んで頂き機能と変換にて3点のチェックボックスクリックをおこない[スタックの作成]をクリックします。
ステータスが[CREATE_COMPLETE]になるため待機します。

SQS URLの取得

Cloud Formationが正常に完了するとSQS URLが出力されます。
上記をメモに残してください。

■ 必要な情報(仮)
SQS URL:https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxx/aquaaudit

SQS URLの取得

Aquaの統合設定にSQS追加

Aqua Serverの画面に戻って頂き[Administration] > [Integrations] > [Serverless Applications]をクリックしてください。
前回作成した設定があるのですが、SQSを追加設定できないため1度設定を削除して再度設定をおこないます。
入力欄の「SQS URL」には先ほど取得したURLを設定します。
上記保存をすることでハンドラ関数の設定は完了になります。

Aquaの統合設定にSQS追加

監視対象への監視レイヤー追加

ハンドラ関数を利用して監視対象のLambda処理に監視レイヤーを追加してきます。
追加はランタイムポリシーの設定追加をトリガーとしておこなわれます。

ランタイムポリシー追加

Aqua Server画面、左メニューから[policies] > [Runtime Policies]をクリックします。
[Add policy]をクリックして表示されるサブメニューから[Function Runtime]をクリックします。

ランタイムポリシー追加

ランタイムポリシーの設定

ポリシーの名前とスコープ範囲の指定をします。
スコープ範囲の指定はLambdaに設定したタグを指定する事で監視対象の判定をおこないます。 [Additional Scope Criteria]をクリックすることでタグ指定が可能になります。
Additional Scope CriteriaにてFunctionのtag("aqua_enable"."true")を指定いただくことで判定が可能です。

Enforcement Modeはポリシー違反が発生した場合に、動作をどうするかを指定します。
通知のみ(Audit)/強制停止(Enforce)を選択します。

Controlsには悪意のある実行可能ファイルの動作を停止する設定がございます。
今回、「Block Malicious Executables」と「Executables Blocked」を有効化します。
上記設定をおこない[Save]をクリックします。

ランタイムポリシーの設定

ランタイムポリシーの設定が完了すると設定操作が全て完了になります。

レイヤー追加の確認

Aqua Server画面、左メニューから[Security Reports] > [Audit]をクリックします。
直近作成したPolicyに対して「compute provider. XX functions successfully deployed.」となっているメッセージがある事を確認します。
また、XXの箇所は監視対象のLambdaの数になるため数が総定数と一致するか確認します。

レイヤー追加の確認1

AWSコンソールにて監視対象のLambdaを確認してレイヤーにaqua用のレイヤーが追加されていることを確認します。
設定内容が反映されていることを確認します。

レイヤー追加の確認2

レイヤー追加の確認3

上記、導入作業ができていることを確認しました。

さいごに

今回はAquaのNanoEnforcerを利用してLambdaのランタイム保護を実装していました。
実際、悪意のあるプログラムを流して挙動確認をしてみたかったのですが、作成に課題があり挙動確認ができていません。
引き続きランタイム保護について追加情報ございましたらご案内いたします。
少しでもお客様の作りたい物の参考になればと考えております。