主要是从系统转移/proc/kmem或/proc/kcore文件,该文件以非连续方式包含系统RAM的内容。
}
============
检查系统日志
============
UNIX有很多日志,这些为应急响应提供重要的线索。日志文件大多位于公用目录,通常是/var/log,或/usr/adm,/var/adm,
有些日志位于禁止访问的/etc目录。具体请参考当前操作体系统文档。
其中syslogd守护进程提供非常强大的日志功能,比如装载一个内核模块的登记,其配置文件为/etc/syslog.conf,
通常它提供的最有用的日志是:messages,secure,syslog.在syslog.conf中每一行含有三个字段:
facility字段表示产生该日志文件的子系统;priority字段表明事件的严重级别;
action字段表明如何记录日志,它提供了远程网络记录的能力。
TCP wrapper日志也利用syslog记录,其中可能会有telnet,ssh,ftp等远程登录的信息。这些日志中有很多有价值的条目:
尝试登陆的时间日期,主机名称,访问的服务类型,以及源IP地址。
其他的网络日志比如,web,ftp,sql通常自身都提供了较为详细的信息。Apache默认日志在/usr/local/apache/logs,
最有用的日志是access_log,还有ssl_request_log,ssl_engine_log也能提供有价值的信息。其中可能包含攻击前的扫描记录。
Su命令日志,记录了每一次执行su命令的动作:时间日期,成功与否,终端设备,用户ID.有些UNIX具有单独的su日志,
有些则保存在syslog中。
登陆用户日志:utmp或wtmp文件保存了有关当前登陆到系统的用户的信息。此文件根据各UNIX版本的不同,
名称及存储位置有所差异。保存的基本信息是用户名,用于登陆的终端以及登陆的时间。文件以二进制格式存储。
查询utmp,wtmp文件应使用适当的客户端,如w,who,finger,last.检索成功,失败与用户名未知的登陆条目。
Cron日志记录了定时作业的内容,通常在/var/log/cron或默认日志目录中一个称为cron的文件里。
进程记账,如果系统存在acct或pacct日志文件,则可使用lastcomm或acctcom命令查看。该日志为二进制文件。
Shell历史记录:
[root@ay4z3ro foo]# less ~/.bash_history
如果.bash_history被链接到/dev/null文件,或者环境变量中的$HISTFILE,$HISTFILESIZE两个变量值为0,那么肯定有人非法活动过了。
大多数入侵者都会修改或删除日志,虽然理论上能够做到除种植lkm rootkit之外几乎不留任何痕迹,但在实际入侵中,
善后工作实际上是个不小的工程,不仅依赖入侵者对系统的熟知程度,而且当处理过多繁琐的内容时,疏忽很容易出现。比如:刚得到
rootshell时unset HISTFILESIZE,退出时忘了复原,留下一条痕迹。诸如此类的例子还有很多,日志清除工具是死的,它只会清除预定义的
项目,虽然你也能修改源码,但那样还是不能随机应变。最保险的方法就是手工劳动,这样就加大了入侵者的负担。出于懒惰,
对系统掌握程度不够或是各种各样的原因往往还是会留下一些对我们有价值的东西。所以,检查日志对应急响应来说非常重要。
==============
执行关键字搜索
==============
无论是对何种操作系统进行应急响应,关键字搜索都是该过程的一部分。针对某个具体事件,可能会有一些ID,phrase与此事件密切相关,
执行关键字搜索可以找到更多的信息。关键字可以是很长的ASCII字符串,包括攻击者后门密码,用户名,MAC地址或IP.
例:搜索整个文件系统中包含”ay4z3ro”字符串大小写形式的所有文件:
[root@ay4z3ro foo]# grep –r –i ay4z3ro /
strings命令用于显示文件中的可打印字符,例如:srings /bin/login用于显示login后门中的密码(未加密的明文,编码或加密后的散列)。
Find命令用于寻找匹配常规表达式的任何文件名。例:
在整个文件系统中搜索名为”…”的文件或目录:
[root@ay4z3ro foo]# find / -name “\.\.\.” –print
此外find命令可以匹配的特征还包括:修改访问时间,文件所有者,文件内的字符串,文件名的字符串等。
Find命令的-exec选项与grep,strings结合使用体现了unix的天才气质,那样干起活来非常方便。
================
确定突发事件时间
================
*如果有IDS,确保IDS系统时间与受害系统时间一致。
*检索系统中突发事件前后创建和被改动的文件,可能会有惊喜地发现。
======================
恢复被删除的文件和数据
======================
这个过程需要操作者对unix/linux文件系统的体系结构有所了解,这里并不打算去介绍文件系统的数据结构及其代码的实现,
而是简单的说明一下,删除一个文件其实只是将inode节点的部分数据和指针置0,在下次数据覆盖以前并没有将节点指向的
数据块的内容删除。要想恢复删除的文件,需要使用inode节点的信息重建文件大小和数据块列表。
找到文件节点信息:
[root@ay4z3ro foo]# ls –i /tmp/x.d
82241 /tmp/x.d
表明/tmp/x.d位于82241节点。
TCT(The Coroner’s Toolkit)是一个非常有用的工具包,其中的icat可以查看指定节点上文件的全部内容。
[root@ay4z3ro TCT]# ./icat /dev/hda5 82241
如果程序还在运行,可以使用lsof命令引用NODE栏查找节点信息。
恢复一个文件只需要:
[root@ay4z3ro TCT]# ./icat /dev/hda5 NODE > some.recovery
TCT中还有很多有用的工具,例:
[root@ay4z3ro TCT]# ./ils –A /dev/hda5 | grep “|501|”
以上命令行找出与UID=501用户有关的所有被删除的文件。
TCT链接:http://www.fish.com/forensics/
============
检查特殊文件
============
SUID和SGID文件:
---------------
[root@ay4z3ro /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}
从中查找那些原本不含有S位的,不寻常的或是被放在一个奇怪地方的S位程序。把/bin/ksh改名后放在/tmp(777)目录下就是一种后门。
不常用的和隐藏的文件及目录:
---------------------------
UNIX系统中以”.”开头的文件都是隐藏的,如果ls不加”-a”参数就不会出现在文件列表里,攻击者经常利用的还有:”…”。
用隐藏字符对目录进行重命名是一种黑客技巧,比如有的文件名是这样的:”..^T”,”… “(注意三个点后面有个空格)……
这可以欺骗很多系统管理员。
怎么办呢?如下:
[root@ay4z3ro foo]# ls –al “| cat –tve”
cat命令的参数让其显示非打印字符,显示制表符并在每个结尾放置一个$,所以以上目录会显示为:”..^T$”,”… $”。
要进入前一个目录在T之前按下CTRL+V,而不是用^符号,进入后一个目录则是:[root@ay4z3ro foo]# cd “… “
配置文件:
---------
一个攻击者如果拥有相当熟练的系统管理技能,偷梁换柱,在配置文件中做点手脚是很轻而易举的事。
比如修改或添加/etc/services,/etc/inetd.conf,不过对于熟练的系统管理员来说,这样的后门很容易发现。
还有就是某些exploit的副产品,比如那个Solaris2.6的Sadmind RPC远程溢出,默认的攻击程序就是溢出后在/etc/inetd.conf
添加一句伪造ingreslock服务把/bin/sh绑定在1524端口。水平差的攻击者通常不会注意这个问题。
启动文件:
----------
上面的inetd.conf就是这类文件,除此之外还有cron文件,目录/var/spool/cron,/usr/spool/cron用来为不同用户保存cron作业。
该目录中的文件以用户帐号命名,并且其中的任务以该用户特权运行。此目录下的root文件应该是我们关注的。
有人喜欢在半夜启动木马运行一个bindshell,然后过几个小时又把开放的端口关闭。
/etc/rc*是开机自动运行脚本,也经常被攻击者利用。
剩下的还有用户启动文件,如login,profile, .bashrc, .cshrc, .exrc可能被插入特洛伊语句,在www.apache.org被入侵
的事件中就曾被利用过。
/tmp目录:
-------------
/tmp目录的权限默认是777,这是攻击者经常利用的地方,很多黑客工具也利用此目录存储中间文件,如果攻击者不小心,
就会在此留下尾巴。
================
检查用户帐号和组
================
有些账号是为系统而设,本来没有shell,也不能登陆,攻击者可能会利用这点。刚学习UNIX入侵没多久的人可能会这样:
echo “aya:x:0:0:intruder!!:/:/bin/sh”>>/etc/passwd,更有可怜的家伙因为少了一个”>”而破坏了passwd文件,
弄得自己都无法登陆?,真见过这样的家伙,说实话我自己也干过,不过是发生在自己的Linux上,所以没有铸成大错。
老练的不会这样做,他们可能会从一堆用户中挑出一个不起眼的,然后占为己有,远程合法登录取得shell后本地再升级为root.
我相信这个问题对我们来说很好解决。
============
识别非法进程
============