快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux下后门查找初步(2)


EOF
gcc -O3 -o $HIDE backdoor.c

if [ -f $HIDE ]; then
echo "Compiling done"
rm -f backdoor.c
else
echo "Unable to compile"
rm -f backdoor.c
exit 1
fi
echo "STARTTIME = "$START"; ENDTIME = "$STOP"h"
echo "*" $START "* * *" $HIDE > crontabfile
echo "*" $STOP "* * * killall -9 "$HIDE >> crontabfile
crontab crontabfile
rm -f crontabfile
-------------------------------------------------------------------------------

(这个脚本有问题,如果这样做了,会破坏原来的/var/spool/cron/crontabs/root)

对Linux系统,crontab文件位于/var/spool/cron目录中,对Solaris系统,位于
/var/spool/cron/crontabs目录中。这些crontab文件一般以用户名作文件名,cron守护
进程每隔一分钟就检查一次,依据它们更新内存中的crontab表。编辑crontab文件后,
后门程序就在固定的时间启动和停止。

检测后门时,相应地检查/var/spool/cron/crontabs或/var/spool/cron目录中的crontab
文件,查看是否有可疑程序被执行了。如果有,仔细检查它是否是后门程序。与binary木
马后门相交*,还要仔细检查原有cron任务对应的程序,防止它们被换成木马。

如果cron后门有网络通讯,与守护进程后门一样,可以结合netstat和lsof命令来检测。

6. 动态链接库后门

几乎所有的Unix系统使用动态库。动态库重用相同代码而减少空间占用。入侵者可以修改
动态库里的函数,比如说crypt()、open()或read()等,在修改后的函数里植入后门,启
动shell或建立网络连接。

动态库后门的特点是非常隐蔽,一旦植入很难被发现。尤其是可以用来避免后门作为守护
进程常驻后台,这就大大减小了被发现的可能性。例如这样,在系统经常调用的函数,比
如open()里植入后门,后门程序启动一个进程作为连接的客户端,它主动发起连接连向攻
击者指定主机上的守护进程。如果连接失败或攻击者没有坐在机器前输入什么数据相应,
后门进程立即退出。如果连接成功而攻击者又坐在机器前,攻击者迅速做完要做的事后断
开连接,后门进程立即退出。如果攻击者在夜深人静的工作,在这个短暂的时间里很难被
发现。

对于动态库后门,很难检测出来。一般说来,对大多数动态库,都有一个对应的静态库。
它们的功能是相同的,只有动态连接和静态连接的区别。因此一种检测方法是,如果通过
某种方法,比如说比较MD5校验和,确信静态库没有被污染,那么,对于经常被调用的函
数,用objdump观察动态库和静态库,比较这些函数在动态库和静态库中的代码有没有什
么区别。如果某个函数有区别,说明这个动态库函数已被植入后门。

当然,如果静态库已经被污染,就需要干净系统动态库文件的一份拷贝了。用objdump来
对经常被调用的函数进行比较,检查是否某个函数被植入后门。

另一种方法是,写一个main()函数来调用这些经常被调用的函数,编译后运行它。运行时
查看有没有什么异常,特别是用netstat和lsof查看有无哪个端口或文件不正常地被打开。
如果有这些异常,说明相应函数被植入后门。做这件事时要特别小心,最好事先作好系统
备份,以防某些有害后门对系统造成伤害,比如说删除某个文件。

如果检测binary木马后门和守护进程后门时发现异常,但又未发现某个可执行文件被换成
木马,也没有发现暗藏的后门程序,此时就要注意动态库了,很可能是在动态库做了手脚。

经常调用的函数列表

函数 | 所在的库文件 | 简单说明
-----------------+-----------------------+-----------------------
open | libc.so | . . .
-----------------+-----------------------+-----------------------
close | libc.so | . . .
-----------------+-----------------------+-----------------------
crypt | libcrypt.so | . . .
-----------------+-----------------------+-----------------------

(注意完成这个表)

为了检测这类后门,下面给出一个shell脚本。从干净系统上取得一个动态库拷贝,用这
脚本进行比较,查看代码有没有什么区别,以确定是否被置入后门。

-------------------------------------------------------------------------------
此处代码略
-------------------------------------------------------------------------------

7. SLKM后门

THC的slkm-1.0.tar.gz

-------------------------------------------------------------------------------
此处代码略
-------------------------------------------------------------------------------

8. sniffer后门

sniffer用来监听主机或网络,以获取敏感数据,比如帐号/口令。对于网络监听,可以查
看网络接口是否处于混杂(promisc)模式后确定。

对Linux系统,在命令行执行ifconfig命令,如果发现PROMISC这个字符串,说明网络接
口处于混杂(promisc)模式,排除合法用户运行网络协议分析程序后,意味着有sniffer在
运行。如果这样,立即执行命令"lsof -n | grep sock",对第五列TYPE字段为sock的那
些输出行仔细检查,确定出哪一个程序在sniffer,删除之。

对于Solaris系统,用下面的方法来查出是否有某个进程在进行网络监听,它是正常运用
还是后门程序

# ifconfig -a # 列出活动的网络接口
lo0: flags=849 mtu 8232
inet 127.0.0.1 netmask ff000000
hme0: flags=863 mtu 1500
inet 192.168.10.2 netmask ffff0000 broadcast 192.168.255.255
ether 8:0:20:b0:64:6d
# ls -l /dev/hme* # 查出网络接口设备
lrwxrwxrwx 1 root other 29 Oct 9 1998 /dev/hme->../devices/pseudo/clone@0:hme
# ls -l /devices/pseudo/clone@0:hme # 细看一下
crw------- 1 root sys 11, 7 Oct 9 1998 /devices/pseudo/clone@0:hme
# lsof | grep "hme" # 用 lsof 查看是否处于混杂模式
snoop 7988 root 3u VCHR 7,2 0t0 423220 /devices/pseudo/clone@0:hme->bufmod->hme
# lsof | grep "clone@0:hme" # 同上
snoop 7988 root 3u VCHR 7,2 0t0 423220 /devices/pseudo/clone@0:hme->bufmod->hme
#

"lsof | grep ***" 有输出,说明有监听程序在运行,"***"是程序名,进一步仔细查证,
确定是否是后门程序。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论