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


8

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

メモリに直接アクセスできることは、開発者やハッカーにとって役立つ場合がありますが、なぜからメモリにアクセスする必要があるのでしょうか/dev/mem。私の知る限り、(とは異なり/dev/kmem)カーネルで無効にすることはできません。悪用されたり悪用されたりする可能性のある未加工のメモリにアクセスすることは、問題を求めているように思えます。

実用的な使い方はありますか?ユーザープログラムで正しく機能するために必要ですか?


1
lwn.net/Articles/147901は、Xサーバーがを使用できることを示唆しています/dev/mem。それがまだ関連しているのかわかりません。
マット

このLJ記事は同じことを示唆しています:linuxjournal.com/magazine/anthony-lineberry-devmem-rootkits
slm

ロード可能なモジュールも無効にしましたか?それはよりもさらに危険だからです/dev/mem。モジュールをロードし、コードをカーネルモードで実行します。その上、rootアクセスによる攻撃者に対する強化は、rootが実行できないことがある場合にのみ価値があります。これは、通常のインストールではそうではない傾向があります。
Gilles「SO-邪悪なことをやめる」

@Gilles-暗号で署名されたモジュールを使用しています。私の秘密鍵で署名されたモジュールのみをロードできます。
user1968963 2014

で説明されているSTRICT_DEVMEMに加えてman mem、「セキュアブート」をサポートするために使用されるカーネルロックダウンパッチによって、/ dev / memへの書き込みアクセスが無効になります(ロックダウンは、セキュアブートなしで有効にできます)。 phoronix.com/…– sourcejedi 2017
21:09

回答:


6

これらの2つの箇条書きを含む、Linuxカーネルの弱体化:/ dev / mem介した悪意のあるコードインジェクションというタイトルの付いた、 Scale 7x 2009のスライドデッキがあります。

誰が必要ですか?

  • Xサーバー(ビデオメモリと制御レジスタ)
  • どせむ

これまでに検索で見つけたすべてから、これらの2つの弾丸は合法的な使用のためのフロントランナーであるように見えます。

参考文献


私が実行していない場合はX server私のサーバー上で、これにより必要はありません/dev/mem/dev/memカーネルを完全に無効にする方法はありますか?「/ dev / memへのフィルターアクセス」(CONFIG_STRICT_DEVMEM)しか見つかりませんでした。
user1968963 2014

1
Linuxでは、最新のXサーバーは/ dev / memがなくても機能します。グラフィックカードには独自のデバイスノードがあるためです。たとえば、i915の場合です。
ヨルゲンセン

3

無効に/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を参照してください


/dev/kmemカーネルを無効にし/proc/kcoreましたが、システムに何も表示されません。しかし、私は持っています/dev/mem、そしてそれを無効にしたいと思います。
Martin Vegter 2017

この回答にはタイプミスがあります。同様に、する/proc/mem必要があります。/dev/mem/proc/kmem
rlf 2017

@ bbb31いいですね。足りないものがあるのではないかと思いました。それが事実であったなら、私はあなたに明確にする機会を与えたかったのです。
rlf 2017

「この攻撃を防ぐにはどうすればよいですか。RAMを暗号化します。RAMをどのように暗号化しますか?できません。」注:将来的には(少なくとも一部の種類のハードウェアでは)実行できるようになるはずです-近日提供予定です!lwn.net/Articles/776688
比尔蓋子

1

ご存知のよう/dev/memに、実行中のシステムの物理メモリへのアクセスを提供します。/dev/kmemカーネル仮想メモリへのアクセスを提供します。これらのキャラクターデバイス両方とも、カーネル構成オプションを介して永続的に無効にすることができます(コードは最も信頼できる情報源であるため、参照として使用されます)。以下の最初の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


0

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

/dev/memX.org X11を使用していても、がないために問題が発生することはありませんでした。ちょうど今日、次のように、パッケージのemergex11-drivers/xf86-video-vesa必要/dev/memであることを示すメッセージを出力することに気づきました:

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

XServerの VESAドライバーを意図的にインストールしなかったため、またはフォールバックとしてのみインストールした場合でも、実際に使用する必要がなかったため、気付かなかった–今まで。

しかし、これはa) X11が/dev/memもう必要ないこと、およびb)一部のX11ビデオドライバーがとにかくまだできることを証明します。

特定のハードウェア用の新しいビデオドライバーは、ほとんどの場合、それがなくても機能します。現代のX.org-X11(Gentoo上x11-base/xorg-server)と同じように、もうrootである必要はありません。それが進捗状況です...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.