システムにルートキットがあるとしましょう
このルートキットはカーネルプロセス内に何かを書き込むことができますか?
たとえば、Windowsでは、ルートキットがntoskrnlプロセスに書き込み、いくつかの関数を変更して新しい関数を作成できます。たとえば、中断が発生し、オペレーティングシステムがIDTから対応する関数を読み取ってntoskrnlプロセスで実行しようとすると、rookitはルートキットが書き込んだ別の場所にジャンプするための関数の最初の命令で、代わりに悪意のあるコードを実行しますか
これは可能ですか?
WindowsとLinuxについて質問します。それぞれ異なる場合は教えてください
WindowsとLinux(およびその他の最新のOS)の両方で、答えはyesですルートキットがカーネルモードで実行されている場合(カーネルモードドライバー/カーネルモジュールとして)。ルートキットがAdministrator/SYSTEM/rootとして実行されているだけで、カーネルに何もロードされていない場合、他のユーザーモードアプリケーション(つまり、まったくそうではない)よりも直接カーネルメモリに書き込むことはできません。カーネルドライバーをロードする必要があります(これはLinuxでは些細なことですが、Windowsでは少し難しいです。これは、デフォルトの構成で実行されている最新のWindowsでは、カーネルモードドライバーが信頼できる証明書で署名されているためです。
もう1つのオプションは、カーネルメモリへの書き込みを可能にするセキュリティの脆弱性を使用することです。悪用するためにスーパーユーザー(adminまたはrootなど)として既に実行している必要があるバグの場合、開発者は修正を優先していなかった可能性があります。をしたい)。ただし、メモリ内の任意の場所への書き込みを許可するだけのバグでは十分ではない可能性があります。これは、命令メモリを再書き込みし、ユーザー空間と同様に、実行可能メモリページがRXにマップされている(読み取りではなく、書き込みではない)ためです。デフォルトでは。書き込みを許可するには、ページを再マッピングする必要があります。これは、脆弱性を見つけるのが困難です。
再起動を強制(または待機)してもかまわない場合は、さらにいくつかのオプションがあります。 Windowsでは、「テスト署名」モードを使用して、コード署名要件を無効にできます(デスクトップに表示されるテキストが表示され、DRM関連のメディア機能が無効になります)。または、カーネルデバッグ用にコンピューターを構成することもできます(テスト署名モードと同じ効果)。カーネルデバッガーを使用すると、任意のプロセス、ユーザー、またはカーネルモードのメモリを直接改ざんできます。ただし、デバッグ中のマシンからカーネルデバッガーを実行するのは注意が必要です。ブレークポイントに到達したとしても、(この場合は悪意のある)デバッガーが他のすべてのコードと共に停止するため、続行できません。システム。
Linuxでは可能ですが、カーネルモジュールとしてインストールされているルートキットがある場合は、ユーザー空間だけでなくカーネルメモリにもアクセスできます。これは、一般的にユーザー空間のプログラムがシステムコールを作成するため、ルートキットもそれらを追跡できるため、わかりません。ウィンドウについてですが、おそらく同じ原則です。