lsmod
またはcat /proc/modules
のいずれかを使用してモジュールのリストを取得できます。 2つのアプローチは同じメカニズムを使用してモジュールを取得しますか?隠された悪意のあるモジュールを見つけるために使用できるので、これを知りたいです。
どちらも同じカーネルインターフェイスを読み取ってリストを作成しています。ただし、ルートキットは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分以内に考えたほんの数例です。私がそれについて考えるならば、私はいくつかの本当に難解な方法を思い付くことができました。
ルートキットがカーネルレベルで(たとえばモジュールとして)機能する場合、/proc/modules
によって提供される情報に依存することはできません。さらに、/proc/modules
をきれいに出力するため、lsmod
にも依存できません。
ソースコードを調べることもできますが、私のように怠け者の場合:
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/*
からのものであると推測できます。