lsmod
我可以使用或来获取模块列表cat /proc/modules
。这两种方法是否使用相同的机制来检索模块?我想知道这一点,因为我们可以用它来找到一些隐藏的恶意模块。
答案1
它们都读取相同的内核接口来生成列表。但是,rootkit 可能会修改 lsmod 来隐藏模块,但读取 /proc/modules 的方法多种多样,rootkit 几乎不可能修改所有方法。
如果您正在做一些程序化的事情,那么使用哪一个并不重要,但是 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
等等等等。任何可以读取文本的东西都可以显示内容。这些只是我在一分钟内想到的几个。如果我仔细想想,我可以想出一些真的深奥的方法。
答案2
如果 rootkit 在内核级别运行(例如作为模块),则您不能依赖 提供的信息/proc/modules
。此外,您也不能依赖 ,lsmod
因为它会漂亮地打印/proc/modules
。
答案3
我们可以查找源代码,但如果你像我一样懒的话:
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/*
。