AWS - Abusing Lambda Extensions

HackTricks 지원하기

Lambda 확장

Lambda 확장은 다양한 모니터링, 가시성, 보안 및 거버넌스 도구와 통합하여 기능을 향상시킵니다. 이러한 확장은 .zip 아카이브를 사용한 Lambda 레이어 또는 컨테이너 이미지 배포에 포함되어 있으며, 두 가지 모드에서 작동합니다: 내부외부.

  • 내부 확장은 런타임 프로세스와 통합되어 언어별 환경 변수래퍼 스크립트를 사용하여 시작을 조작합니다. 이 사용자 정의는 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 요청, 다른 확장 요청에서 민감한 정보를 훔치고 심지어 수정하는 데 사용됩니다.

참고 문헌

HackTricks 지원하기

Last updated