web-dev-qa-db-ja.com

起動したら、カーネルイメージのフルパスを見つけますか?

/ proc/cmdlineをチェックして、現在実行されているカーネルイメージを推測し、/ bootマウントポイントで同じものと見なすことができることを私は知っています。しかし、これは保証されていません。

では、どのパーティションからどのイメージを確実に知る方法はありますか?

イメージファイルは、既知のパスでinitramfsによる検査に使用できますか?

2
patrick h

カーネルイメージをシステムに取得するRAMはブートローダーの仕事です。カーネルイメージがどこから来たのかを確実に知るのはブートローダーだけです。システムがネットワークから起動される場合、カーネルイメージが存在しない可能性があります。システム上のファイルとして。

uname -aによって報告されたバージョン番号とコンパイルタイムスタンプは、カーネルイメージファイルを識別するのに役立つ場合があります。 fileコマンドを使用して、カーネルイメージファイルから同じ情報を読み取ることができます。

$ uname -a
Linux hostname 4.9.80-atom #1 SMP Mon Feb 5 13:26:54 EET 2018 x86_64 GNU/Linux

$ file /boot/vmlinuz-4.9.80-atom 
/boot/vmlinuz-4.9.80-atom: Linux kernel x86 boot executable bzImage, version 4.9.80-atom (user@hostname) #1 SMP Mon Feb 5 13:26:54 EET 2018, RO-rootFS, swap_dev 0x3, Normal VGA

UEFIシステムでは、UEFIブート変数BootCurrentを表示して、どのNVRAMブートオプションが選択されたかを確認できます。ただし、これはあまり強力な証拠ではありません。起動オプションは起動後に編集された可能性があり、複数の起動オプションを提供できるブートローダーを指している場合は、とにかくあいまいになります。

私が知っている唯一の強力な証拠は、TPMチップとTPM対応ブートローダーを備えたシステムを使用することです。これは、TPMの適切なPCRレジスタに最初にロードされたカーネルの暗号的に強力なハッシュを格納します。その後、同じルールに従い、ハッシュを再計算して、一致するかどうかを確認できます。そうでない場合は、誰かがカーネルまたはPCRレジスタ値のいずれかを改ざんしています。また、ファームウェアは常に実際に使用されているブートコードのハッシュで別のPCRレジスタを埋めるので、ブートローダーの改ざんも確認できます。

(PCRレジスタは、選択した値に設定するだけでは不十分な方法で実装されます。新しい値は、常に古い値と入力された新しいデータの暗号的に強力なハッシュになるため、PCRレジスタを他のゼロ以外の値がすでにある場合の特定の既知の値は非常に困難です。)

TrustedGRUBは、TPM対応バージョンのGRUBブートローダーです。私はかつて[GRUB Legacy]( https://sourceforge.net/p/trustedgrub/wiki/Home/] 。現在、 新しい実装があるようです。 GRUB 2 に基づいていますが、これまでのところレガシースタイルのブートのみをサポートしているようです。すべてのTPM対応システムが利用可能であるため、テストしていません。テスト用の私は現在UEFIベースです。

2
telcoM