カーネル: /dev/kmem および /dev/mem を無効にする

カーネル: /dev/kmem および /dev/mem を無効にする

私はこれを理解/dev/kmemし、/dev/memシステムメモリ(例えば、raw RAM)へのアクセスを提供します。私は/dev/kmemそれがカーネルで完全に無効になることができ、調整できることも知っています/dev/mem

メモリへのネイティブアクセスを持つことは開発者やハッカーにとって便利ですが、なぜ/dev/mem.AFAIKを渡すのですか(とは異なり)カーネルで無効にすることはできません/dev/kmem。私の考えでは、悪用/悪用される可能性がある生のメモリにアクセスすることは問題を引き起こすだけです。

実用的な用途はありますか?正常に動作するために必要なユーザープログラムはありますか?

答え1

Scale 7x 2009には、次のタイトルのスライドがあります。Linuxカーネルの破損:/dev/memを介してマルウェアを挿入する中にはこの2つの弾丸があります。

誰がこれを必要としますか?

  • Xサーバー(ビデオメモリと制御レジスタ)
  • 用量μ

これまでの検索で見つけたすべての内容によると、これら2つの箇条書きが法的用途のリーダーとして見えます。

引用する

答え2

/dev/memそのメモリを無効にしても/dev/kmemそのメモリをダンプできることはman proc注目に値します/proc/kcore。非常に良いフォレンジックツールキットrekallにはこれを行うツールがあります。/boot;分析できるようにメモリ(およびファイル)をダンプします。

実は、Ubuntuではデフォルトで無効になっています。/dev/kmem:

/dev/kmem攻撃者がカーネルルートキットをロードするために使用する以外に、現代的な用途はありません。CONFIG_DEVKMEM「n」に設定します。/dev/kmemデバイスノードはUbuntu 9.04を介してUbuntu 8.04 LTSにまだ存在しますが、実際にはカーネルのどのエントリにもリンクされていません。

Ubuntuは無効になりません/dev/memアプリケーションに必要なので

一部のアプリケーション(Xorg)は、ユーザー空間から物理メモリに直接アクセスする必要があります。このアクセスを提供するために特別なファイルがあります/dev/mem。過去には、root アクセス権を持つ攻撃者がこのファイルでカーネルメモリを表示して変更することができました。CONFIG_STRICT_DEVMEM非デバイスメモリアクセス(元の名前は)を防ぐためにカーネルオプションが導入されましたCONFIG_NONPROMISC_DEVMEM

無効にする方法/proc/kcore?

CONFIG_PROC_KCOREカーネルをビルドするときはアクティブにしないでください。

どうやって無効にしますか/dev/mem

さて、振り返ると、man memそれがどのように生成されたかについての詳細を得ることができます。

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

rm -rf /dev/memカーネル構築段階で有効にしない場合は無効にできますCONFIG_STRICT_DEVMEM

無効にする方法/dev/kmem?

CONFIG_DEVKMEMカーネルをビルドするときに有効になっていないことを確認してください。

コールドスタート攻撃を防ぐ方法は?

/proc/kcore、、/dev/mem暗号化されたスワップパーティションを無効にしたり、スワップパーティションをまったく使用しない場合は/dev/kmemどうなりますか?素晴らしい、あなたの記憶が凍る可能性がありますこの方法でアクセスしてください。この攻撃を防ぐ方法は? RAMを暗号化します。 RAMをどのように暗号化しますか?あなたはできません。詳しくはTRESORをご覧ください。

答え3

ご存知のように、/dev/mem実行中のシステムの物理メモリへのアクセスを提供します。/dev/kmemカーネル仮想メモリへのアクセスを提供します。これら2つの文字デバイス永久に無効にすることができますカーネル設定オプション(コードは最も権威のある情報源であるため、参照用にのみ使用)の下の最初の2つのオプションをオフにすると、そのデバイスは無効になります。

  • CONFIG_DEVKMEM/dev/kmem起動時に生成するかどうかを決定します。
  • CONFIG_DEVMEM/dev/mem起動時に生成するかどうかを決定します。
  • CONFIG_STRICT_DEVMEM/dev/mem存在する場合はアクセス制限を決定します。

ディストリビューションに応じzless /proc/config.gzて、または同じものを使用して現在のカーネル構成を表示できますless /boot/config-$(uname -r)

考える元の目的/dev/memはサポートでした。メモリマップ周辺機器。そのような仮想デバイス(攻撃者が他のプロセスまたはカーネル内のメモリにすぐにパッチを適用する可能性がある)を持つことの明らかな否定的なセキュリティ影響は、少なくとも10年間知られています。/dev/memメインラインカーネルはすでに制限されたアクセスをサポートしています。2008年初めから/dev/kmemまたオプションその時からまた。

10年前にはこれがX依存しているように見え、/dev/mem今もそうです。X必要性の主張をテストするために、/dev/mem昨日はラップトップから仮想デバイスを削除しました。 2017年にはいます。これらのデバイスは実用的な目的がないようです。研究と開発を超えて。

セキュリティの観点からは、これらのデバイスを削除することをお勧めします。それでも注目に値するのは離れて高い権限を持つ攻撃者は、自分のアドレス空間外のメモリを読み取ることができます。他のユーザースペースアプリケーションのメモリには、次の方法でアクセスできます。/proc/<pid>/mem。カーネルメモリには、以下を使用してアクセスできます。/proc/kcore

答え4

/dev/mem私は最初からそれを私のシステムに含めませんでした。私はGentoo Linuxを使用しているので、このLinuxディストリビューションを使用すると、実際にはLinuxカーネルを含むすべてのパッケージを直接ビルドできるので、これは驚くべきことではありません。

X.org X11を使用してもX11が不足しているため、問題は見つかりませんでした/dev/mem。まさに今日私は一つのことを見つけました。現れるパッケージは、次のようにx11-drivers/xf86-video-vesa必須というメッセージを印刷します/dev/mem

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

VESAドライバをインストールしていないXサーバー意図的にまたは代替手段として、私は実際にこの機能を使用したことがないので、これまで気づかなかった。

しかし、これは何かを証明するㅏ)X11はもう必要ありません/dev/mem雨)一部のX11ビデオドライバはまだこれを行うことができます。

特定のハードウェア用の最新のビデオドライバは、ドライバなしで動作する可能性が高いです。最新のX.org-X11(Gentooの場合x11-base/xorg-server)のように必ずしもそうではありません。水の根これ以上ではありません。これが発展の様子です…

関連情報