web-dev-qa-db-ja.com

rootがカーネルモードに昇格するために使用できるメソッド

ほとんどのLinuxユーザーは、「ルート」を聞くと、コンピューターで可能な最大の特権について考えます。 rootがリング0で実行されていると考える人もいます。しかし、実際には、rootはリング3で実行されている通常のユーザーですが、カーネルが信頼するユーザーです(多くの機密カーネル操作は、if (!uid_eq(current_uid(), GLOBAL_ROOT_UID)) return -EPERM;の行に沿ったチェックで保護されています)不正使用を防ぐため、uid != 0の場合にエラーが返されます。

ほとんどのLinuxシステムでは、カーネルはrootを非常に信頼しているため、カーネルを簡単に悪用して、リング0に自由にアクセスできます。ただし、grsecurityやSELinuxなどのセキュリティツールを使用すると、ルートの危険な機能を減らし、カーネルレベルでこれらの制限を適用することで、これを防ぐことができます。

Rootがカーネルを悪用してカーネルモードとリング0にアクセスできる方法の一覧を列挙したいと思います。これまでのところ、これらは、これが発生する可能性があると私が考えた、または学んだ方法です。

  • ioperm()およびiopl()は、I/Oポートの許可を設定でき、カーネルが存在するメモリを含むメモリの任意の領域に書き込むために悪用される可能性があります。これらのsyscallは、syscallテーブルから削除するか、grsecurityを使用して無効にすることができます。
  • Rootは/boot内またはブロックデバイスを介してカーネルイメージを変更できます。 MACは、これらの両方へのルートのアクセスを制限できます。
  • /dev/{k,}memは、rwが任意のメモリにアクセスできるように設計されています。これらは、grsecurityを使用するか、MACを使用して、カーネル構成で完全に無効にすることができます。
  • 一部のMSRは、任意のメモリへの書き込みに使用できます。カーネル構成でMSRを無効にするか、またはgrsecurityでMSRへの書き込みを拒否すると、この問題が軽減されます。
  • kexecを使用すると、rootはブートする代替カーネルを選択できます。これはオプションのカーネル機能であるため、kexecをサポートせずにカーネルをコンパイルするだけで問題ありません。
  • sysfsは、多くのハードウェアへの低レベルのアクセスを提供します。これにより、多くの脆弱なシステムでロックダウンが不十分なBIOS/UEFIをハイジャックして、リング0またはリング-2のアクセスを取得できます。 MACは/sysへのアクセスを制限でき、さまざまなツールがUEFI/BIOSの脆弱性を検出できます。
  • Rootが実行時にACPIテーブル(DSDT、SSDTなど)をロードすることを許可されている場合、それによりカーネルはACPIバイトコードであるAMLを実行し、カーネルがどのように動作し、実行するハードウェアに反応するかを変更できます。私はACPIとAMLについてほとんど知りませんが、これは災害の絶対的なレシピのように聞こえます。カーネルでロード可能なACPIテーブルのサポートを無効にすると、これを軽減できます。
  • 悪意のあるカーネルモジュールをロードすると、カーネルが直接ハイジャックされる可能性があります。これは、モジュールの署名を要求するか、モジュールのサポートなしでカーネルを構築することによって、簡単に打ち負かすことができます。

明らかに、私はrootのチェーンから抜け出す可能性のあるすべての可能な方法をブラックリストに載せようとするのではなく、rootの最小特権のプリンシパルを使用します。カーネルの信頼を悪用する可能性のあるすべての方法を理解することは、それが依然として非常に有用であるという事実、および興味深いを変更することはありません。

そして、それが私の質問をもたらします:rootが0daysを使用せず、opsecのミスを利用せずにリング0にアクセスするために使用できる他の方法はありますか?

26
forest

私はこれらを考えることができます:

  • 更新またはその他のシステム構成を変更することにより、カーネルイメージまたは署名済みモジュールを間接的に変更します(更新サーバーを自分のものにポイントし、キーを追加します)。または、更新元のインフラストラクチャを危険にさらすことによって。
  • n日。 syzkallerはかなりの数のバグを報告しており、いくつかはしばらく未修正のままです。 https://syzkaller.appspot.com/
  • RAM(PCIe、firewireデバイスなど)と直接やり取りできるデバイスにファームウェアをロードする。
3
domen