Unix平台后门检查、日志审计手册

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UNIX平台后门检查、日志审计手册
二零零六年四月
后门简介 (3)
Unix平台常用后门技术 (3)
增加超级用户账号 (3)
破解、嗅探用户密码 (3)
放置SUID Shell (3)
rhosts+ + (3)
利用系统服务程序 (3)
TCP/UDP/ICMP Shell (4)
Crontab定时任务 (4)
共享库注射(injectso) (4)
工具包、rootkit (5)
可加载内核模块(LKM) (5)
后门的检测 (5)
检查系统密码文件 (5)
检查系统进程 (6)
检查系统守护进程 (6)
检查网络连接和监听端口 (6)
检查系统日志 (6)
检查系统中的core文件 (7)
检查文件系统中的S位文件 (7)
检查系统文件完整性 (7)
检查内核模块(LKM)后门 (8)
Unix系统日志审计功能 (8)
连接时间日志 (8)
Accton记录进程统计 (8)
Syslogd记录错误日志 (9)
本地日志记录方式 (9)
远程日志记录方式 (10)
后门简介
入侵者完全控制系统后,为方便下次进入而采用的一种技术手段。

一般通过修改系统配置文件和安装第三方后门工具来实现。

具有隐蔽性,能绕开系统日志,不易被系统管理员发现等特点。

Unix平台常用后门技术
增加超级用户账号
# echo "attacker:x:0:0::/:/bin/bash" >> /etc/passwd
# echo "attacker::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
如果系统不允许uid=0的用户远程登录,还需要增加一个普通用户账号。

破解、嗅探用户密码
获得shadow文件后,用John the Ripper工具破解薄弱的用户密码。

安装sniffit等嗅探工具,监听telnet、ftp等端口,收集用户密码。

在switch环境下通过中间人(Man-in-The-Middle)攻击也可以嗅探到数据包。

放置SUID Shell
# cp /bin/bash /dev/.rootshell
隐藏一个bash的副本
# chmod u+s /dev/.rootshell
给予这个副本S位权限
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。

rhosts+ +
# echo "+ +"> /.rhosts
# rsh–l root csh–i
远程可以得到一个root权限的shell。

利用系统服务程序
修改/etc/inetd.conf如添加:
“daytime stream tcpnowait/bin/sh sh –i“
用trojan程序替换in.telnetd、in.rexecd等inted的服务程序
伪造/bin/login程序,记录登陆的用户名和密码,并设定某些关键字饶过系统验证;
TCP/UDP/ICMP Shell
BindShell,大部分是基于TCP/UDP协议的网络服务程序,在高端口监听,很容易被发现。

Ping Backdoor,通过ICMP包激活后门,形成一个Shell通道。

后门服务端程序伪装成正常的系统程序运行,当收到特定的icmp包时就激活一个root权限的shell给入侵者。

TCP ACK数据包后门,能够穿越防火墙。

原理同Ping Backdoor,当入侵者发送特定ack包通过防火墙时,后门程序就会反连出一个root权限的shell,从而绕过防火墙保护。

Crontab定时任务
通过Crontab程序调度已安装的后门程序定时运行,一般在深夜时段,是系统管理员不在线的时间。

定时执行脚本很容易被入侵者嵌入后门程序。

共享库注射(injectso)
在共享库中嵌入后门函数使用后门口令激活Shell,获得权限能够躲避系统管理员对二进制文件本身的校验。

我们可以把实际操作分解成四步来分析:
1、调用ptrace()函数,关联系统进程;
2、查找dl_open()函数,此函数用来调用共享库;
3、修改dl_open()的函数EIP值,执行替换后的函数;
4、调用ptrace()函数,脱离系统进程;
通过注射操作使我们的.so共享库在指定的进程中被装载,这样再配合上函数重定向或其它技术,就可以捕获或改变目标进程的行为,可以做非常多的工作。

同其它inject技术相比,injectso的一些优点是:
1. 简单,仅仅通过C代码就可以完成所有的工作;
2. 扩展性好,在基础代码完成之后,如果要对程序功能进行增加、修改,仅需改动.so共享库即可;
3. 对目标进程进行注射之后,不需要留下磁盘文件,使用的程序及共享库都可以删除;
4. 我们可以使用它完成很多工作,例如:运行期补丁、后门程序等;
5. 目标服务不需要重新启动;
6. 无须改动二进制文件;
工具包、rootkit
包含一系列系统及后门工具:
清除日志中的登录记录
伪装MD5校验值
替换netstat、ps等常用工具
后门登录程序如login等
Unix平台的rookit大多针对较低发行版本,此类工具易于安装和使用,使用绝对干净的系统命令很容易发现并清除。

随着LKM技术的出现后门技术重心开始转移到LKM上了。

可加载内核模块(LKM)
LKM:Loadable Kernel Modules动态的内核加载模块,不需要重新编译内核,不需要替换系统命令,在内核级劫持系统调用,过滤指定的信息使正常用户无法掌握系统实际运行情况。

一般LKM后门实现以下功能:
1、隐藏目录、文件,躲避ls、find等系统命令
2、隐藏系统进程,针对ps、top等进程查看命令
3、隐藏网络连接,netstat命令无法检查到特定端口开放
4、隐藏S位Shell,ls –la命令看到只是普通的无S位文件
著名的LKM后门包有adore和knark。

后门的检测
以自己的经验,结合特定的工具,手工作一些检测。

使用md5校验、RPM或Tripwire来检查系统。

借助IDS系统,监听到目标机器的可疑网络连接。

检查系统密码文件
#ls –l /etc/passwd
查看文件修改的日期。

#awk –F: ’$3==0 {print }’ /etc/passwd
检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。

#awk –F: ’length()==0 {print }’ /etc/shadow
检查一下系统里有没有空口令帐户
检查系统进程
#ps –aef |grep inetd
查看inetd进程是否正常。

inetd是UNIX系统的守护进程,正常的inetd的pid 都比较靠前,如果你看到输出了一个类似inetd –s /tmp/.xxx之类的进程,着重看inetd –s后面的内容。

在正常情况下,UNIX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;如果你使用ps命令看到inetd启动了某个文件,而你自己又没有用inetd启动这个文件,那就说明已经有人入侵了该系统,并且以root权限起了一个简单的后门。

#ps –aef
查看系统内是否是./开头的进程或其他可疑进程,一旦发现异样的进程,经检查为入侵者留下的后门程序,立即运行#kill –9 pid 开杀死该进程,然后再运行ps -aef查看该进程是否被杀死;如果出现杀死以后又重新启动的现象,则证明系统被人放置了自动启动程序的脚本。

这个时候要进行仔细查找
检查系统守护进程
#grep –v “^#” /etc/inetd.conf
或者
#grep “disable” /etc/xinetd.d/*
查看当前守护进程列表。

这两条命令输出的信息就是你这台机器所开启的远程服务。

一般入侵者可以通过直接替换in.* 程序来创建一个后门,比如用/bin/sh 替换掉in.talkd,然后重新启动inetd服务,那么连到到服务器上talkd服务的所有用户将不用输入用户名和密码而直接获得一个rootshell。

检查网络连接和监听端口
#netstat –anp
列出本机所有的连接和监听的端口以及所关联的进程,查看有没有非法连接。

如netstat 没有-p参数可以用lsof代替。

#netstat –rn
查看本机的路由、网关设置是否正确。

#ifconfig –a
查看网卡设置。

检查系统日志
#last | more
查看在正常情况下登录到本机的所有用户的历史记录。

#cat /var/log/message* |grep syslog
查看系统syslog进程的情况,判断syslog上次启动的时间是否正常
#ls –al /var/log
检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常。

检查系统中的core文件
通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。

这种方式有一定的成功率,也就是说它并不能100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,
#find / -name core –exec ls –l {} \;
依据core所在的目录、查询core文件来判断是否有入侵行为。

检查文件系统中的S位文件
#find / -type f \( -perm -04000 -o -perm -02000 \) -print
查找硬盘上所有SUID、SGID的文件。

S位文件在系统中存在较大安全隐患,在系统应用允许的情况下应该去掉S位。

检查系统文件完整性
检查文件的完整性有多种方法,通常通过以下命令:
#ls –l 文件名
来查询和比较文件,这种方法比较简单在UNIX类平台具有一定的通用性。

#rpm –V `rpm -qf 文件名`
RPM的校验功能,检查结果是否正常来判断文件是否完整。

#md5sum 文件名
如果有正确的MD5散列值参照,也可以用md5来校验文件是否被改动。

#strings /bin/login
使用stings命令查看login程序是否正常,对所有可疑程序都可以利用stings 命令查看。

#ls /etc/rc.d/
查看系统启动脚本;
#/usr/bin/md5sum `find /etc/rc.d/ -type f` >> /tmp/md5.txt
保存启动目录脚本的MD5值,并备份到安全的地方
#cat /etc/crontab
查看系统计划任务设定;
#ls -la /etc/cron.*
查看具体计划任务细节;
#find / -name .rhosts -exec cat {} \;
#find / -name .rhosts -exec ls -la {} \;
查找硬盘上.rhosts文件,并显示其内容。

检查内核模块(LKM)后门
通过正常手段加载的LKM可以通过
#lsmod
命令查询,如果LKM后门通过隐藏手段加载,如:adore、knark等。

在lsmod 输出中无法显示后门模块,可以通过kstat这个第三方工具检测:#kstat
下载网址:/
技巧:大多数LKM后门系统重起后无法自动加载,所以在系统启动脚本中都会留下启动LKM的相关命令。

Unix系统日志审计功能
在Unix系统中,有三个主要的日志子系统。

连接时间日志
由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login
等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。

utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。

有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。

数据交换、关机和重起也记录在wtmp文件中。

所有的纪录都包含时间戳。

Accton记录进程统计
由系统内核执行。

当一个进程终止时,为每个进程往进程统计文件(pacct 或acct)中写一个纪录。

进程统计的目的是为系统中的基本服务提供命令使用统计。

UNIX可以跟踪每个用户运行的每条命令,如果想知道昨晚弄乱了哪些重要的文件,进程统计子系统可以告诉你。

它还对跟踪一个侵入者有帮助。

与连接时间日志不同,进程统计子系统缺省不激活,它必须启动。

在Unix系统中启动进程统计使用accton命令,必须用root身份来运行。

Accton命令的形式accton file,file必须先存在。

先使用touch命令来创建pacct文件:
#touch /var/log/pacct,
然后运行accton:
#accton /var/log/pacct。

一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。

若要关闭统计,可以使用不带任何参数的accton命令。

Accton可在安装光盘中找到:psacct-6.3.2-9.i386.rpm。

Syslogd记录错误日志
由syslogd(8)执行。

各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。

另外有许多UNIX程序创建日志。

像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。

Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf (配置文件),习惯上,多数syslog信息被写到/var/log目录下的信息文件中(messages.*)。

一个典型的syslog纪录包括生成程序的名字和一个文本信息。

它还包括一个设备和一个优先级范围(但不在日志中出现)。

本地日志记录方式
Syslog.conf文件指明syslogd程序纪录日志的行为,该程序在启动时查询配置文件。

该文件由不同程序或消息分类的单个条目组成,每个占一行。

对每类消息提供一个选择域和一个动作域。

这些域由tab隔开:选择域指明消息的类型和优先级;动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。

每个选项是由设备和优先级组成。

当指明一个优先级时,syslogd将纪录一个拥有相同或更高优先级的消息。

所以如果指明"crit",那所有标为crit、alert和emerg的消息将被纪录。

每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。

例如,如果想把所有邮件消息纪录到一个文件中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
如果服务器上或网络中的其它服务器上已经安装了打印机,就可以把重要的日志文件打印出来。

这要求有一个可以连续打印的打印机,并用syslog把所有重要的日志文件传到“/dev/lp0”(打印设备)。

黑客可以改变服务器上的文件、程序,等等,但是,把重要的日志文件打印出来之后,他就无能为力了。

例如:记录下服务器上所有的telnet、mail、引导信息和ssh连接,并打印到连接在这台服务器上的打印机。

需要在“/etc/syslog.conf”文件中加入一行。

编辑syslog.conf文件(vi /etc/syslog.conf),在文件末尾加入下面这一行:
authpriv.*;mail.*;local7.*;auth.*; /dev/lp0
重新启动syslog daemon使改动生效。

远程日志记录方式
因为syslog daemon的默认配置是拒绝接收来自网络上的信息,我们必须使它能够接收来自网络上的信息,在syslog daemon的脚本文件(指的是接收日志文件的服务器上的脚本文件)中加入下面的“-r”参数编辑syslogd脚本文件(vi /etc/rc.d/init.d/syslog),把这一行:
SYSLOGD_OPTIONS="-m 0"
改为:
SYSLOGD_OPTIONS="-r -m 0"
重新启动syslog daemon使改动生效。

编辑一下发送日志文件的服务器上的“syslog.conf”文件(vi /etc/syslog.conf),在末尾加上这一行:
authpriv.*;mail.*;local7.*;auth.*; @logserver “logserver”是接收日志文件的计算机主机名。

如果有人已经攻击你的计算机并且有可能把所有重要的系统日志文件都删掉,这都没有关系,因为你已经在别的计算机内还有一个拷贝。

这样就可以根据这些日志文件分析出黑客在什么地方,然后处理这次入侵事件。

重新启动syslog daemon,使改变生效。

相关文档
最新文档