Az - Function Apps
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)
Azure Functionsは、サーバーレスソリューションで、コードを少なく書き、インフラストラクチャを少なく維持し、コストを節約できます。サーバーのデプロイや維持について心配する代わりに、クラウドインフラストラクチャはアプリケーションを実行するために必要な最新のリソースを提供します。
Azureポータルでは、Azure FunctionsとAzure API Managementの統合が促進され、HTTPトリガー関数エンドポイントをREST APIとして公開できます。この方法で公開されたAPIはOpenAPI定義を使用して記述され、RESTful APIに対する標準的で言語に依存しないインターフェースを提供します。
Flex Consumptionプランは、動的でイベント駆動型のスケーリングを提供し、柔軟なコンピューティングオプションを持っています。需要に応じて関数インスタンスを自動的に追加または削除し、効率的なリソース使用とコスト効果を確保する従量課金モデルを採用しています。このプランは、セキュリティを強化するための仮想ネットワーキングをサポートし、インスタンスを事前にプロビジョニングすることでコールドスタートを削減できます。変動するワークロードを持ち、コンテナサポートなしで迅速なスケーリングが必要なアプリケーションに最適です。
Azure Functionsの従来のConsumptionプランは、デフォルトのサーバーレスホスティングオプションで、関数が実行されているときのみコンピューティングリソースに対して支払います。受信イベントの数に基づいて自動的にスケールアウトし、間欠的または予測不可能なワークロードを持つアプリケーションにとって非常にコスト効果が高いです。コンテナデプロイメントはサポートしていませんが、コールドスタート時間を短縮するための最適化が含まれており、インフラストラクチャの管理のオーバーヘッドなしで自動スケーリングを必要とする幅広いサーバーレスアプリケーションに適しています。
Azure FunctionsのPremiumプランは、一貫したパフォーマンスと高度な機能が必要なアプリケーション向けに設計されています。事前に温められたワーカーを使用して需要に基づいて自動的にスケールし、コールドスタートを排除し、非アクティブ期間の後でも関数が迅速に実行されることを保証します。このプランは、より強力なインスタンス、延長された実行時間を提供し、仮想ネットワーク接続をサポートします。さらに、カスタムLinuxイメージの使用を許可し、高パフォーマンスとリソースに対するより大きな制御が必要なミッションクリティカルなアプリケーションに適しています。
Dedicatedプラン、別名App Serviceプランは、App Service環境内の専用仮想マシンで関数を実行します。このプランは予測可能な請求を提供し、インスタンスの手動または自動スケーリングを可能にし、Durable Functionsが適さない長時間実行シナリオに最適です。同じプランで複数のWebおよび関数アプリを実行でき、より大きなコンピューティングサイズを提供し、App Service Environments (ASE)を通じて完全なコンピューティングの隔離と安全なネットワークアクセスを保証します。このオプションは、一貫したリソース割り当てと広範なカスタマイズが必要なアプリケーションに最適です。
Container Appsは、Azure Container Appsによってホストされる完全に管理された環境内でコンテナ化された関数アプリをデプロイすることを可能にします。このオプションは、他のマイクロサービス、API、およびワークフローと並行して実行されるイベント駆動型のサーバーレスアプリケーションを構築するのに最適です。関数コードと共にカスタムライブラリをパッケージ化し、レガシーアプリケーションをクラウドネイティブなマイクロサービスに移行し、GPUリソースを使用して高性能な処理能力を活用することをサポートします。Container AppsはKubernetesクラスターの管理を不要にすることでデプロイを簡素化し、コンテナ化された環境での柔軟性とスケーラビリティを求める開発者に最適です。
新しいFunction Appを作成する際、コンテナ化されていない場合(実行するコードを提供する場合)、コードおよびその他の関数関連データはストレージアカウントに保存されます。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
さらに、アプリの新しいインスタンスを実行する必要がある場合、アプリのコードはここから収集されて実行されます。
これは攻撃者の視点から非常に興味深いものであり、このバケットに対する書き込みアクセスがあれば、攻撃者はコードを妥協し、Function App内の管理されたアイデンティティの権限を昇格させることができます。
認証を必要とせずに関数にすべてのインターネットへのアクセスを与えることが可能です。またはIAMベースのアクセスを与えることもできます。
インターネットからFunction Appへのアクセスを与えたり制限したりすることも可能で、Function Appに内部ネットワーク(VPC)へのアクセスを与えることができます。
これは攻撃者の視点から非常に興味深いものであり、インターネットに公開された脆弱なLambda関数から内部ネットワークにピボットすることが可能かもしれません。
アプリ内で環境変数を設定することが可能です。さらに、デフォルトで環境変数**AzureWebJobsStorage
およびWEBSITE_CONTENTAZUREFILECONNECTIONSTRING
**(他にもいくつか)が作成されます。これらは特に興味深いもので、アプリケーションのデータを含むストレージアカウントを完全な権限で制御するためのアカウントキーを含んでいます。
サンドボックス内のソースコードは**/home/site/wwwroot
にあり、ファイルfunction_app.py
(Pythonが使用されている場合)にあります。コードを実行するユーザーはapp
**(sudo権限なし)です。
さらに、Function Appには「管理者」や「匿名」など、特定のレベルの認証を必要とするエンドポイントがある場合があります。 攻撃者は匿名許可されたエンドポイントにアクセスして制限を回避し、機密データや機能にアクセスしようとする可能性があります。
関数を呼び出すためにユーザーにアクセスを与えるRBAC権限はないことに注意してください。関数の呼び出しは、作成時に選択されたトリガーに依存します。HTTPトリガーが選択された場合、アクセスキーを使用する必要があるかもしれません。
関数内でHTTPトリガーを使用してエンドポイントを作成する際、関数をトリガーするために必要なアクセスキーの認証レベルを指定することが可能です。利用可能なオプションは3つです:
ANONYMOUS: 誰でもURLを通じて関数にアクセスできます。
FUNCTION: エンドポイントは関数、ホスト、またはマスターキーを使用するユーザーのみがアクセスできます。
ADMIN: エンドポイントはマスターキーを持つユーザーのみがアクセスできます。
キーの種類:
関数キー: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の特定の関数エンドポイントへのアクセスを独占的に付与するように設計されています。これにより、特定の関数を呼び出すために認可されたユーザーまたはサービスのみがアクセスできるように、セキュリティ制御を細かく行うことができます。
ホストキー: ホストキーもデフォルトまたはユーザー定義のいずれかで、Function App内のすべての関数エンドポイントへのアクセスを提供します。これは、複数の関数に単一のキーを使用してアクセスする必要がある場合に便利で、管理を簡素化し、配布または安全に保存する必要のあるキーの数を減らします。
マスターキー: マスターキー(_master
)は、Function AppのランタイムREST APIへのアクセスを含む管理者キーとして機能します。このキーは取り消すことができず、最大限の注意を払って扱うべきです。第三者とマスターキーを共有したり、ネイティブクライアントアプリケーションに含めたりしないことが重要です。これにより、不正な管理者アクセスを防ぐことができます。
関数の認証をADMINに設定する場合(ANONYMOUSまたはFUNCTIONではなく)、このキーを使用する必要があります。
システムキー: システムキーは特定の拡張機能によって管理され、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、システムキーを使用してそれぞれのAPIと安全に対話します。システムキーは、セキュリティを維持するためにAzureポータルまたはキーAPIを通じて再生成できます。
Example to access a function API endpoint using a key:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)