GCP - Artifact Registry Enum

Support HackTricks

기본 정보

Google Cloud Artifact Registry는 소프트웨어 아티팩트를 관리, 저장 및 보안하는 데 사용되는 완전히 관리되는 서비스입니다. 이는 주로 Docker 이미지, Maven, npm 패키지 및 기타 유형의 아티팩트와 같은 빌드 종속성을 저장하는 저장소입니다. 이는 소프트웨어 개발 프로세스 중에 생성된 아티팩트를 저장하고 버전 관리하는 데 CI/CD 파이프라인에서 일반적으로 사용됩니다.

Artifact Registry의 주요 기능은 다음과 같습니다:

  1. 통합 저장소: 여러 유형의 아티팩트를 지원하여 Docker 이미지, 언어 패키지(Java의 Maven, Node.js의 npm 등) 및 기타 유형의 아티팩트에 대한 단일 저장소를 갖도록 하여 모든 아티팩트에 대한 일관된 액세스 제어 및 통합된 보기를 제공합니다.

  2. 완전 관리형: 관리형 서비스로서 사용자의 부담을 줄이기 위해 기본 인프라, 확장 및 보안을 처리합니다.

  3. 세밀한 액세스 제어: Google Cloud의 Identity and Access Management (IAM)과 통합되어 리포지토리에서 아티팩트에 액세스하거나 업로드하거나 다운로드할 수 있는 사용자를 정의할 수 있습니다.

  4. 지리적 복제: 여러 지역에 걸쳐 아티팩트를 복제하여 다운로드 속도를 향상시키고 가용성을 보장합니다.

  5. Google Cloud 서비스와의 통합: Cloud Build, Kubernetes Engine 및 Compute Engine과 같은 다른 GCP 서비스와 원활하게 작동하여 Google Cloud 생태계 내에서 이미 작업 중인 팀에게 편리한 선택지가 됩니다.

  6. 보안: 취약성 스캐닝 및 컨테이너 분석과 같은 기능을 제공하여 저장된 아티팩트가 안전하고 알려진 보안 문제가 없는지 확인합니다.

형식 및 모드

새 리포지토리를 만들 때 리포지토리의 형식/유형을 Docker, Maven, npm, Python 등 여러 가지 중에서 선택할 수 있으며 일반적으로 다음 세 가지 중 하나일 수 있습니다:

  • 표준 리포지토리: GCP에 직접 자체 아티팩트(예: Docker 이미지, Maven 패키지)를 저장하는 기본 모드입니다. Google Cloud 생태계 내에서 안전하고 확장 가능하며 통합이 잘 됩니다.

  • 원격 리포지토리 (사용 가능한 경우): 외부, 공개 리포지토리에서 아티팩트를 캐싱하는 프록시 역할을 합니다. 상위 의존성이 변경되는 문제를 방지하고 자주 액세스되는 아티팩트를 캐싱하여 대기 시간을 줄입니다.

  • 가상 리포지토리 (사용 가능한 경우): 단일 엔드포인트를 통해 여러 (표준 또는 원격) 리포지토리에 통합된 인터페이스를 제공하여 여러 리포지토리에 분산된 아티팩트에 대한 클라이언트 측 구성 및 액세스 관리를 단순화합니다.

  • 가상 리포지토리의 경우 리포지토리를 선택하고 우선순위를 지정해야 합니다(우선순위가 가장 높은 리포지토리가 사용됨).

  • 원격우선순위표준보다 높으면, 원격(예: PyPi)의 패키지가 사용됩니다. 이는 의존성 혼란으로 이어질 수 있습니다.

Docker의 원격 버전에서는 Docker Hub에 액세스하기 위해 사용자 이름과 토큰을 제공할 수 있습니다. 토큰은 Secret Manager에 저장됩니다.

암호화

기본적으로 Google 관리형 키가 사용되지만 고객 관리형 키(CMEK)를 지정할 수 있습니다.

정리 정책

  • 아티팩트 삭제: 정리 정책 기준에 따라 아티팩트가 삭제됩니다.

  • 드라이런: (기본값) 아티팩트가 삭제되지 않습니다. 정리 정책이 평가되고 테스트 삭제 이벤트가 Cloud Audit Logging으로 전송됩니다.

취약성 스캐닝

컨테이너 이미지 내의 취약성을 확인하는 취약성 스캐너를 활성화할 수 있습니다.

열거

# Get repositories
gcloud artifacts repositories list
gcloud artifacts repositories describe --location <location> <repo-name>
gcloud artifacts versions list --repository=<repo-name> -location <location> --package <package-name>

# Get settings of a repository (example using python but could be other)
gcloud artifacts print-settings python --repository <repo-name> --location <location>

# Get docker images
gcloud artifacts docker images list us-central1-docker.pkg.dev/<proj-name>/<repo-name>

# Get packages (like python and others...)
gcloud artifacts packages list --repository <repo-name> --location <location>

# Get SBOMB artifacts
gcloud artifacts sbom list

# Get vulnerabilities (docker images)
gcloud artifacts vulnerabilities list us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f
gcloud artifacts docker images list-vulnerabilities projects/<proj-name>/locations/<location>/scans/<scan-uuid>

권한 상승

GCP - Artifact Registry Privesc

인증되지 않은 액세스

GCP - Artifact Registry Unauthenticated Enum

사후 공격

GCP - Artifact Registry Post Exploitation

지속성

GCP - Artifact Registry Persistence
HackTricks 지원

Last updated