ShieldedVMとは何か


GCPにはShielded VMという機能があります。あまり使っているという話は聞きませんが、簡単に使えてセキュリティ強化ができる機能です。

使い方

使い方は簡単で、対応したOSイメージを選択し、Shielded VMを有効化して起動するだけです。オプション費用はかかりません。
2019年12月2日現在対応しているイメージは以下の通り。

  • CentOS 7
  • RHEL 7
  • Container Optimized OS 6.9, 7.3, 7.7, dev, beta, stable
  • Ubuntu 18.04
  • Windows Server 2012r2, 2016, 1803, 1809, 2019

Images

GCP Consoleから起動する場合は、SecurityタブからShielded VM機能を有効化します。

Shielded VMを有効化すると、通常のBIOSではなくUEFI経由で起動するようになるので、dmesgの実行結果にもUEFI経由で起動したというメッセージが出力されます。

[    0.000000] efi: EFI v2.70 by EDK II
[    0.000000] efi:  ACPI=0x259fa000  ACPI 2.0=0x259fa014  SMBIOS=0x259cd000  MEMATTR=0x24d0c018  TPMEventLog=0x2406d018
[    0.000000] secureboot: Secure boot enabled

Shielded VMの目的

Shielded VMの目的は大きく分けると

  • 各インスタンスのブートローダーやOSの改ざん検知、システムの整合性確認
  • APIリクエストなどが自分たちのインスタンスで行われたことの検証

の二つです。

前者はSecure Boot, Measured Bootによってコンポーネントの改ざんを検知することで、ルートキットなどによるブートローダーやOSなどへの攻撃を防止できます。こちらは対応しているOSイメージで設定を有効化するだけで利用できます。

後者はTPMに格納されているEndorsement Keyと呼ばれる鍵のペアを利用します。このEndorsement KeyはTPMごとに固有で、秘密鍵は取り出せませんが、公開鍵はGetShieldedInstanceIdentity APIで取得可能です。

リクエスターは秘密鍵でリクエストを署名し、APIサーバではGetShieldedInstanceIdentityで取得した公開鍵で検証することで、リクエスターが正当なサーバなのか検証できます。

まとめ

Shielded VMは設定の手間も少なく、サーバのマルウェア対策の一つとして有効で、マイクロサービス間の攻撃対策としても利用できるので、ぜひ有効にしてみましょう。