☁️

Google Cloud環境における仮想マシンの保全

2023/06/23に公開

はじめに

Google社が提供しているパブリッククラウドサービス「Google Cloud」では「Google Compute Engine」というコンピューティングサービスが提供されており、サービスの一機能としてクラウド環境上で手軽に仮想マシンを作成・実行できます。

https://cloud.google.com/compute?hl=ja

仮にクラウド環境上で動作させている仮想マシンがサイバー攻撃を受けた場合、当該仮想マシンに対してログ調査やフォレンジック調査(デジタル・フォレンジック)を実施し、事象の詳細を調べることがあります。フォレンジック調査を行なう場合、一般的にはクライアントマシンやサーバマシンのデータを保全し、保全済みデータに対して調査を行います。

フォレンジック調査を実施する想定で、どのような手順を踏んでGoogle Cloudの仮想マシンに対してデータの保全を行なえば良いのか把握したく情報収集と検証を行なったので自分用備忘録も兼ねてこの記事に整理しています。

仮想マシンの保全

データの保全方法の要点だけ記載すると、下記のような手順でGoogle Cloud上の仮想マシンイメージを保全し、ローカル環境にダウンロードできます。また、ローカル環境にダウンロードした仮想マシンに対して、適切にフォレンジック調査を実施することができそうでした。


  1. 仮想マシンを停止する
  2. 仮想マシンにアタッチされているディスクの複製( = カスタムイメージ)を作成する
  3. カスタムイメージを仮想マシンファイル(VMDK、VHDXなど)に変換する
  4. 仮想マシンファイルをCloud Storageにエクスポートする
  5. エクスポートした仮想マシンファイルをローカル環境にダウンロードする
  6. ダウンロードした仮想マシンファイルに対してフォレンジック調査を行う

※ 今回はGoogle CloudのWebコンソール上から全ての作業を実施していますが、API経由でも同じことができると思います

仮想マシンの確認と停止

保全対象となる仮想マシンが存在するGoogle Cloud環境にアクセスし、Compute Engineの管理画面から仮想マシンを確認します。今回は「forensics」というプロジェクト内に作成した「test」という名前の仮想マシンを保全対象としています。

当該仮想マシンには「test」という名前のディスクを1件だけアタッチしています。このディスクから「カスタムイメージ」と呼ばれる、スナップショットや仮想マシンにアタッチされたディスク等を元に作成するイメージデータを作成します。

https://cloud.google.com/compute/docs/images/create-custom?hl=ja#create_image

今回作成するカスタムイメージは上記の仮想マシンのブートディスクとして使用されているディスクの複製になります(ブートディスクにはUbuntu 18.04 LTSがインストールされて動作しています)。
仮にこの仮想マシンが不正アクセスやマルウェア感染などの被害を受けている場合、仮想マシンのブートディスク上には侵害の痕跡が記録されていると考えられます。「侵害発生後の状態のブートディスクを元にカスタムイメージを作成する」という対応が、侵害された仮想マシンのデータ保全作業に相当します。

作業の注意点として、仮想マシンにアタッチされているディスクからカスタムイメージを作成する場合、当該仮想マシンが停止状態となっている必要があります。そのため、作業を開始する前に、仮想マシンの動作を停止させておきます。

仮想マシンのカスタムイメージ作成

Compute Engineの「ストレージ」画面から仮想マシンのディスク情報を確認します。今回、保全対象となる仮想マシンにアタッチされているディスクは1つだけです。

ディスクの名前を選択し、「ディスクの管理」画面を開きます。画面右上に「イメージを作成」というボタンがあるので、これを選択してカスタムイメージを作成します。

カスタムイメージの名前は好きな名前を設定します。ソースには「ディスク」を選択し、先程確認したディスクを選んだらカスタムイメージを作成します。

カスタムイメージのエクスポート

次はストレージサービス(Google Cloud Storage)のバケットに対して作成済みカスタムイメージをエクスポートします。イメージの一覧から作成済みカスタムイメージを選択し、詳細画面から「エクスポート」を選択します。

https://cloud.google.com/compute/docs/images/export-image?hl=ja#export_an_image_to

この画面から、作成済みカスタムイメージをCloud Storageにエクスポートできます。Cloud Storageへのエクスポートを行う場合、最初にAPIの有効化が求められるので指示に従って有効化します。

APIを有効化できたらエクスポートの形式を選択します。形式はVMDK / VHDX / VPC / QCOW2が選択可能となっていて、今回はVMDK形式を選択しています。
次に、「Path」にエクスポート先のストレージバケットを選択します。Cloud Storage上にバケットを作成していない場合でも、この画面から作成できます。

エクスポート先のストレージバケットを選択すると、VMDKファイルが作成される先のファイルパスが自動的にPathに入力されます。これで準備は整ったので、カスタムイメージのエクスポートを実行します。

しばらく待つと、VMDK形式に変換済みのカスタムイメージがCloud Storage上に作成されます。

カスタムイメージのダウンロード(+フォレンジック調査)

最後に、Cloud Storageにエクスポートした保全済みカスタムイメージをローカル環境にダウンロードします。

Destinationに記載されているURLを選択すると、カスタムイメージの詳細ページ(オブジェクトページ)が開きます。このページの「ダウンロード」ボタンを選択することで、カスタムイメージをダウンロードできます。

VMDK形式のカスタムイメージをダウンロードできたら、任意のフォレンジックツールでファイルを開いてフォレンジック調査を実施します。下の画像はFTK Imagerで開いた例ですが、特に問題無く調査を行なえそうでした。

ここまでで紹介した手順で、調査したい仮想マシンに対して保全を実施し、保全済みデータをローカル環境にダウンロードして調査することができそうでした。

今回試した方法以外にも、仮想マシンのスナップショットを作成し、Google Cloud環境上に構築した調査用仮想マシンにアタッチ/マウントして調査を行う方法などもありますが、個人的にはローカル環境で作業したいのでこっちの方法を使うことが多くなるのかなと思っています。

補足 : 保全済みデータの共有

上記の手順では作成したカスタムイメージをGoogle Cloudのコンソールから直接ダウンロードしました。同じ組織のユーザにカスタムイメージを共有する場合は上と同じ手順で実施できますが、組織外のユーザに保全済みデータを共有したい場面もあるかと思います。そのような場合は署名付きURLという機能を活用すると楽にデータの共有が行えます。

https://cloud.google.com/storage/docs/access-control/signed-urls?hl=ja

先の手順では、Cloud Storageのバケット/オブジェクトを非公開の設定で作成しています。そのため、カスタムイメージが配置されているURLに対して組織外のユーザがアクセスしてもイメージをダウンロードすることはできません。

https://cloud.google.com/storage/docs/using-public-access-prevention?hl=ja

非公開の設定になっているオブジェクトに対して例外的に外部アクセスを許可したい場合、署名付きURLを発行します。署名付きURL経由でオブジェクトにアクセスすることで、指定した有効期間内であれば、URLを知っている人は誰でもオブジェクトにアクセスできます。

署名付きURLの作成方法はいくつかありますが、今回はWebコンソール上からCloud Shell経由でgsutilを使用して作成します。また、サービスアカウントの秘密鍵が署名付きURL作成に必要になるため、事前に作成しておきます。

https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers?hl=ja#download-object

はじめに、作成済みの秘密鍵をCloud Shellにアップロードします。(下記の画像の場合、forensics-389212-ef18ef23e796.jsonというファイルが鍵ファイルになっています)

鍵ファイルが正常にアップロードできたら、gsutilコマンドを使用して署名付きURLを生成します。画像のようにコマンドを実行することで、バケットからオブジェクトを取得できる署名付きURLが作成されます。署名付きURLはオプションで指定した時間だけ有効となる(下記の場合は10分間)ため、期間内にアクセスしてイメージをダウンロードする必要があります。

下記の通り、署名付きURLの有効期間内であればGoogle Cloudアカウントを保有しないユーザでもカスタムイメージのダウンロードが行なえます。

Discussion