web-dev-qa-db-ja.com

リング-3の悪用と他のリングの存在

リングの概念

x86 rings リングはUNIX、Multicsの先駆けとして導入され、読み取り、書き込み、実行、呼び出しのための 8リング がありました(私はありません)誰かがボーナスの質問を考えているなら、なぜこれを行うのに8回のリングが必要なのかを十分に理解してください!)。 Intelによるx86アーキテクチャは、リングの概念をハードウェアに組み込んだもので、リング0に対応する4つのリングはカーネル用、1と2はデバイスドライバ用、3はアプリケーション用です。

2019年の状況

いくつかの例外はありますが、リング0と3は通常、ほとんどのユーザーの最新のx86オペレーティングシステムで使用される唯一のリングです。リング0はカーネルレベルの操作用に、リング3はユーザーレベル用に予約されています。たとえば、 VirtualBoxはリング1を使用 で仮想ホストの使用を許可します。一般に、リング3のコードはリング0のメモリまたは操作にアクセスできませんが、それは2018年1月に公開されたSpectreおよびMeltdownの問題の根本原因でした。

「リング-1」もハイパーバイザー用に導入されました-Intel VT-XおよびAMD-Vは9つのマシンコード命令を追加し、リング-1の概念を導入します。リング-2は通常SMM(システム管理モード)と呼ばれ、電源管理などの非常に低レベルの操作に使用され、システムファームウェアによってのみ使用されます。これは、オペレーティングシステムが干渉することなくルートキットが常駐するための複数のエクスプロイトで使用されています。

「リング-3」は、Intel Q35チップセット(Q45以降で修正済み)のInvisible Thingsによる攻撃が実証された後、それ以下のレベルで動作するように作られた。これは、Intel Management Engine用に予約されているRAMの最初の16 MBを再マップすることで機能し、S3状態のデバイスでも動作しました。

ARMプロセッサは3つのリングしか使用していないようで、逆の順序で並べられています。 PL0はユーザー、PL1はオペレーティングシステム、PL2はハイパーバイザーです。 図3.20およびARMのこのページを参照してください。

まとめと質問

長年にわたって、x86アーキテクチャーによって最初に記述されたもの以外のリングでのエクスプロイトを示すエクスプロイトがいくつかあります。 さらに低いレベルのリングはどのようになりますか(Intelではリング-4、ARMではPL3、AMDではリング-3)およびこの分野でのエクスプロイトに関する作業はありましたか。さらに、「方法」と「理由」の説明が当てはまるように、 良い示唆に富む質問に関するガイド に従っています。

8
LTPCGO

負のリングは偽のリングです。 CPUの実際の特権レベルではありません。リングの動作は簡単です。一部の命令には、現在の特権レベル(CPL)で十分であることを確認する特権チェックがあり、不十分な場合、その命令は 一般保護違反 で失敗します。 CPL0はリング0、CPL1はリング1などです。一部の命令は、そのオペランドの値に応じて特定の特権レベルを必要とします(たとえば、movは、CPLが不十分でメモリアドレスがある場合、GPFを返すことがあります与えられるには、アクセスするためにリング0が必要です。他のユーザーは常により高い特権レベルを必要とします。

例は RDTSC 命令です。 どちらか CR4のTSDビット(4番目の 制御レジスタ )が設定されていないか、現在の特権レベルがゼロであるか、システムが起動していない限り、一般保護違反がスローされます。リアルモード(CR0のPEビットが設定されていないかどうかを確認することによって決定されます)。この命令は内部的に次のように定義されています。

if(CR4.TSD == 0 || CPL == 0 || CR0.PE == 0) EDX:EAX = TimeStampCounter;
else Exception(GP(0));

リングとその用途についてもう少し書きました この回答では

否定的な特権レベルのようなものはありません。それらは存在しません。リング-1は、ハイパーバイザー機能(IntelのVT-x)のニックネームです。リング-2は システム管理モード コンテキストまたはSMMのニックネームであり、SMIと呼ばれる特別な割り込みが発生したときに分離コードを実行します。リング-3はニックネームです。 CSMEで実行されるコードの場合、システムメモリーに間接的にアクセスできる最新のIntelチップセット内のi486/i586ハイブリッドコプロセッサー(間接的に言うと、システムメモリにアクセスできないdesignedしかし、それは仮想PCIeデバイスを公開します それが判明します[〜#〜] dmar [〜#〜] にも干渉する可能性があること、IOMMUによって使用されます) 。


さらに下のレベルのリングはどのようになりますか

これらのどれよりも低いと考えることができる唯一のものはプローブモードと呼ばれます(これもまた、実際のリングではありません)。これは [〜#〜] jtag [〜#〜] によって開始され、CPU全体を極端に制御します。プローブモードは以前ほど強力ではありませんが、おそらく、特別なIntelハードウェアと資格情報にアクセスして、より完全なバージョンのプローブモードをアンロックする方法があると考えられます。

この分野でのエクスプロイトに関する作業はありましたか

あんまり。 JTAGには物理的なアクセスが必要であり、Intelの場合、CPUのシリアル番号に固有の パスワード が必要です。

4
forest

私の答えはインテル/ x86アーキテクチャのままにしておきますが、他のベンダー/リング設計にも適用できます。

リング-3は、メインボード上の管理エンジンである「コンピュータを実行するコンピュータ」です。したがって、次の論理的なステップは、システム全体を制御できるマザーボード上のチップを探すことです。私が考えることができる唯一のものは、[〜#〜] ram [〜#〜]でしょう。

RAMは単なる愚かなバッファであるため、実際には何も制御せず、RAMは管理エンジンによって直接制御されます。ただし、少なくとも- 1つの会社 は、組み込みマイクロコントローラーを使用してRAM)を販売しています。これは、メモリダイに埋め込まれたコントローラーに反復的なメモリ内タスクをオフロードするために使用されると思われます。

実際のRAMを制御できる場合は、システム内のあらゆるものを制御できます。独自のメモリがある場合は、管理エンジンを除く可能性があります。これらのデバイスのマイクロコントローラーは、RAMへのフルアクセスが必要です。

エクスプロイトに関して行われる作業については、これらのデバイスは標準化されているとはほど遠いため、特別な機能の使用はカーネルまたはユーザーモードドライバーから行われます。 RAMチップ上のマイクロコントローラーにアクセスするには、ベンダー固有のドライバーが含まれるため、ベンダー固有のエクスプロイトが必要です。

1
markus-nm

負のリングが偽のリングであることに私は同意しません。彼らはかなり現実です。たとえば、-1を考えてみましょう。それを制御することで、0で始まるすべてのものを制御できることがほぼ保証されます(例外はほとんどありません)。それについて非現実的なことはありません。

ここに私が今日それを見る方法があります:

  • リング3-ユーザーレベル

  • リング2-ドライバーレベル(実際のドライバー)

  • リング1-ドライバーエミュレーションレベル(Vista以降のオーディオおよびIRQソフトウェアレイヤーの場合など)

  • リング0-カーネルレベル

  • リング-1-VM level(hypervisors)

  • リング-2-ハードウェア管理システム(iDRACなど)

  • リング-3-IMEおよび類似のハードウェア

ハードウェアコンポーネントに影響を与えるなど、特定の目的を達成するために電気信号を操作して基本的な機能の一部を無効化、妨害、または変更する方法を見つけた場合、リング-4が存在する可能性があります。これは理論的には完全に可能ですが、私が知る限り、公開されたことはありません。また、特別に設計されたハードウェアも必要です。

0
Overmind