GCP - Artifact Registry Enum

HackTricksのサポート

基本情報

Google Cloud Artifact Registryは、ソフトウェアアーティファクトを管理、保存、保護することができる完全管理型サービスです。これは基本的に、Dockerイメージ、Maven、npmパッケージなどのビルド依存関係を保存するためのリポジトリです。これは、ソフトウェア開発プロセス中に生成されたアーティファクトを保存およびバージョン管理するためにCI/CDパイプラインで一般的に使用されます。

Artifact Registryの主な機能は次のとおりです:

  1. 統合リポジトリ: 複数のアーティファクトタイプをサポートし、Dockerイメージ、言語パッケージ(JavaのMaven、Node.jsのnpmなど)などを1つのリポジトリに保存できるため、一貫したアクセス制御とすべてのアーティファクトにわたる統一ビューを実現します。

  2. 完全管理: 管理されたサービスとして、基盤インフラストラクチャ、スケーリング、セキュリティについてはユーザーのメンテナンスオーバーヘッドを軽減します。

  3. 細かいアクセス制御: Google CloudのIdentity and Access Management(IAM)と統合されており、リポジトリ内のアーティファクトにアクセス、アップロード、ダウンロードできるユーザーを定義できます。

  4. ジオレプリケーション: 複数のリージョンにわたるアーティファクトのレプリケーションをサポートし、ダウンロード速度を向上させ、可用性を確保します。

  5. Google Cloudサービスとの統合: Cloud Build、Kubernetes Engine、Compute Engineなどの他のGCPサービスとシームレスに連携し、Google Cloudエコシステム内で作業しているチームにとって便利な選択肢となります。

  6. セキュリティ: 脆弱性スキャンとコンテナ分析などの機能を提供し、保存されたアーティファクトが安全で既知のセキュリティ問題から解放されていることを確認します。

フォーマットとモード

新しいリポジトリを作成する際には、リポジトリのフォーマット/タイプを選択し、通常は次の3つのモードのいずれかを選択できます:

  • 標準リポジトリ: GCP内に直接自分自身のアーティファクト(Dockerイメージ、Mavenパッケージなど)を保存するためのデフォルトモードです。セキュリティが確保され、スケーラブルであり、Google Cloudエコシステム内での統合がうまく行われます。

  • リモートリポジトリ(利用可能な場合): 外部の公開リポジトリからアーティファクトをキャッシュするプロキシとして機能します。上流で依存関係が変更される問題を防ぎ、頻繁にアクセスされるアーティファクトをキャッシュすることでレイテンシを低減します。

  • 仮想リポジトリ(利用可能な場合): 1つのエンドポイントを介して複数の(標準またはリモート)リポジトリにアクセスする統一インターフェースを提供し、さまざまなリポジトリに分散されたアーティファクトのクライアント側構成とアクセス管理を簡素化します。

  • 仮想リポジトリでは、リポジトリを選択し、優先度を付ける必要があります(最も優先度の高いリポジトリが使用されます)。

  • リモート優先度標準よりも高い場合、仮想リポジトリにリモートと標準のリポジトリを混在させることができます。これによりDependency Confusionが発生する可能性があります。

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