web-dev-qa-db-ja.com

lsmodと/ proc / modulesの両方が同じメカニズムを使用してモジュールを取得しますか?

lsmodまたはcat /proc/modulesのいずれかを使用してモジュールのリストを取得できます。 2つのアプローチは同じメカニズムを使用してモジュールを取得しますか?隠された悪意のあるモジュールを見つけるために使用できるので、これを知りたいです。

5
user61954

どちらも同じカーネルインターフェイスを読み取ってリストを作成しています。ただし、ルートキットはlsmodを変更してモジュールを非表示にする場合がありますが、/ proc/modulesを読み取る方法は無数にあり、ルートキットがそれらすべてを変更することはほぼ不可能です。

プログラマティックなことをしている場合、どちらを使用するかは実際には問題ではありませんが、lsmodの方がはるかに人間が読める形式です。

更新:例を含める。

cat /proc/modules
more /proc/modules
less /proc/modules
view /proc/modules
uniq /proc/moduels
uniq < /proc/modules
grep . /proc/modules
grep . < /proc/modules
awk '{print}' /proc/modules
awk '{print}' < /proc/modules
sed 's/(.)/$1/' < /proc/modules
echo "$(</proc/modules)"
Perl -p -e ";" < /proc/modules
nc -l 11111 & nc localhost 11111 < /proc/modules

などなど。テキストが読めるものなら何でも内容を表示できます。これらは私が1分以内に考えたほんの数例です。私がそれについて考えるならば、私はいくつかの本当に難解な方法を思い付くことができました。

4
bahamat

ルートキットがカーネルレベルで(たとえばモジュールとして)機能する場合、/proc/modulesによって提供される情報に依存することはできません。さらに、/proc/modulesをきれいに出力するため、lsmodにも依存できません。

1
Nico

ソースコードを調べることもできますが、私のように怠け者の場合:

Sudo strace lsmod |& grep -E '(proc|sys)'

次のような興味深いヒットを表示します。

open("/proc/modules", O_RDONLY|O_CLOEXEC) = 3
open("/sys/module/ipt_MASQUERADE/refcnt", O_RDONLY|O_CLOEXEC) = 3

したがって、ほとんどの情報は/proc/modulesおよび/sys/module/*からのものであると推測できます。