AWS - Steal Lambda Requests
Lambda Flow
Slicer는 컨테이너 외부에서 init 프로세스에 invocations를 보내는 프로세스입니다.
init 프로세스는 포트 9001에서 몇 가지 흥미로운 엔드포인트를 노출합니다:
/2018-06-01/runtime/invocation/next
– 다음 호출 이벤트 가져오기/2018-06-01/runtime/invocation/{invoke-id}/response
– 호출에 대한 핸들러 응답 반환/2018-06-01/runtime/invocation/{invoke-id}/error
– 실행 오류 반환
bootstrap.py는 init 프로세스에서 호출을 가져와 사용자의 코드를 호출하여 처리하는 루프를 가집니다 (
/next
).마지막으로, bootstrap.py는 응답을 init에 보냅니다.
bootstrap은 사용자 코드를 모듈로 로드하므로, 사용자의 코드에 의해 수행되는 모든 코드 실행은 실제로 이 프로세스에서 발생합니다.
Stealing Lambda Requests
이 공격의 목표는 사용자의 코드가 취약한 요청을 처리하는 bootstrap.py
프로세스 내에서 악성 bootstrap.py
프로세스를 실행하도록 만드는 것입니다. 이렇게 하면 악성 bootstrap 프로세스가 요청을 처리하기 위해 init 프로세스와 대화를 시작하고, 정상 bootstrap은 악성 프로세스를 실행하면서 가로막혀 init 프로세스에 요청을 요청하지 않게 됩니다.
이 작업은 사용자의 코드가 정상 bootstrap.py
프로세스에 의해 실행되므로 간단하게 달성할 수 있습니다. 따라서 공격자는 다음을 수행할 수 있습니다:
현재 호출의 가짜 결과를 init 프로세스에 보내기, 따라서 init은 bootstrap 프로세스가 더 많은 호출을 기다리고 있다고 생각합니다.
요청은 **
/${invoke-id}/response
**로 보내야 합니다.invoke-id는 inspect 파이썬 모듈을 사용하여 정상
bootstrap.py
프로세스의 스택에서 얻거나, **/2018-06-01/runtime/invocation/next
**에 다시 요청하여 얻을 수 있습니다 (여기에서 제안된 대로 proposed here 또는 여기에서 제안된 대로 proposed here).다음 호출을 처리할 악성
bootstrap.py
실행은밀성을 위해 lambda 호출 매개변수를 공격자가 제어하는 C2로 보내고, 그런 다음 요청을 평소처럼 처리할 수 있습니다.
이 공격을 위해서는 시스템에서 또는 github에서 **
bootstrap.py
**의 원본 코드를 가져와 악성 코드를 추가하고 현재 lambda 호출에서 실행하는 것으로 충분합니다.
Attack Steps
RCE 취약점을 찾습니다.
악성 bootstrap을 생성합니다 (예: https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
악성 bootstrap을 실행합니다.
다음 명령을 실행하여 쉽게 이러한 작업을 수행할 수 있습니다:
For more info check https://github.com/carlospolop/lambda_bootstrap_switcher
References
Last updated