AWS - Lambda Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon Web Services (AWS) Lambdaは、サーバーの提供や管理を必要とせずにコードを実行できるコンピュートサービスとして説明されています。リソースの自動割り当てを処理する能力により、高可用性、スケーラビリティ、セキュリティなどの機能を保証します。Lambdaの重要な側面は、利用したコンピュート時間に基づいて料金が発生する価格モデルであり、初期投資や長期的な義務が不要です。
Lambdaを呼び出すには、好きなだけ頻繁に呼び出すことが可能です(Cloudwatchを使用)。URLエンドポイントを公開して呼び出すことも、API Gateway経由で呼び出すことも、S3バケット内のデータの変更やDynamoDBテーブルの更新などのイベントに基づいて呼び出すこともできます。
Lambdaのコードは**/var/task
**に保存されています。
Lambdaは複数のバージョンを持つことができます。 また、エイリアスを介して1つ以上のバージョンを公開することができます。エイリアス内で公開されている各バージョンの重みが、どのエイリアスが呼び出しを受けるかを決定します(例えば90%-10%など)。 1つのエイリアスのコードが脆弱な場合、脆弱なバージョンがエクスプロイトを受け取るまでリクエストを送信できます。
Lambdaリソースポリシーは、他のサービスやアカウントにLambdaを呼び出すアクセスを与えることを可能にします。 例えば、URLを介して公開されたLambdaに誰でもアクセスできるようにするポリシーは次の通りです:
また、API Gatewayが呼び出すことを許可するためのポリシーは次の通りです:
数百の同時Lambdaリクエストがある場合、各リクエストがデータベースに接続して切断する必要があると、うまく機能しません(Lambdaはステートレスで、接続を維持できません)。 そのため、Lambda関数がRDS Proxyと対話する場合、データベースインスタンスの代わりに、同時Lambda関数によって作成された多くの同時接続のための接続プールを処理します。これにより、Lambdaアプリケーションは既存の接続を再利用でき、新しい接続を各関数呼び出しのために作成する必要がなくなります。
データを保持し、共有するために、LambdaはEFSにアクセスし、マウントすることができます。これにより、LambdaはEFSから読み書きができるようになります。
Lambdaのレイヤーは、追加のコードや他のコンテンツを含むことができる.zipファイルアーカイブです。レイヤーにはライブラリ、カスタムランタイム、データ、または設定ファイルを含めることができます。
関数ごとに最大5つのレイヤーを含めることが可能です。関数にレイヤーを含めると、**内容は実行環境の/opt
**ディレクトリに抽出されます。
デフォルトでは、作成したレイヤーはあなたのAWSアカウントにプライベートです。他のアカウントとレイヤーを共有することや、レイヤーを公開することを選択できます。異なるアカウントが公開したレイヤーを関数が使用する場合、レイヤーが削除された後や、レイヤーへのアクセス権が取り消された後でも、関数はレイヤーのバージョンを引き続き使用できます。ただし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新したりすることはできません。
コンテナイメージとしてデプロイされた関数はレイヤーを使用しません。代わりに、イメージをビルドする際に、好みのランタイム、ライブラリ、および他の依存関係をコンテナイメージにパッケージ化します。
Lambda拡張は、さまざまな監視、可視性、セキュリティ、およびガバナンツールと統合することで関数を強化します。これらの拡張は、Lambdaレイヤーを使用した.zipアーカイブまたはコンテナイメージデプロイメントに含まれる形で追加され、内部と外部の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、およびカスタムランタイムなどのさまざまなランタイムと互換性があります。
今、実行可能なラムダ関数を見つける時です:
「Level6」という名前のラムダ関数が利用可能です。これを呼び出す方法を見てみましょう:
名前とIDがわかったので、名前を取得できます:
そして最後に、関数にアクセスして呼び出します(ID、Name、function-nameがURLに表示されることに注意してください): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Lambdaをトリガーできる他の多くのソースがあります
次のページでは、Lambdaの権限を悪用して特権を昇格させる方法を確認できます:
AWS - Lambda PrivescAWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)