私はコンピュータセキュリティテストを準備していますが、次のサンプル質問を理解するのが困難です。
'x86のリング0で実行することとLinuxでUID 0で実行することの違いを説明してください。 1つは達成できますが、他では達成できない機能の例を見てください。'
私が知っているのは、x86のリング0が最も特権の高いオペレーティングシステムレベルで、カーネルコードがリング0で実行されることです。 UID 0はLinuxスーパーユーザーであり、デフォルトで何でも実行できます。現在、これらの概念を理解しているので、この質問にどのように答えるべきかわかりません。
これは課題の質問や私が採点する内容ではなく、単に学習資料にすぎないことに注意してください。
答え1
あなたの理解は正しいです。 「リング0」は、プロセッサのカーネルモードを表すx86用語である。 「リング 0 で実行」は「カーネルコード」を意味します。
セキュリティに関して、プロセス(UIDの下で)が実行できるすべての操作はカーネルで実行できます。ファイルを開くなどの一部の操作は、カーネルコードで実行するのは非常に不便ですが、可能です。
一方、一般的な状況では、UID 0でコードを実行できる場合は、カーネルモジュールをロードしてカーネルコードを実行できます。したがって、一般的な構成では、UID 0とカーネルレベルの間にセキュリティバリアはありません。ただし、プロセスで実行されるコードには、プロセッサユーザーモードの制限がまだ適用されます。つまり、周辺機器(ディスク、ネットワークなどを含む)へのすべてのアクセスはまだシステムコールを受ける必要があります。コンピュータは、強力ではないUID 0を持つように設定できます。たとえば、次のようになります。
- カーネルモジュールのロードを無効にします。
- 使うセキュリティフレームワーク例えばSELinuxプロセスから権限を削除する:UID 0が必ずしも勝つわけではありません。たとえば、ゲストアカウントはUID 0で作成できますが、正しいSELinuxポリシーを使用するとデフォルトでは権限がありません。
- UID 0インチユーザーネームスペース名前空間作成者の権限のみを持ちます。