AWS - Abusing Lambda Extensions
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
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リクエストから機密情報を盗む、他の拡張のリクエストを変更するために作成されました。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)