はじめに
Microsoft Azure 上で仮想マシン(Azure VM)を利用する際、セキュリティ リスクへの対応は極めて重要です。初めは気にも留めなかったような設定ミスやシークレット管理のミスが、のちに大きな被害につながることも少なくありません。
本記事では、Microsoft Defender for Cloud の CSPM(Cloud Security Posture Management)機能に含まれる エージェントレス スキャンによって、「ホストでの暗号化(Encryption at host)」を有効にした Azure VM でもシークレット情報が検出されるのかを検証します。
✅ 想定読者
- Azure VM を運用していて、セキュリティ評価を行いたい方
- Defender for Cloud の活用をこれから始めたい方
- エージェントレス スキャンに興味がある方
本記事は個人検証の結果をもとに書かれています。同様の構成で再現できると考えられますが、環境によって異なる可能性もあるので、実運用環境への適用にあたっては公式ドキュメントやサポート情報も併せてご確認ください。
前提知識
🛡️ CSPM(Cloud Security Posture Management)とは
CSPM とは、クラウド環境のシステムやインフラストラクチャにおける設定不備や構成ミスを監視するプロセスです。 検出されたリスクや構成の誤りは、セキュリティ上のリスクとして可視化・修正することができます。 Azure においては 「Microsoft Defender for Cloud」 の一部として提供されており、仮想マシン・ストレージ・ネットワーク設定など、幅広い観点からのセキュリティ評価が可能です。
インシデント発生前に、攻撃者に悪用される可能性のある設定ミスや脆弱性を未然に修正することで、攻撃対象領域を減らすことができます。
例えば、Defender for Cloud を提供する Microsoft からは以下の情報が公開されています。
🔍 エージェントレス スキャンとは
Defender for Cloud に含まれる「エージェント レス スキャン」機能は、その名のとおり エージェントの導入を必要としない仮想マシンのセキュリティ スキャン機能です。
スキャンの流れ
- 仮想マシンのディスクのスナップショットを取得
- Microsoft の分析環境でファイルの中身を調査できるようにする
- ファイル構成・設定・シークレットの有無などを分析
基本的にエージェント レス スキャンの場合、仮想マシンに対してエージェントを直接インストールする必要がないので、高負荷によってサーバーなど本来の目的に影響が出てしまうという心配がなくなります。
🔒 ディスクの暗号化とは
基本的に、ディスクの暗号化とは、仮想マシンのディスクに保存されるデータを、第三者がアクセスしても中身を読み取れないように、暗号技術で保護する仕組みのことです。Azure VM では、いくつかのディスク暗号化が提供されていますが、今回は次の 2 種類のディスク暗号化について注目していきます。
暗号化方式 | 対象範囲 | 主な役割 | 備考 |
---|---|---|---|
Storage Service Encryption (SSE) | Azure ストレージに保存されるデータ | 保存時データの自動暗号化 | 既定で有効 |
ホストでの暗号化 (Encryption at host) | VM ホストがストレージにデータを書き込む直前 | 保存時データだけでなく、VM ホストからストレージ サービスへのデータ転送中も暗号化 | VM 作成時に明示的に有効化が必要 |
検証の目的と疑問
「ホストでの暗号化(Encryption at host)」を有効にした仮想マシンでも、Defender for Cloud のエージェントレス スキャンがファイル内部の情報を検出できるのか、という疑問を検証します。
なお、Storage Service Encryption (SSE) については Microsoft 公式ドキュメントにて、エージェントレス スキャンのサポート対象であると明記されています。
※ 日本語翻訳では少しわかりにくい部分があるかもしれません。。
検証していく項目
検証では、以下の 3 ステップを順に行いました:
① ホストでの暗号化(Encryption at host) を有効にして Azure VM を作成
② シークレット(例:パスワードや鍵情報) を含むファイルを Azure VM 内に保存
③ Defender for Cloud によるスキャン結果で該当の「推奨事項」が表示されるかを確認
Defender for Cloud 上に推奨事項が表示され、配置したシークレット情報が検出されていれば、エージェントレス スキャンが意図した通りに機能していることが確認できます。
検証手順
① Azure VM の作成( ホストでの暗号化
を有効化)
Azure ポータルから Azure VM を作成する際、ディスク設定タブで [ホストでの暗号化] を有効にします。
🛠️ トラブルシューティング
[ホストでの暗号化] を選択できない場合は、現在使用しているサブスクリプションでホストでの暗号化が登録されていない状態です。
私の場合は、公開情報に記載のあった以下のスクリプトを Azure Power Shell で実行することでホストでの暗号化を有効化できる状態にできました。
# ① 使用するサブスクリプションを設定
Set-AzContext -SubscriptionId "<your-subscription-id>"
# ② ホストでの暗号化機能を登録
Register-AzProviderFeature -FeatureName "EncryptionAtHost" -ProviderNamespace "Microsoft.Compute"
# ③ 登録状況を確認(登録が完了すると "Registered" と表示されます)
Get-AzProviderFeature -FeatureName "EncryptionAtHost" -ProviderNamespace "Microsoft.Compute"
なお、以下の Microsoft 公式ドキュメントがスクリプトの参照元です。
② 仮想マシンにシークレット情報を配置
① で作成した Azure VM にログイン後、以下のスクリプトを使用して 平文のシークレット情報を含むファイルを作成します。
このスクリプトはログインした Azure VM 上の Power Shell で実行します。
こちらのスクリプトは、検証用に作成したものです。スクリプトを利用することにより発生したいかなる問題についても責任を負いかねます。あらかじめご了承ください。
# 例1: RSA鍵風
@"
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAKpFz7YXz0...FAKEKEY...H3bYAgMBAAEC
-----END RSA PRIVATE KEY-----
"@ | Out-File -FilePath "$env:USERPROFILE\Desktop\secret_rsa.key" -Encoding ascii
# 例2: 環境変数形式
"password=SuperSecret123`ndb_password=hunter2" | Out-File "$env:USERPROFILE\Desktop\secret.env" -Encoding ascii
# 例3: AWS形式
@"
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
"@ | Out-File "$env:USERPROFILE\Desktop\aws_creds.txt" -Encoding ascii
スクリプトを実行すると、以下のようにデスクトップ上に 3 種類のファイルが自動で生成されます。
これで、Azure VM のディスク上にシークレット情報が置かれたことになります。
(厳密には、シークレットと類似した形式の検証用ファイルが置かれたことになります。)
③ Defender for Cloud での検出確認
私の場合、② でシークレット情報を配置してから 1 時間程度でエージェントレス スキャンの結果が反映されました。
Azure ポータルの [Defender for Cloud] > [推奨事項] に、以下の項目が検出されていました。
マシンではシークレットの検出結果が解決されている必要がある
この推奨事項について検出結果を確認してみると、② でスクリプトによって作成した AWS access key
に関する情報が検出されていたようです。
マシンのシークレット情報に関する推奨事項については、以下の公式ドキュメントに詳しい記載もあります。
さらに詳しく知りたい方はご参照ください。
検証結果
検証の結果、ホストでの暗号化 (Encryption at host) を有効にした Azure VM においても、Defender for Cloud のエージェントレス スキャンによるシークレット検出は正常に機能しました。
そのため、エージェントレス スキャンの利用を考える際に、ホストでの暗号化を選択している場合でも影響を受けずに機能を利用可能であると検証からわかりました。
まとめ
項目 | 内容 |
---|---|
対象機能 | Defender for Cloud のエージェントレス スキャン |
設定状況 | ホストでの暗号化 (Encryption at host) が有効 |
結果 | シークレット情報は問題なく検出された |
最後まで読んでいただきありがとうございました。今回の内容が、皆さんのクラウド セキュリティ評価の第一歩になれば幸いです。
記事について誤った表現など修正すべき個所がありましたら、コメントいただけますと幸いです。