AWS - Abusing Lambda Extensions

HackTricksをサポートする

Lambda拡張

Lambda拡張は、さまざまな監視、可視性、セキュリティ、およびガバナンスツールと統合することで関数を強化します。これらの拡張は、.zipアーカイブを使用したLambdaレイヤーを介して追加されるか、コンテナイメージのデプロイメントに含まれ、内部および外部の2つのモードで動作します。

  • 内部拡張は、ランタイムプロセスと統合し、言語固有の環境変数ラッパースクリプトを使用してその起動を操作します。このカスタマイズは、Java Correto 8および11、Node.js 10および12、.NET Core 3.1を含むさまざまなランタイムに適用されます。

  • 外部拡張は、別のプロセスとして実行され、Lambda関数のライフサイクルに合わせて動作を維持します。これらは、Node.js 10および12、Python 3.7および3.8、Ruby 2.5および2.7、Java Corretto 8および11、.NET Core 3.1、およびカスタムランタイムなど、さまざまなランタイムと互換性があります。

Lambda拡張の動作方法についての詳細はドキュメントを確認してください

永続性のための外部拡張、リクエストの盗難およびリクエストの変更

これは、この投稿で提案された技術の要約です:https://www.clearvector.com/blog/lambda-spy/

Lambdaランタイム環境のデフォルトのLinuxカーネルは、「process_vm_readv」および「process_vm_writev」システムコールでコンパイルされていることがわかりました。そして、すべてのプロセスは同じユーザーIDで実行され、新しいプロセスも外部拡張のために作成されます。これは、外部拡張が設計上、Rapidのヒープメモリに対して完全な読み取りおよび書き込みアクセスを持つことを意味します。

さらに、Lambda拡張は呼び出しイベントにサブスクライブする機能を持っていますが、AWSはこれらの拡張に生データを公開しません。これにより、拡張がHTTPリクエストを介して送信される機密情報にアクセスできないことが保証されます。

Init(Rapid)プロセスは、http://127.0.0.1:9001でのすべてのAPIリクエストを監視し、Lambda拡張は初期化され、Rapidの後にランタイムコードの実行前に実行されます。

変数**AWS_LAMBDA_RUNTIME_APIは、子ランタイムプロセスおよび追加の拡張に対してRapid APIのIPアドレスとポート**番号を示します。

AWS_LAMBDA_RUNTIME_API環境変数を私たちがアクセスできるportに変更することで、Lambdaランタイム内のすべてのアクションを傍受することが可能です(中間者攻撃)。これは、拡張がRapid Initと同じ特権で実行され、システムのカーネルがプロセスメモリの変更を許可しているため、ポート番号の変更が可能です。

**拡張がランタイムコードの前に実行されるため、**環境変数を変更すると、ランタイムプロセス(例:Python、Java、Node、Ruby)の起動に影響を与えます。さらに、私たちの後に読み込まれる拡張は、この変数に依存しており、私たちの拡張を経由してルーティングされます。この設定により、マルウェアがセキュリティ対策やログ拡張を完全にバイパスすることができる可能性があります。

ツールlambda-spyは、メモリ書き込みを実行し、Lambdaリクエストから機密情報を盗む、他の拡張リクエスト変更するために作成されました。

参考文献

HackTricksをサポートする

Last updated