AWS - Abusing Lambda Extensions
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
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
**는 자식 런타임 프로세스 및 추가 확장에 대한 IP 주소와 포트 번호를 나타냅니다.
AWS_LAMBDA_RUNTIME_API
환경 변수를 우리가 접근할 수 있는 **port
**로 변경함으로써, Lambda 런타임 내의 모든 작업을 가로챌 수 있습니다 (중간자 공격). 이는 확장이 Rapid Init과 동일한 권한으로 실행되며, 시스템의 커널이 프로세스 메모리 수정을 허용하여 포트 번호를 변경할 수 있게 해주기 때문에 가능합니다.
확장이 런타임 코드보다 먼저 실행되기 때문에, 환경 변수를 수정하면 런타임 프로세스(예: Python, Java, Node, Ruby)가 시작될 때 영향을 미칩니다. 또한, 우리의 확장 이후에 로드된 확장도 이 변수를 의존하여 우리의 확장을 통해 라우팅됩니다. 이 설정은 악성 소프트웨어가 보안 조치나 로깅 확장을 완전히 우회할 수 있게 할 수 있습니다.
도구 lambda-spy는 메모리 쓰기를 수행하고 Lambda 요청, 다른 확장 요청에서 민감한 정보를 도용하고 심지어 수정하기 위해 만들어졌습니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)