私はこれを理解/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
)のように必ずしもそうではありません。水の根これ以上ではありません。これが発展の様子です…