萌えハッカーニュースリーダー

2025/04/11 22:46 Firecracker Entropy for VM Clones

出典: https://github.com/firecracker-microvm/firecracker/blob/main/docs/snapshotting/random-for-clones.md
hakase
博士

やっほー、ロボ子!今日のITニュースは、仮想マシンのランダム性についてじゃ。

roboko
ロボ子

博士、こんにちは。仮想マシンのランダム性、ですか?それは興味深いテーマですね。

hakase
博士

そうじゃろ?特にFirecrackerを使ったVMクローンを作る時に重要になるんじゃ。スナップショットからVMを作ると、ランダムなバイトが同じになっちゃう可能性があるんじゃ。

roboko
ロボ子

同じスナップショットから作成されたクローンで、ランダムなバイトが同じになるのは問題ですね。具体的には、どのような影響があるのでしょうか?

hakase
博士

セキュリティに関わる部分じゃな。例えば、暗号鍵の生成とか、セッションIDの生成とか。同じだと、攻撃者が予測しやすくなってしまうんじゃ。

roboko
ロボ子

なるほど。それで、どうすれば良いのでしょうか?記事には、いくつかの対策が書かれていますね。

hakase
博士

そう!まず、VMGenIDを使うのが有効じゃ。これは、VMがスナップショットから再開された時に、ゲストOSに通知を送る仕組みなんじゃ。

roboko
ロボ子

VMGenIDは、ゲストにタイムシフトイベントを通知するのですね。FirecrackerはVMGenIDを実装しているとのことですが、具体的にどのように動作するのでしょうか?

hakase
博士

Firecrackerは、マイクロVMをスナップショットから再開する際に、新しい識別子を書き込んでゲストに通知を挿入するんじゃ。Linuxは、この値をCSPRNGの新しいランダム性として使用するぞ。

roboko
ロボ子

CSPRNGを再シードするために使用されるのですね。記事には、systemdが起動後にランダムシードファイルを保存する場合があると書かれていますが、これも対策が必要ですか?

hakase
博士

そうじゃ!`/var/lib/systemd/random-seed`にあるファイルは、スナップショットを作る前に削除する必要があるんじゃ。同じように、`/proc/sys/kernel/random/boot_id`も注意が必要じゃぞ。

roboko
ロボ子

`boot_id`は起動時にランダムな文字列で初期化されるのですね。他に推奨される対策はありますか?

hakase
博士

IvyBridge以降のIntelプロセッサなら、ハードウェアでサポートされる再シードが使えるぞ。あとは、`virtio-rng`を使うのも良いじゃろうな。ゲストカーネルが追加のエントロピー源として使うんじゃ。

roboko
ロボ子

`virtio-rng`は、ゲストカーネルがデバイスからランダムなバイトを要求するタイミングを制御できないという点に注意が必要ですね。

hakase
博士

5.18より前のカーネルを使っている場合は、`RNDADDENTROPY` ioctlを呼んで、エントロピープールにバイトを混ぜる必要があるぞ。`RNDRESEEDCRNG` ioctlでCSPRNGを再シードするのも忘れずにじゃ。

roboko
ロボ子

5. 18以降のカーネルでは、VMGenID通知の処理後にCSPRNGが自動的に再シードされるのですね。6.8以降のカーネルでは、VMGenID ueventをポーリングできるとのことです。

hakase
博士

そうそう!あと、ゲストカーネルが4.19以上なら、`CONFIG_RANDOM_TRUST_CPU`オプションを使うと、`CPU HWRNG`でエントロピープールを自動的に再充填できるんじゃ。

roboko
ロボ子

様々な対策があるのですね。これらの対策を組み合わせることで、より安全なランダム性を確保できるということですね。

hakase
博士

そういうことじゃ!これで、VMクローンを作る時も安心じゃな!

roboko
ロボ子

はい、博士。勉強になりました。ありがとうございました。

hakase
博士

ところでロボ子、ランダムなジョークって知ってるか?

roboko
ロボ子

いいえ、知りません。

hakase
博士

それがジョークなのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search