fbpx

function のパフォーマンス最適化とランタイム保護 #AquaSecurity #サーバーレス #Lambda #AWS #セキュリティ #function

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本ブログは「Aqua Security」社の技術ブログで2019年6月18日に公開された「 Performance-Optimized Runtime Protection for Serverless Functions with Aqua 」の日本語翻訳です。

functionのパフォーマンス最適化とランタイム保護


実行中の function を保護する場合は、実行時間が非常に短いという特性を考慮し、アプリケーションの速度の低下・クラウドの使用コストの増加の発生しないよう配慮する必要があります。Aqua CSP 4.2では既存のリスク評価・function スキャン・function保証機能の3点の観点でそれを補完的に行う高度なランタイム保護を導入しました。

サーバーレスのリスクを軽減

以前のブログで書いたように、サーバーレス(AWS Lambda など)は function コードの脆弱性、function コード・環境変数にプレーンテキストとして埋め込まれたクラウドアカウントキーなどの機密データ・よくありがちな過剰な権限・役割の付与による複数のリソースへのアクセス許可といったリスクがあります。これらのリスクの多くは function が実行される前に CI/CD パイプラインで軽減できます。その function に最適な最小限の特権モデルを見つけて機能に影響を与えずにセキュリティの姿勢を改善し、開発者に適切な権限や資格を付与することで自由度が高くなりすぎることを防ぎます。

上記の予防処置を行っても、まだ function の実行時に具体化し影響の軽減のための高度なセキュリティ制御を必要とするリスクは存在します。function の実行時間は通常非常に短いです。AWS Lambda で許可される最大値は15分ですが、その制限に達することはめったにありません。多くの場合1秒未満あるいは何分の1秒で実行されます。永続性が無いことで従来の攻撃シナリオから守られるため、これはセキュリティの観点からは良いことです。しかし function を悪用(クリプトマイニングなど)したり、踏み台として function を使用してクラウドアカウントの追加リソースにアクセスする新しい攻撃方法があります。これらの攻撃は、コードインジェクション技術またはシリアライズを利用した攻撃が用いられ、開発やデプロイ段階では防止できません。

この種の攻撃を防ぐには function のランタイムを保護する、より積極的なリアルタイム制御が必要です。

サーバーレス向けランタイム保護

すべての入力や出力の検証・プロセスの監視・イベントのログ・機密データの暗号化など、リソースを集中的に使用するセキュリティコントロールを function で実現する場合、おそらく function の実行時間に許容できない遅延を生むことになります。結果として function の大幅なコスト増加・パフォーマンスの低下(遅延)・タイムアウト期間の大幅な増加(それ自体がセキュリティリスクとなります)・開発チームとの不必要な摩擦を引き起こします。このアプローチでは費用がかかりすぎて、そもそもサーバーレスを使用する多くのメリットが無くなります。

さまざまなリスクとその潜在的な軽減策を徹底的に分析し、ランタイム保護を設計する際にパフォーマンスの最適化と摩擦のないセキュリティを最優先事項とすることで、function 呼び出し時間への影響を3ミリ秒未満に抑えながら攻撃を停止できるようにしました(2Mb未満のメモリを使用)。我々は、実行時のリスクを軽減するために、誤検知やユーザ環境へリスクが無いランタイム攻撃防止手段を開発しました。

Aqua Nano Enforcer の紹介

Aqua Nano Enforcer は Aqua コンポーネントの一つです。これは専用のコントロールと最適なパフォーマンスを備えた function 用に設計されたコードです。Nano Enforcer は function コードやランタイムを変更せずに Lambda として追加することで、AWS Lambda functionに追加できます。Aqua サーバで Aqua Nano Enforcer を定義すると、AWS アカウント内の Lambda レイヤーとしてアップロードできるZIPファイルが作成されます。そのレイヤーはユーザが保護したい function に関連付けられます。

大規模な環境での利用を簡素化するために、Nano Enforcer レイヤーを目的の function に自動で追加するための新しいツールも作成しました。

Runtime Security Policy と制御

サーバーレス向けの Aqua ランタイム保護はいくつかのユニークな制御を提供します。一部コンテナ向けランタイム保護と類似したものがありますが、パフォーマンスへの影響を低く抑えるためにシンプルさと効果を優先しました。

主に3つの制御を提供しています。

  1. Preventing malicious executables in functions悪意のあるコードインジェクション(子プロセス)が実行中の function に追加されるのを防ぎ、基本的に function の呼び出しをホワイトリストに登録することで新しいコードの実行をブロックします。これは攻撃者が書き込み可能な唯一の場所である function の「/tmp」ディレクトリの悪用を保護します。
  2. Blacklisting of forbidden executablesセキュリティチームは、開発者が function に含めることを許可されている実行可能ファイルのタイプを制御し、クリプトマイニングやマルウェアの使用を防止できます。
  3. Honeypots function コードあるいはその環境変数に埋め込まれた「エサ」をわざと用意し、悪用するよう攻撃者を誘惑することにより、悪意のある意図を検出する新しいコントロールです。function の悪用と、犯行の兆候を決定的に識別できるという点でユニークです。

Aqua Serverless Runtime Protection のテスト

OWASP の ServerlessGoat を使用して、Aqua Serverless Runtime Protection をテストします。

ServerlessGoat は OWASP によって保守されており、意図的に安全ではない AWS Lambda サーバーレスアプリケーションを作成できます。

以下は Aqua Nano Enforcer レイヤーを使用せずに未検証のコードを function に挿入した例です。
AWS 資格情報(シークレットキー・アクセスキー・セッショントークン)などの機密情報がプレーンテキストで環境変数として保存され、公開される可能性があることに注意してください。

次に Aqua Nano Enforcer レイヤーを追加します。

Aqua Nano Enforcer はコードインジェクションの試みをブロックし、プレーンテキストで保存された AWS 認証情報の公開を防ぎます。

まとめ

Aqua CSP 4.2はコンテナとサーバーレス双方に完全なライフサイクルセキュリティを提供します。既存のコンテナランタイムセキュリティコントロールを単に「サーバーレス」としてラベル付けしたわけではありません。これは Aqua Nano Enforcer を使用するまったく新しいアーキテクチャです。これはパフォーマンスが最適化されたスケーラブルな保護と、特定のクラウドサーバーレスプラットフォームに合わせた独自の機能を提供します(現在 AWS Lambdaのみサポート。今後追加予定)。

以下よりサーバーレスセキュリティの詳細についてご視聴ください。

Register to learn more about serverless runtime security:Serverless security

New call-to-action
新規CTA