Linuxカーネルセキュリティに関するいくつかの基本的な質問[閉じる]

Linuxカーネルセキュリティに関するいくつかの基本的な質問[閉じる]

私はLinuxカーネルについてよく知らず、いくつかの質問があります。

  1. カーネルメモリをユーザ空間メモリから分離する主な目的は何ですか?ユーザーアプリケーションがカーネルに悪いことをしないようにしますか?

  2. ユーザーレベルのアプリケーションがコントロールをカーネルに転送する方法は?私が考えることができるのは(1)システムコール呼び出し、(2)メモリをカーネルにマッピングすることです(しかし私の考えでは地図()(またシステムコールです)、(3)カーネルモジュールをロードします(しかし私の考えではlsmodいくつかのシステムコールも呼び出します。)私は正しいですか?私が逃した他の方法はありますか?

  3. カーネルを攻撃する方法はいくつですか?彼らの簡単な詳細を得ることができますか?

  4. root権限を取得すると、カーネルに対するすべての権限を持つことになりますか?つまり、カーネルとハードウェアで私が望むものは何でもできるということですか?それともまだカーネルに対する権限が制限されていますか?

誰もがこの質問に対する答えを見つけるのに役立つことができればとても感謝します。

答え1

私は質問にできるだけ簡単に答えようとします。あなたが尋ねる質問は、通常、大学のオペレーティングシステムの入門コースで扱われますが、あなたはそのようなコースを受講していないと仮定します。

  1. ユーザー空間プロセスのメモリ分離は、悪意のあるユーザー空間プログラムからカーネルを保護するだけでなく、ユーザー空間プログラムを互いに保護するためにも非常に望ましいです。これはしばしば呼び出されます。仮想メモリ。さらに、他の理由(単純な断片化、単純なリンカー/ローダーなど)のために必要なページング実装も簡単になります。

  2. 割り込み(すべての割り込みがユーザーレベルのアプリケーションによって制御されるわけではありません)。プロセッサを放棄すると、プロセスの「制御」も消えます(たとえば、waitシステムコールでもあります)。カーネルは、それ自体がアプリケーションのスケジュールをキャンセルすることに決めることができます。

  3. これは非常に広範な質問です。正しく実装されていないシステムコールを持つカーネルは攻撃に対して脆弱です。物理メモリに書き込む機能は別の方法です。不適切に実行されたコマンドは、他の脆弱性(たとえば、Intelプロセッサのsysretの脆弱性)につながる可能性があります。

  4. ルート権限はカーネル権限とは異なります。ルートとして実行されるアプリケーションは、まだ仮想メモリを使用し、システムコールを実行し、ユーザーレベルのアプリケーションが準拠する必要がある他の規則に従う必要があります。

一部の回答についてさらに詳しい情報を提供したい場合は、お知らせください。

誰でも回答の一部を改善できる場合は、いつでもご指摘ください。

関連情報