2012-02-28 9 views
0

誰でもWindows OSの特権の変更方法を教えてください。Windows NT OSのリングレベルシフト

ユーザーモードコード(RL:3)がパラメータをAPIに渡すことはわかっています。

これらのAPIは、カーネルコード(RL:1)を呼び出します。

しかし、セキュリティ(RPL)チェック中に、これらのRL3 APIとRL1カーネルAPIの間で交換されるトークンがあることを知りたいと思います。

私が間違っている場合は、(いくつかのリンクまたは簡単な説明を通じて)どのように動作するか教えてください。

このスレッドを削除するには、同意しないか、攻撃的であるか重複しているかどうかをご確認ください。

RL =リングレベル

RPL:要求された特権レベル

答えて

4

割込みハンドラと(最適化されたソフトウェアの割り込みで)syscall命令自動的にハードウェア機能である(特権レベルを変更します他のプロセッサの状態(命令ポインタ、スタックポインタなど)を置き換えながら、あなたが指摘したリング0とリング3の区別)。以前の状態はもちろん、割り込みが完了した後に復元できるように保存されています。

カーネルコードは、ユーザーモードからの入力を信頼しないように非常に注意する必要があります。これを処理する1つの方法は、カーネルモードで逆参照されるポインタをユーザーモードで渡すのではなく、カーネルモードメモリ内のテーブルで参照されるハンドルです。ユーザーモードでは変更できません。すべて。機能情報は、HANDLEテーブルおよび関連するカーネルデータ構造に格納されます。たとえば、ファイルオブジェクトが読み取り専用アクセス用に開かれている場合は、WriteFileが失敗することがわかります。

タスクスイッチャーは、セキュリティチェックを実行するシステムコール(CreateFileなど)が現在のプロセスのユーザーアカウントをチェックし、それをファイルACLと照合できるように、現在実行中のプロセスに関する情報を保持します。このプロセスIDとユーザートークンは、カーネルだけがアクセス可能なメモリに再度格納されます。

MMUページテーブルは、ユーザーモードがカーネルメモリを変更するのを防ぐために使用されます。通常、ページマッピングはまったくありません。 MMUによってハードウェアで実施されるページアクセスビット(読み出し、書き込み、実行)もある。カーネルコードが別のページテーブルを使用している場合、スワップはsyscall命令および/または割り込みのアクティブ化の一部として発生します。

+0

素晴らしいですが、他のプログラムが高い特権プログラムを模倣することは可能ですか? – perilbrain

+1

@Kislay:私はすでにこう答えています。「このプロセスIDとユーザートークンは、カーネルだけがアクセスできるメモリに再度格納されます。カーネルモードのコードだけがアクセス許可チェックを回避できます。 「特権エスカレーション」攻撃には、ユーザーモードからのデータを不適切に使用するカーネルモードコンポーネント(おそらく作成されていないデバイスドライバ)を見つけることが含まれ、カーネルモードでコードを実行したり、カーネルだけがアクセスできるデータを変更することができます。 –

+0

ありがとうございました...大きな助け... :) – perilbrain

関連する問題