rootユーザーがメモリからカーネルコードの一部を読み書きできるかどうかを知りたいです。できますか?
答え1
はい、通常、rootユーザーはカーネルコードを間接的に変更するのに十分な権限を持っています。ただし、適切なセキュリティ対策が考慮されているという前提で、いくつかのメカニズムを使用してこれを制限することができます。権限を持つ root ユーザーがカーネルコードを変更できる方法のおおよそのリスト:
ioperm()
syscallはIiopl()
/ Oポート権限を設定できます。もちろん、ブートディレクトリ(カーネルを含む)のファイルは変更できます。
/dev/mem
、/dev/kmem
文字デバイスは/dev/port
直接メモリアクセスを許可します。さまざまなMSRを使用して、低レベルのCPU動作を変更することでセキュリティに違反する可能性があります。
この
kexec
機能を使用して新しいカーネルから起動できます。ACPIテーブルは、カーネルでAMLを実行してルートによって実行時にロードできます。
ACPIを
custom_method
悪用してメモリに直接書き込むことができます。モジュール署名が無効になっている場合は、ルートとしてカーネルモジュールをロードできます。
kprobes などのデバッグ機能はカーネルの動作を変更することができます。
強化されたカーネル(適切に構成されているなど)を使用して軽減を実行できます。サイバーセキュリティ、または以下を使用してカーネルロックパッチする内容今上流。もちろん、rootユーザーがカーネルがあるブートローダーやブートパーティションに書き込むのを防ぐことは依然として必要です。