【Linux小技巧】秘密追踪——谁用了我的大宝?>v

如果宿舍里就你买了一瓶大宝,而且用了之后效果还挺不错。隔不久,你就发现最近这瓶大宝似乎用的有点快了,敢情是哪个哥们儿想买之前先试用一下?不巧的是,你恰好非常好奇这哥们儿是谁,想要搞一次秘密追踪。啥?指纹鉴别?噢,请原谅我没有那么专业的器材…… 不过土办法、馊主意我们还是有的:只要往大宝里掺和一点稀释过的辣椒水,隔天就等着找猴子屁股吧。^_+

扯太远了,其实本篇是想和大家分享一个在Linux下利用辣椒水的思路实现追踪程序被调用情况的小技巧。因为前段时间在分析Linux中各种内核模块被加载的方式、时间和源头。为此,我写了一个小小的Shell脚本:

trackme.sh

#!/usr/bash
echo [`date`] [`cat /proc/$PPID/cmdline | tr "00" " "`] $0 $* > /var/log/$0.log
$0.org $*

然后将需要跟踪调用情况的程序更名(在我的例子中是/sbin下的modprobe和insmod),添加一个.org的后缀。再在原位置分别以原名(modprobe和insmod)创建符号链接指向上面这个脚本。

这样,一旦modprobe或insmod被执行,则案发时间、嫌疑人(包含完整的命令行)、作案手段(全部传入参数)均被完整记录在案(/var/log下同名的日志文件),一个都逃不掉!

最后补充一点,如果还需要记录在Linux启动早期initrd阶段中的调用,则需要将上述脚本打包到initrd镜像中,同时一并修改initrd中需要跟踪的程序(方法同上)。由于不同版本的Linux可能对/var/log处理方式有差别,最好将日志记录位置调整为/dev/shm(前提是内核中编译进了tmpfs模块)。这是一个相对安全的暂存空间,不会因为rootfs的更替而丢失,在启动完成后也可以顺利查阅到。

小小技巧,还望大虾们不要见笑,若能点拨一二,不甚感激!

嘿,小样,别以为抹了辣椒水我就认不出你了!

Written on July 2, 2008