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의 중요한 측면은 사용된 컴퓨트 시간에만 요금이 부과되는 가격 모델로, 초기 투자나 장기 의무가 필요하지 않습니다.
람다를 호출하려면 원하는 만큼 자주 호출할 수 있으며(Cloudwatch 사용), URL 엔드포인트를 노출하고 호출하거나, API Gateway를 통해 호출하거나, S3 버킷의 데이터 변경이나 DynamoDB 테이블 업데이트와 같은 이벤트에 따라 호출할 수 있습니다.
람다의 코드는 **/var/task
**에 저장됩니다.
람다는 여러 버전을 가질 수 있습니다. 그리고 1개 이상의 버전을 별칭을 통해 노출할 수 있습니다. 별칭 내에서 노출된 각 버전의 가중치는 어떤 별칭이 호출을 받을지 결정합니다(예: 90%-10%일 수 있음). 하나의 별칭 코드가 취약한 경우, 취약한 버전이 익스플로잇을 받을 때까지 요청을 보낼 수 있습니다.
람다 리소스 정책은 다른 서비스/계정이 람다를 호출할 수 있도록 접근을 허용합니다. 예를 들어, 이는 URL을 통해 노출된 람다에 누구나 접근할 수 있도록 허용하는 정책입니다:
또는 API Gateway가 이를 호출할 수 있도록 허용하는 정책입니다:
수백 개의 동시 람다 요청이 있을 때, 각 요청이 데이터베이스에 연결하고 연결을 종료해야 한다면, 이는 작동하지 않을 것입니다(람다는 상태가 없으며 연결을 유지할 수 없습니다). 따라서, 람다 함수가 데이터베이스 인스턴스 대신 RDS Proxy와 상호작용하도록 합니다. 이는 동시 람다 함수가 생성한 많은 동시 연결을 위한 연결 풀링을 처리합니다. 이를 통해 람다 애플리케이션은 기존 연결을 재사용할 수 있으며, 각 함수 호출마다 새로운 연결을 생성할 필요가 없습니다.
데이터를 보존하고 공유하기 위해 람다는 EFS에 접근하고 이를 마운트할 수 있으며, 이를 통해 람다는 읽고 쓸 수 있습니다.
람다 _레이어_는 추가 코드를 포함할 수 있는 .zip 파일 아카이브입니다. 레이어는 라이브러리, 사용자 정의 런타임, 데이터 또는 구성 파일을 포함할 수 있습니다.
함당 최대 다섯 개의 레이어를 포함할 수 있습니다. 함수에 레이어를 포함하면, 내용이 실행 환경의 /opt
디렉토리에 추출됩니다.
기본적으로, 생성한 레이어는 AWS 계정에 비공개입니다. 다른 계정과 레이어를 공유하거나 레이어를 공개할 수 있습니다. 다른 계정에서 게시한 레이어를 사용하는 함수는 레이어가 삭제된 후에도 해당 레이어 버전을 계속 사용할 수 있으며, 레이어에 대한 접근 권한이 취소된 후에도 사용할 수 있습니다. 그러나 삭제된 레이어 버전을 사용하여 새 함수를 생성하거나 함수를 업데이트할 수는 없습니다.
컨테이너 이미지로 배포된 함수는 레이어를 사용하지 않습니다. 대신, 이미지를 빌드할 때 선호하는 런타임, 라이브러리 및 기타 종속성을 컨테이너 이미지에 패키징합니다.
람다 확장은 다양한 모니터링, 관찰 가능성, 보안 및 거버넌스 도구와 통합하여 기능을 향상시킵니다. 이러한 확장은 .zip 아카이브를 사용하여 람다 레이어로 추가되거나 컨테이너 이미지 배포에 포함되어, 두 가지 모드에서 작동합니다: 내부 및 외부.
내부 확장은 런타임 프로세스와 병합되어 언어별 환경 변수 및 래퍼 스크립트를 사용하여 시작을 조작합니다. 이 사용자 정의는 Java Correto 8 및 11, Node.js 10 및 12, .NET Core 3.1을 포함한 다양한 런타임에 적용됩니다.
외부 확장은 별도의 프로세스로 실행되며, 람다 함수의 생명 주기와 운영 정렬을 유지합니다. 이는 Node.js 10 및 12, Python 3.7 및 3.8, Ruby 2.5 및 2.7, Java Corretto 8 및 11, .NET Core 3.1 및 사용자 정의 런타임과 호환됩니다.
이제 실행할 수 있는 가능한 Lambda 함수를 찾아볼 시간입니다:
"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>
람다를 트리거할 수 있는 다른 소스가 많이 있습니다.
다음 페이지에서 람다 권한을 악용하여 권한을 상승시키는 방법을 확인할 수 있습니다:
AWS - Lambda PrivescAWS 해킹을 배우고 연습하세요:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹을 배우고 연습하세요: HackTricks Training GCP Red Team Expert (GRTE)