サーバーレスのセキュリティ: リスクとベストプラクティス

SHARE:

サーバーレスコンピューティングとは?

サーバーレス・コンピューティングとは、アプリケーション開発者がサーバーを管理する必要がなく、コードを関数としてデプロイし、需要に応じてサーバーを割り当てるという新しいパラダイムです。FaaS(Function-as-a-Service)モデルを使用しており、クラウドコンピューティングの一種で、開発者は大規模なサーバーインフラに対処することなく、コードを簡単にパッケージ化してデプロイすることができます。FaaSはイベント駆動型コンピューティングの実行アーキテクチャで、開発者はロジックを作成し、プラットフォームによって完全に管理されたコンテナにデプロイされ、オンデマンドで実行されます。

サーバーレスでは、サーバーはアプリケーション開発から抽象化され、クラウドプロバイダーはデプロイされたコードイベントに応じてサーバーインフラストラクチャのプロビジョニング、保守、スケーリングに責任を負います。サーバーレスプログラムは需要に対応し、起動後は必要に応じて自律的にスケールアップとスケールダウンを行います。パブリッククラウドプロバイダーのサーバーレス製品は、多くの場合、イベント駆動型の実行アプローチを使用してオンデマンドで測定されます。その結果、サーバーレス機能は使用されていない間はコストがかかりません。サーバーレスシステムソリューションの例は、データベース、ユーザー認証、ウェブサーバー、セキュリティトークンサービス(STS)、Lambda関数で構成されます。FaaSの最も一般的な例としては、Google Cloud Functions、Microsoft Azure Functions、AWS Lambdaなどがあります。

サーバーレス・テクノロジーの利用が最近増えている主な理由の1つは、ソフトウェア開発プロセスを迅速化できることです。開発者はサーバーのインフラ管理をクラウド・サービス・プロバイダー(CSP)に委託し、アプリケーションの機能を管理することができます。しかし、サーバーレスで直面する主な難題は、CSPがクラウドのセキュリティにのみ責任を持ち、クラウド内のセキュリティには責任を持たないという事実です。つまり、サーバーレスアプリケーションは、従来のアプリケーションが直面するリスクや脆弱性に依然としてさらされているだけでなく、サーバーレスアーキテクチャ特有のセキュリティ上の課題にも直面しています。そのため、アプリケーション開発者は、アイデンティティとアクセス管理(IAM)、リソース構成、コード関数とライブラリの保護を通じて、サーバーレスアプリケーションに責任を持つ必要があります。

このガイドでは、サーバーレスのセキュリティ、このアーキテクチャに関連するリスク、そしてそのような課題を軽減するためのベストプラクティスについて説明します。

サーバーレス・セキュリティとは?

従来、ほとんどのアプリケーションは、クロスサイトスクリプティング、壊れたアクセス制御、データベースインジェ クション、機密データの暴露、安全でないデシリアライズ、その他多くのセキュリティリスクに直面していました。これを軽減するために、ファイアウォールのインストールと設定、IPSツールの使用、あるいはサーバーベースの保護方法の使用といった従来の方法を使用しています。これは、ネットワーク検査に重点を置くのではなく、クライアント側での動作保護、コード保護、セキュリティ権限に重点を置くサーバーレス・アーキテクチャでは機能しません。したがって、サーバーレス・セキュリティとは、コード機能を保護するためにアプリケーションに直接追加される追加の保護レイヤーのことであり、それによって開発者はアプリケーションに対するコンプライアンスとセキュリティの姿勢を得ることができます。

サーバーレスのセキュリティリスク

1: アタックサーフェイスの拡大

サーバーレス関数は、HTTP API、クラウドストレージ、IoTデバイス接続、キューなど、さまざまなイベントソースから入力データを消費します。これらのパーツの中には、標準的なアプリケーション層の保護では適切にレビューされない可能性のある、信頼されていないメッセージ形式が含まれている可能性があるため、攻撃対象が大幅に増加します。入力データを取得するために使用される接続リンク(プロトコル、ベクター、関数など)は、独立した脆弱性が露呈した場合、攻撃のポイントとして使用される可能性があります。

2: セキュリティの設定ミス

サーバーレスアプリケーションは、クラウドサービスプロバイダが提供する設定や機能における安全でない設定のために、サイバー攻撃を受けやすくなります。例えば、サーバーレスアプリケーションでは、関数とホスト間のタイムアウト設定の誤りにより、サービス拒否(DoS)攻撃がしばしば発生します。攻撃者はまた、関数呼び出しに介入することで関数のリンクを悪用し、関数のイベントを予想よりも長く実行させ、DoW(Denial-of-Wallet)攻撃を可能にし、サーバーレス関数のコストを増加させます。パブリックリポジトリ(GitHubやS3バケットなど)から保護されていない関数を使用することも、機密データの漏洩によるDoW攻撃を引き起こします。これは、攻撃者がコードにハードコードされている保護されていない秘密や鍵を使って、公開されている関数を利用するためです。

3: 認証の失敗

サーバーレスアプリケーションはステートレスであり、そのアーキテクチャにマイクロサービスを使用することで、独立した機能の可動部分が認証の失敗にさらされます。例えば、何百ものサーバーレス機能を持つアプリケーションで、たった1つの機能の認証が誤って処理されると、アプリケーションの残りの部分に影響が及びます。攻撃者は、辞書攻撃や自動化されたブルートフォースなどのさまざまな方法でシステムにアクセスするために、1つの機能に集中することができます。

4: 過剰な特権的機能の脅威

サーバーレスエコシステムは多くの独立した関数に依存しており、それぞれの関数は独自の役割と権限を持っています。ファンクション間の大規模な相互作用は、時にファンクションに過剰な権限を与えてしまうかもしれません。例えば、常にデータベースにアクセスし、他の関数を更新する関数は、アクターに可視化されるため、大きなリスクになる可能性があります。

サーバレスセキュリティのベストプラクティス

1. APIゲートウェイをセキュリティバッファとして使用

サーバーレスアプリケーションにおけるイベントデータインジェクションを防止する1つの方法は、API HTTPSエンドポイントゲートウェイを使用してデータと機能を分離することです。データはさまざまなソースから取得されるため、APIゲートウェイはセキュリティバッファとして機能し、クライアントサイドのアプリユーザーとバックエンドのサーバーレス機能の間に分離を作ります。リバースプロキシを使っていくつかのセキュリティチェックを行うことで、攻撃対象が減少します。HTTPsエンドポイントを使用することで、データの暗号化やプロバイダの鍵管理など、組み込みのセキュリティプロトコルを活用することができ、保存されたデータ、環境変数、機密データを保護することができます。

2. データ分離と安全な構成

DoW 攻撃を回避するためには、コードのスキャン、コマンドとクエリの分離、公開された秘密キーやリンクされていないトリガーの特定、そしてサーバーレスアプリケーションのための CSP のベストプラクティスに準拠した構成など、予防メカニズムを導入する必要があります。実行コールがDoS攻撃者によって中断されないように、関数のタイムアウトも最小限に設定する必要があります。

3. 安全でない認証への対策

認証が破られるリスクを軽減するには、複数の専門的なアクセス制御および認証サービスを実装する必要があります。認証の侵入を確実に防ぐには、OAuth、OIDC、SAML、OpenID Connect、多要素認証(MFA)などの CSP のアクセス制御ソリューションを使用できます。さらに、ハッカーがクラックしにくいように、パスワードの長さや文字の種類に関してカスタマイズした複雑さの要件やポリシーを強制することもできます。

4. 十分なサーバーレス監視とログ

サーバーレスアプリケーション内のすべての機能を詳細に可視化するには、広範なオブザーバビリティとモニタリングツールに投資する必要があります。CSPが提供するロギングや監視ツールだけに頼るのは、アプリケーションレイヤーをカバーしていないため十分ではありません。これは大きなリスクです。なぜなら、その中のアプリケーション・イベント・データはセキュリティ攻撃にさらされており、綿密に監視しなければ、攻撃の潜在的な侵入口として機能する可能性があるからです。

5. 特権の最小化

独立した関数の権限を最小化するためのベストプラクティスは、関数を互いに分離し、その権限に IAM ロールをプロビジョニングすることで相互作用を制限することです。これは、イベントを正常に実行するために必要な最小限の権限でコードが実行されるようにすることでも実現できます。

6. アプリケーション開発環境の分離

最高の開発プラクティスの1つは、ステージング、開発、本番とさまざまな環境を分離することで、継続的な開発、統合、デプロイ(CI/CD)を保証することです。これは、コードのそのバージョンを進める前に、適切な脆弱性管理がすべての開発段階で優先されることを確実にします。また、パッチの優先順位付け、アップデートの保護、脆弱性の特定を通じて、アプリケーションの継続的なテストと改善を保証します。

Sysdigでサーバーレスのセキュリティリスクを回避

クラウドプラットフォームとサーバーレスアーキテクチャの普及に伴い、クラウドエージェントモデルにおける抽象化の人気は過言ではありません。仮想イメージやコンテナ(EKSやECSなど)をホストマシンとして使用することは、サーバーレスエコシステム内で絶えず増加しています。しかし、コンテナ化の主な課題は、コンテナセキュリティ、つまり、コンテナ・アプリケーションの基盤となるインフラ、ランタイム、データを保護するためのセキュリティ・プロトコルを確実に実装するプロセスです。

CaaS(Container-as-a-Service)領域におけるイノベーションを促進し、標準化を進めるために、Sysdigはコンテナ、クラウドネイティブなホスト、Kubernetes間の脅威の検知を支援するFalcoを開発しました。Sysdigはまた、AWS Fargateを使用してサーバーレスエージェントを構築し、Container-as-a-Serviceモデルをより便利に使用できるようにし、コンテナ内のセキュリティイベントの監視を容易にしました。Sysdigの全製品ラインは、上記で説明したサーバーレスセキュリティのほとんどの難しい課題に対応し、シームレスなサーバーレス製品のベストプラクティスの実装を支援します。