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 plan은 유연한 컴퓨팅 옵션과 함께 동적 이벤트 기반 확장을 제공합니다. 수요에 따라 함수 인스턴스를 자동으로 추가하거나 제거하여 효율적인 리소스 사용과 비용 효율성을 보장합니다. 이 계획은 보안을 강화하기 위해 가상 네트워킹을 지원하며, 인스턴스를 미리 프로비저닝하여 콜드 스타트를 줄일 수 있습니다. 이는 가변 작업 부하를 경험하고 컨테이너 지원 없이 신속한 확장이 필요한 애플리케이션에 적합합니다.
Azure Functions의 전통적인 Consumption plan은 기본 서버리스 호스팅 옵션으로, 함수가 실행될 때만 컴퓨팅 리소스에 대해 비용을 지불합니다. 수신 이벤트 수에 따라 자동으로 확장되어 간헐적이거나 예측할 수 없는 작업 부하를 가진 애플리케이션에 매우 비용 효율적입니다. 컨테이너 배포를 지원하지 않지만, 콜드 스타트 시간을 줄이기 위한 최적화를 포함하고 있으며, 인프라 관리의 오버헤드 없이 자동 확장이 필요한 다양한 서버리스 애플리케이션에 적합합니다.
Azure Functions의 Premium plan은 일관된 성능과 고급 기능이 필요한 애플리케이션을 위해 설계되었습니다. 미리 준비된 작업자를 사용하여 수요에 따라 자동으로 확장되며, 콜드 스타트를 없애고 비활성 기간 후에도 함수가 신속하게 실행되도록 보장합니다. 이 계획은 더 강력한 인스턴스, 연장된 실행 시간 및 가상 네트워크 연결을 지원합니다. 또한, 사용자 정의 Linux 이미지를 사용할 수 있어 높은 성능과 리소스에 대한 더 큰 제어가 필요한 미션 크리티컬 애플리케이션에 적합합니다.
Dedicated plan, 즉 App Service plan은 App Service 환경 내에서 전용 가상 머신에서 함수를 실행합니다. 이 계획은 예측 가능한 청구를 제공하며 인스턴스의 수동 또는 자동 확장을 허용하여 Durable Functions에 적합하지 않은 장기 실행 시나리오에 이상적입니다. 동일한 계획에서 여러 웹 및 함수 앱을 실행할 수 있으며, 더 큰 컴퓨팅 크기를 제공하고 App Service Environments (ASE)를 통해 완전한 컴퓨팅 격리 및 안전한 네트워크 액세스를 보장합니다. 이 옵션은 일관된 리소스 할당과 광범위한 사용자 지정을 필요로 하는 애플리케이션에 가장 적합합니다.
Container Apps는 Azure Container Apps에서 호스팅되는 완전 관리형 환경 내에서 컨테이너화된 함수 앱을 배포할 수 있게 해줍니다. 이 옵션은 다른 마이크로서비스, API 및 워크플로와 함께 실행되는 이벤트 기반 서버리스 애플리케이션을 구축하는 데 적합합니다. 함수 코드와 함께 사용자 정의 라이브러리를 패키징하고, 레거시 애플리케이션을 클라우드 네이티브 마이크로서비스로 마이그레이션하며, GPU 리소스를 활용하여 고급 처리 능력을 제공합니다. Container Apps는 Kubernetes 클러스터를 관리할 필요를 없애 배포를 간소화하여, 컨테이너화된 환경에서 유연성과 확장을 추구하는 개발자에게 이상적입니다.
컨테이너화되지 않은 새로운 Function App을 생성할 때, 코드 및 기타 함수 관련 데이터는 Storage 계정에 저장됩니다. 기본적으로 웹 콘솔은 코드를 저장하기 위해 함수당 새 Storage 계정을 생성합니다.
또한, 앱의 새로운 인스턴스가 실행될 필요가 있을 때마다, 앱의 코드는 여기에서 수집되어 실행됩니다.
이는 공격자의 관점에서 매우 흥미로운데, 이 버킷에 대한 쓰기 권한이 있으면 공격자가 코드를 손상시키고 Function App 내의 관리되는 ID에 대한 권한을 상승시킬 수 있습니다.
인증 없이 모든 인터넷에 함수에 대한 액세스를 제공하거나 IAM 기반으로 액세스를 제공할 수 있습니다.
또한, 인터넷에서 Function App에 대한 액세스를 제공하거나 제한하고, Function App에 대한 내부 네트워크(VPC)에 대한 액세스를 제공할 수 있습니다.
이는 공격자의 관점에서 매우 흥미로운데, 인터넷에 노출된 취약한 Lambda 함수에서 내부 네트워크로 피벗할 수 있는 가능성이 있습니다.
앱 내에서 환경 변수를 구성할 수 있습니다. 또한, 기본적으로 env 변수 AzureWebJobsStorage
및 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(기타 포함)이 생성됩니다. 이들은 애플리케이션 데이터가 포함된 Storage 계정을 FULL 권한으로 제어할 수 있는 계정 키를 포함하고 있기 때문에 특히 흥미롭습니다.
샌드박스 내에서 소스 코드는 **/home/site/wwwroot
**의 파일 **function_app.py
**에 위치하며 (파이썬을 사용하는 경우) 코드를 실행하는 사용자는 **app
**입니다 (sudo 권한 없음).
또한 Function App은 "admin" 또는 "anonymous"와 같은 특정 수준의 인증이 필요한 특정 엔드포인트를 가질 수 있습니다. 공격자는 익명 허용 엔드포인트에 접근하여 제한을 우회하고 민감한 데이터나 기능에 접근하려고 시도할 수 있습니다.
함수를 호출할 수 있는 사용자에게 액세스를 제공하는 RBAC 권한이 없다는 점에 유의하십시오. 함수 호출은 생성 시 선택된 트리거에 따라 달라집니다. HTTP 트리거가 선택된 경우, 액세스 키를 사용해야 할 수 있습니다.
함수 내에서 HTTP 트리거를 사용하여 엔드포인트를 생성할 때, 함수를 트리거하는 데 필요한 액세스 키 권한 수준을 지정할 수 있습니다. 세 가지 옵션이 있습니다:
ANONYMOUS: 모든 사람이 URL을 통해 함수에 접근할 수 있습니다.
FUNCTION: 엔드포인트는 함수, 호스트 또는 마스터 키를 사용하는 사용자만 접근할 수 있습니다.
ADMIN: 엔드포인트는 마스터 키를 가진 사용자만 접근할 수 있습니다.
키 유형:
Function Keys: 함수 키는 기본 또는 사용자 정의일 수 있으며, Function App 내의 특정 함수 엔드포인트에만 액세스를 부여하도록 설계되었습니다. 이를 통해 특정 함수만 호출할 수 있도록 권한을 세분화하여 보안을 강화할 수 있습니다.
Host Keys: 호스트 키는 기본 또는 사용자 정의일 수 있으며, Function App 내의 모든 함수 엔드포인트에 대한 액세스를 제공합니다. 여러 함수에 대해 단일 키를 사용하여 액세스해야 할 때 유용하며, 관리가 간소화되고 배포하거나 안전하게 저장해야 할 키 수가 줄어듭니다.
Master Key: 마스터 키 (_master
)는 Function App의 런타임 REST API에 대한 액세스를 포함하여 향상된 권한을 제공하는 관리 키입니다. 이 키는 취소할 수 없으며 최대한 주의하여 처리해야 합니다. 무단 관리 액세스를 방지하기 위해 마스터 키를 제3자와 공유하거나 네이티브 클라이언트 애플리케이션에 포함하지 않는 것이 중요합니다.
함수의 인증을 ADMIN으로 설정할 때 (ANONYMOUS 또는 FUNCTION이 아님) 이 키를 사용해야 합니다.
System Keys: 시스템 키는 특정 확장에 의해 관리되며 내부 구성 요소에서 사용하는 웹훅 엔드포인트에 액세스하는 데 필요합니다. 예를 들어, Event Grid 트리거 및 Durable Functions는 시스템 키를 사용하여 해당 API와 안전하게 상호 작용합니다. 시스템 키는 Azure Portal 또는 키 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)