Kstat/ksec站点:http://www.s0ftpj.org
其实熟悉内核攻击的人都知道Kstat单纯检查sys_call_table[]的方式如今已经
被攻击的一方完全超越,e4gle很早也写过这类文章。
有兴趣可以看看2002焦点峰会jbtzhm的《内核后门实现及其检测》
现在linuxforum安全版版主madsys在Phrack61上有篇文章:
Finding hidden kernel modules (the extrem way)--链接:
http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=security&Number=434871&page=0&view=collapsed&sb=5&o=all&fpart=
======================
检测开放端口和关联进程
======================
[root@ay4z3ro foo]# netstat –anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 620/
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 908/X
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 880/sshd
udp 0 0 0.0.0.0:111 0.0.0.0:* 620/
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 2753 756/ /tmp/.font-unix/fs-1
……(以下省略)
在Solaris,HP-UX,AIX,FreeBSD,Linux上可以使用lsof工具列举所有运行进程及其所打开的文件描述符,其中包括常规文件,
库文件,目录,UNIX流,套接字等。如果只想显示网络套接字的进程:
[root@ay4z3ro foo]# lsof –i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 620 rpc 3u IPv4 2598 UDP *:sunrpc
portmap 620 rpc 4u IPv4 2609 TCP *:sunrpc (LISTEN)
sshd 880 root 3u IPv4 2885 TCP *:ssh (LISTEN)
X 908 root 1u IPv4 2945 TCP *:x11 (LISTEN)
其中特别需要注意的是奇怪的进程和已打开的原始套接字。
================================
寻找系统中是否运行一个非法嗅探器
================================
为了达到这个目的,我们需要检查网卡是否处于混杂(promiscuous)模式:
[root@ay4z3ro foo]# ifconfig –i eth0 | grep PROMISC
PROMISC标志并不会在所有的*NIX上出现,通过lsof+ps命令可以判断系统是否正运行一个嗅探器。或者通过第三方的工具,比如AntiSniff。
=================
检查/proc文件系统
=================
在/proc/$PID/目录下对于调查比较有意义的是:exe链接,fd子目录,cmdline文件。
[root@ay4z3ro 880]# ls -al
total 0
dr-xr-xr-x 3 root root 0 Sep 20 19:53 ./
dr-xr-xr-x 62 root root 0 Sep 20 15:07 ../
-r--r--r-- 1 root root 0 Sep 20 19:54 binfmt
-r--r--r-- 1 root root 0 Sep 20 19:54 cmdline
lrwxrwxrwx 1 root root 0 Sep 20 19:54 cwd -> //
-r-------- 1 root root 0 Sep 20 19:54 environ
lrwxrwxrwx 1 root root 0 Sep 20 19:54 exe -> /usr/sbin/sshd*
dr-x------ 2 root root 0 Sep 20 19:54 fd/
-r--r--r-- 1 root root 0 Sep 20 19:54 maps
-rw------- 1 root root 0 Sep 20 19:54 mem
-r--r--r-- 1 root root 0 Sep 20 19:54 mounts
lrwxrwxrwx 1 root root 0 Sep 20 19:54 root -> //
-r--r--r-- 1 root root 0 Sep 20 19:54 stat
-r--r--r-- 1 root root 0 Sep 20 19:54 statm
-r--r--r-- 1 root root 0 Sep 20 19:54 status
Exe链接允许我们恢复被删除的文件,只要这些文件仍然运行。为获得“已删除”可执行文件的备份,只需要使用cp命令在该文件系统上
创建一个拷贝就行。通过检查fd子目录,可以识别该进程打开的所有文件。如果对unix环境下的编程有所了解的话,很容易就能发现
是在读写一个文件还是打开一个网络连接。cmdline文件的内容是该进程的完整命令行。以下语句是攻击者的欺骗手段,
strcpy(argv[0],”any_string”);
这样该文件就显示了一种假象,即使如此,我们仍有必要检查此文件。
==================================
获取所有文件的创建,修改和访问时间
==================================
ls –alRu > /mnt/usb/access
ls –alRc > /mnt/usb/modification
ls –alR > /mnt/usb/creation
============
获取系统日志
============
大多数UNIX的日志在/var/log和/var/adm目录下,各种UNIX派生系统日志的具体位置有所不同。
在此之前,有必要了解针对特定系统的日志存贮位置。
比较重要的二进制日志文件:
utmp,用w工具访问;
wtmp,用last工具访问;
lastlog,用lastlog工具访问;
进程记账日志,用astcomm工具访问
常见的ASCII文本日志文件:
apache日志--/var/log/httpd/access_log;
ftp日志—xferlog;
命令历史记录文件;
/var/log/messages;
检查/etc/syslog.conf以及其他守护进程的配置文件以确定其余日志的位置。
================
获取重要配置文件
================
检查各配置文件查找后门位置,未授权的信任关系和未授权的用户ID。
/etc/passwd,查找未授权的用户帐号和权限。初级的入侵者会添加uid=0的用户,
有人也会把系统中一个不起眼的原本没有shell的普通账户改成可登陆获得shell执行命令,
然后他可以通过一个suid位的ksh或其他的安置在本地的后门马上得到rootshell.
/etc/shadow,确保每个用户都有密码认证;当然攻击者给自己的账户加一个md5 hash其实也是非常简单的事。
/etc/groups,查找权限的升级和访问范围的扩大。
/etc/hosts,列出本地DNS条目。
/etc/hosts.equiv,检查信任关系。
~/.rhosts,检查基于用户的信任关系,”++”这种很滥的后门相信大家都知道。
/etc/hosts.allow && /etc/hosts.deny 检查tcpwrapper的规则。
/etc/rc*,检查启动文件。
Crontab文件,列出计划事件。
/etc/inetd.conf,列出端口所监听的服务。
===========
转储系统RAM
===========