web-dev-qa-db-ja.com

カーネルレベルのルートキットをインストールできるLinuxカーネルの脆弱性はどれですか?

私の質問は、Linuxカーネルレベルのルートキットのインストールを可能にする脆弱性に関連しています(たとえば、カーネル内の実行フローを変更したり、リターン指向の攻撃を実行したり、特定のプロセスを非表示にするために一部の構造を変更したりします)。

次のサイトで、これまでに知られているLinuxカーネルの脆弱性のニース分類を見つけました。

http://www.cvedetails.com/product/6861/Linux-Kernel.html?vendor_id=

2011年にコードの実行に関する脆弱性(既知の脆弱性)が0件であることに気づいたとき、私は少し驚きました。

それは、そのテーブルの他の脆弱性(DoS、メモリ破損、オーバーフローなど)をカーネルレベルのルートキットの実行に利用できないことを意味しますか?

ARMベースのAndroid=組み込みシステムです。Linuxカーネルでこの機能が無効になっています: "動的カーネルモジュール"、 "/ dev/kmem"、 "/ dev/mem /"、 "ksplice "。また、システムには適切なBOOTプロセスが設定されています(たとえば、Linuxカーネルはブートファイルにアクセスできず、これはハードウェアによって実行されます。)したがって、カーネルレベルのルートキットをインストールする唯一の方法(ハードウェアの攻撃は別として) )はカーネル*のバグを悪用することによるものです。

*同意しない場合は、ここまたはこの投稿にコメントしてください: https://stackoverflow.com/questions/8366819/how-many-ways-exist-to-install-a-kernel-level -rootkit-in-a-linux-kernel

15

カーネル自体の脆弱性は深刻ですが、日常のユーザーにとっては話の一部にすぎません。

「通常」、「そのまま」のインストールの問題は、実際にはrootとして実行されているプロセスの脆弱性です。これらは信頼できるので、カーネルモジュールの挿入や/dev/kmemへのアクセスなど、カーネルに好きなことをするように要求できます。

CPUに関する限り、ルートプロセスは非特権プロセスとして実行されることを理解することが重要です。 x86では、このリングを3と呼びます。 on ARMプロセッサCPUモードはユーザー、FIQ、IRQ、スーパーバイザ、中止、およびUndefであり、Userはプロセスに使用される非特権レベルです(他のすべてのモードは実際には特権のあるもの)Userモードでプロセスを実行すると、他のプロセスやカーネルを直接変更することはできません。最初にカーネルに問い合わせる必要があります。ただし、信頼できるため、カーネルは「ノー」とは言いません。セットアップ、ルートとして実行されているプロセスを危険にさらすのに十分です。

これで、設定が少し異なります。モジュールのロードと/dev/kmemへのアクセスを無効にしました。深刻な損害を与えるには、ルートキットをスーパーバイザーモード(ring 0/[User以外の任意のモード)で実行するか、/dev/kmemを操作できるようにする必要があります。ブートエントリも変更できないため、ハードウェアレベルは主要な脅威ベクトル(またはksplice)のままになります。SOでそれを言及します。実行中のカーネルにコードでパッチを適用できるため、これは間違いなくリスクです!kexecは、カーネルを所定の場所に置き換えるため、別の潜在的な問題です。

したがって、理論的には、あなたが持っているものははるかに安全です。

それは、そのテーブルの残りの脆弱性(DoS、メモリ破損、オーバーフローなど)をカーネルレベルのルートキットの実行に利用できないことを意味しますか?

さて、最後のビットに最初に対処するには、カーネルモジュールを挿入するだけでよいため、「通常の」システムの脆弱性を悪用する必要はありません。しかし、あなたの場合、これは実際にはあなたの唯一の道です。システムのどこかにコードをロードできるようにするか、カーネルを制御するために悪用できるバグを見つける必要があります。

さて、あなたのゼロバグの観察-あなたが言うように、その時間枠にはゼロknownバグがあります。バグがないという意味ではありません。また、次のように注意する必要があります。

  • これはディストリビューションのカーネルですか?バニラカーネルには存在しないパッチはありますか?これらのパッチはリスクも追加します。
  • カーネルに追加のサードパーティコード(グラフィックスカードドライバー、仮想化ドライバー)が必要ですか?もしそうなら、これらもリスクを追加します。

さて、それらのCVEについて-はい、彼らが「コード実行」を言わないとき、それはそれが意味することです。存在する脆弱性はメモリを破壊し、DoSを実行する可能性がありますが、実際には悪意のあるコードを実行することはできません。 コード実行の脆弱性の1つ を見てください。

...リモートの攻撃者がサービス拒否(パニック)またはを引き起こして、任意のコードを実行する可能性があります...

つまり、現時点では、カーネルの作成時点で既知のコード実行の脆弱性はありません。更新この答え に照らして、私はそのビットを通過しています-どのエントリがバニラを表すかはサイトから明確ではありませんカーネルお​​よびベンダー提供のカーネルを表す、または実際の違いは何ですか。 を使って、カーネルの定義に注意してみましょう脆弱性はゼロでした。これは、ベンダーが提供するパッチ/サードパーティの話で以前に試みていたものです。コード。

10
user2213

NVDによって公開されたCVEデータ(cvedetails.comはNational Vulnerability Database、nvd.nist.gov。によって公開されたデータを公開します)にはいくつかの不整合があります。特に、製品とバージョン情報は信頼できません。

たとえば、Linuxカーネルには複数の製品定義があります。関連製品のリストについては http://www.cvedetails.com/product-list/vendor_id-33/Linux.html を参照してください。 (そして、他のベンダーまたは製品名で定義されたさらに多くの脆弱性があるかもしれません)

したがって、他の関連製品に対して定義された脆弱性も確認する必要があります。少なくとも確認する必要があります http://www.cvedetails.com/product/47/Linux-Linux-Kernel.html?vendor_id= (この製品に関連する脆弱性に関連するいくつかのエクスプロイトがあります)

脆弱性を見逃していないかどうかを確認するのは困難です。 cvedetails.comには、ユーザーが関連商品を照合できるが、人気がないという正直なところ、商品/ベンダーの照合機能があります。

(追伸:私はcvedetails.comの所有者です)

3
Serkan Özkan