UNIX应急响应攻略

上一篇 / 下一篇  2006-02-14 14:34:36 / 天气: Array / 个人分类:其他

/*<<黑客防线>>2003/12上的策略篇是该文的简易缩略版,以下为完整版*/
GrLC*i7b \.o0木铎校园 BBS 社区P2^;T"C,R7eE)`
★UNIX应急响应攻略
'V$])NOrW/v u6I)?0
4Vm0Q[!gXn0*******************************木铎校园 BBS 社区;X[.rToE
*author:ayazero               *
8_eTG(u3H:u0*mail:drdos@163.com           *
Kw+LWR`0*homepage:overflow.nease.net  *
(O/WY@.Im0*team:www.ph4nt0m.net         *木铎校园 BBS 社区\'ciFw1w0mJRC
*******************************
ou],eY0
i5C8Fd@)S0Last update 2004/05/28木铎校园 BBS 社区 ApDEO4G
木铎校园 BBS 社区]K&@ FV8N/S"l
应急响应有一半是非技术的内容,制定一个合理的响应策略是至关重要的!
"e y Cp!L0记住:现在开始对受害系统的每一步操作都可能改变已存在的证据或是导致敏感信息的丢失!木铎校园 BBS 社区uy)ZAt

f1?&_YBL]VW9W0{{初始响应}}
&QL\w1V r0木铎校园 BBS 社区 _O yGU t{
目标:在进行司法鉴定复制之前获得系统中的易失数据,初步确定突发事件概况。
#[~(^y'Sg x0木铎校园 BBS 社区An2T ^'F
==============木铎校园 BBS 社区7O6B#~El'cq
创建响应工具包
o!}6e[0?5e,l.eW0==============木铎校园 BBS 社区!C/P5l"J)Z4I_9@+is
我们调查系统,必须以高度可信赖的程序执行命令,再加上备份与修复,创建一个工具包是很有必要的。木铎校园 BBS 社区)C/Z(c)yI:qSC%D
即使在非UNIX/LINUX系统上,创建工具包也应该作为响应的第一步。木铎校园 BBS 社区A s$W ~"Jy
首先,我们需要在对应体系结构的系统上编译响应期间需要的工具,且编译程序需要考虑系统兼容的问题。木铎校园 BBS 社区h8P&~w$p"hm
通常我们需要如下的工具:
SUk6?)V5GhZFU)D0ls dd des file pkginfo
6~@a Au8@ ^,V0find icat lsof md5sum nc
l/eo}!cNR_gs3{4{;v0netstat pcat perl ps strace木铎校园 BBS 社区6nIM`@9c
strings truss df vi 木铎校园 BBS 社区t#D$[l4s;^
cat kstat ifconfig chkrootkit
kIMiO&b-w0more gzip  last  w rm木铎校园 BBS 社区pyO'Os3k"{ t
script  bash  modinfo  lsmod  木铎校园 BBS 社区5Y3sM ~LT+~{
读者可根据自己的需要自行添加,但是一个工具包通常只能用来完成对某一特定平台的工作,
&D)K gp*Hr#lI,J3y-o0把对多个平台编译的工具放进同一个工具包反而会显得紊乱。木铎校园 BBS 社区H8n{9df.B8k#o
在Linux上创建响应工具包时,可以用gcc的–static参数编译源代码,或者用ldd检查动态连接库,
%oz P$Y1]LV0在响应工具包存储介质上建立库文件目录,并拷贝所有工具需要的动态连接库的副本,最后设置环境变量。木铎校园 BBS 社区I N(D2Z$e_zG"s0J
这个过程有点类似于创建一个Linux的优盘启动盘。木铎校园 BBS 社区ve)m1^$q(X

.fU6tk x;e0============木铎校园 BBS 社区n#\G6gP
获取易失数据木铎校园 BBS 社区@;`3Dr E
============
*z#g/lXU#KV0易失的数据包括:当前打开的套接字,进程列表,RAM内容,非链接文件的位置。木铎校园 BBS 社区.L6}x6z+\J
*unix特性: unix允许进程正在执行时将其删除!木铎校园 BBS 社区f&m xw\
非链接文件是访问该文件的进程中止时被标记为删除的文件。当系统关闭时(正常关机或突然断电非正常关机),
#b mNJw#q Mq0标记为删除的文件都将消失。因此在找到被标记为删除的文件之前不能关机!
&Ew zu'TM^H0
%t5^2}!_c5wG JK0=================
F(uEYNi*D0执行可信赖的shell
/ELD ?5cn1BmM&]0=================
#f` TM6~!P!x0使用我们自己准备的响应工具包,装载该介质的文件系统,
+[,` C7D0_)p!m q8\0mount –t auto /dev/sda1 /mnt/usb 或木铎校园 BBS 社区T:s|`,Q D
mount –t iso9660 /dev/cdrom /mnt/cdrom木铎校园 BBS 社区bRwT'`4pt
按下Ctrl+Alt+F1~F6,从控制台以root身份登陆。木铎校园 BBS 社区yk@]V1W?X5p
请一定要区分原环境变量中的命令和当前响应工具包的相同名字的命令集,防止潜在的二进制特洛伊木马攻击。木铎校园 BBS 社区]US m;H

-p'c5sy {(?0==================
+O7HX"bB.?0查看登陆系统的用户木铎校园 BBS 社区OKzd9Ix
==================
/uB3J%`N7z.G~K0[root@ay4z3ro foo]#  w木铎校园 BBS 社区iW W(L[_5u*q"h7ID
19:50:48 up 43 min,  2 users,  load average: 0.00, 0.00, 0.00木铎校园 BBS 社区6TJ gd0P4xI/z
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
s!|~zb"q U _5H)z0root     :0        19:08   ?xdm?  11.10s  0.43s gnome-session
}KR'o f1@4E0root     pts/0     19:08    1.00s  0.21s  0.01s w
2@kg;k(c0输出标题行显示了当前系统时间,该系统已运行的时间,当前登陆用户数,最近1分钟,5分钟和15分钟内的平均系统负载。
^+sV;f#w tW0USER字段显示当前登陆的用户名。TTY字段显示了会话的控制终端,tty表示从控制台登陆,pts/typ则可以表示通过一个网络连接,木铎校园 BBS 社区2r%XM?Za
因为X是个C/S模式的应用程序,所以我在GNOME下开的shell窗口显示为pts。如果不从本地登陆,输出中还有FROM字段,
:lt*F&CL._:?0表示建立会话的源地址的域名或IP。LOGIN@显示该连接的本地开始时间。IDLE字段显示了自上一个进程运行以来的时间长度。
Few'];[ f@0JCPU显示与tty或pts关联的全部进程所使用的时间。PCPU字段显示了WHAT列中当前进程所使用的CPU时间。WHAT列显示用户当前运行的进程。
&pqi%L [bS a([U0木铎校园 BBS 社区wTGx0ms+ej)j
================
.];t:wI9M/`h0查看系统进程列表
Ux.EQ:Rc#P h0================
D k:Aas%d4f/MO0H0Solaris中使用ps –eaf,而在FreeBSD和Linux中则使用ps –aux.
;i,\r gq q8V0[root@ay4z3ro foo]# ps aux
Z [)xh7m0USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND木铎校园 BBS 社区fAg\I6WT%q
root         1  0.1  0.2  1356  496 ?        S    19:07   0:04 init木铎校园 BBS 社区}d$L"X.^5[s1w
root         2  0.0  0.0     0    0 ?        SW   19:07   0:00 [keventd]木铎校园 BBS 社区&OzpF1z0ix.D.B
root         3  0.0  0.0     0    0 ?        SWN  19:07   0:00 [ksoftirqd_CPU0]
q:L%V!G|}@_0root         4  0.0  0.0     0    0 ?        SW   19:07   0:00 [kswapd]木铎校园 BBS 社区 [ fM[8m'Q
root         5  0.0  0.0     0    0 ?        SW   19:07   0:00 [bdflush]
&I*uVq L!eL0root         6  0.0  0.0     0    0 ?        SW   19:07   0:00 [kupdated]木铎校园 BBS 社区(JCA+Yr)lsR
root         7  0.0  0.0     0    0 ?        SW<  19:07   0:00 [mdrecoveryd]木铎校园 BBS 社区 m rD\/w"K0L3_
root        11  0.0  0.0     0    0 ?        SW   19:07   0:00 [kjournald]木铎校园 BBS 社区 V$Ra7Y)afL
root       114  0.0  0.5  2108 1304 ?        S    19:07   0:00 devfsd /dev
y[a,\3x!P0root       209  0.0  0.0     0    0 ?        SW   19:07   0:00 [khubd]木铎校园 BBS 社区 r8U'f+g.`&xdb}/T
root       338  0.0  0.0     0    0 ?        SW   19:07   0:00 [kjournald]
z^QF-V0rpc        620  0.0  0.2  1496  520 ?        S    19:07   0:00 [portmap]木铎校园 BBS 社区)n5v&nuLgGHgc`&Q:^
root       636  0.0  0.2  1452  624 ?        S    19:07   0:00 syslogd -m 0
8F S6BM0j:[H `8zz E.v5M0…………………(以下省略)木铎校园 BBS 社区-z{?]-]*j@
Ps命令输出中的START字段显示了程序开始运行的时间,对于查出攻击时间很有帮助。有时仅通过时间就能识别可疑进程。木铎校园 BBS 社区d+h N.rL
Linux下还可以通过strings –f  /proc/[0-9]*/cmdline来查看系统中运行进程的完整命令行参数,但是这个并不完全可信。
7\A,ot @6nJK Obn0因为攻击者甚至不需要插入内核模块,而只在应用层的编码中加入语句就能欺骗我们。
im5NBIM"O0木铎校园 BBS 社区6~5s:M-P{Da)Qb4h[
===============
3?-M(Fj5c~8xZhI0检测LKM Rootkit
b){"LFy3f&A-f:w0===============木铎校园 BBS 社区^5T6f;^J*o"\
   内核模块后门,还有什么比这个更臭屁的呢?Solaris,Linux和几乎所有的UNIX都支持LKM(Loadable Kernel Modules),木铎校园 BBS 社区P1F K9X[fT
用普通的方法无法检测其存在,这给应急响应带来了极大的挑战性。对于我们来说,解决的办法是找到那些lkm rootkit,木铎校园 BBS 社区sP0x#t \)x"J4SM
并熟悉,解剖他们。有时lkm rootkit虽然被成功装载,但在系统的某些细节上会出现“异常”,甚至可能使系统在运行一段时间后彻底崩溃。木铎校园 BBS 社区zX1PJ%T%n b [6z
还有,lkm虽然活动在ring0核心态,但是攻击者往往会在系统的某处留下痕迹,比如攻击者为了让系统每次关闭或重启后能自动装入他安置的
/D!]aqt:c{ |6A0内核后门,可能会改写/etc/modules.conf或/etc/rc.local.
l^1_{X4j@1s I7t2a,A0kstat/ksec是检测lkm非常方便的工具,前者用于Linux,后者用于*BSD.木铎校园 BBS 社区 Q4H O^ B6ep9u
[root@ay4z3ro kstat]# ./kstat
r-Fx,} ] K$c6a%O4NMJB0木铎校园 BBS 社区+x?5j:Fej"B ] `R
Usage: ./kstat [-i iff] [-P] [-p pid] [-M] [-m addr] [-s]木铎校园 BBS 社区4?] UEbY0e+v q,G#D
-i      iff may be specified as 'all' or as name (e.g. eth0)
e0yTVK Pa)wG \0        displays info about the queried interface
3sf8a#f1~\`5p` a0-P      displays all processes木铎校园 BBS 社区9K3p;l+Y,^ @y6pv
-p      pid is the process id of the queried task木铎校园 BBS 社区\\{| V t B2yt
-M      displays the kernel's LKMs' linked list
"O,m)[c d!xL!W6]0-m      addr is the hex address of the queried module木铎校园 BBS 社区;Z N8{ @dY
       displays info about the module to be found at addr
4ih4r/Ft,h9`0-s      displays info about the system calls' table
Dt s-R~Kthd-c0其中-s参数最有用,它显示了系统调用入口的信息,能检测市面上最流行的knark和adore这两个内核后门,
;^sU-z_4FN/DE]0但理论上他并不能检测出所有的lkm rootkit.木铎校园 BBS 社区:E,u _iRj7B[%N
Kstat/ksec站点:http://www.s0ftpj.org木铎校园 BBS 社区d_N"K}8MW^
其实熟悉内核攻击的人都知道Kstat单纯检查sys_call_table[]的方式如今已经
8}!W.x!mb9vaC!P0被攻击的一方完全超越,e4gle很早也写过这类文章。
](A7d4KQ`*q_0有兴趣可以看看2002焦点峰会jbtzhm的《内核后门实现及其检测》
'al/lOp1[/g0现在linuxforum安全版版主madsys在Phrack61上有篇文章:
X2In/rD|%N7j0Finding hidden kernel modules (the extrem way)--链接: 木铎校园 BBS 社区(Ml}OAe
http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=security&Number=434871&page=0&view=collapsed&sb=5&o=all&fpart= 木铎校园 BBS 社区[)?|jeyx Yr

T7V.y%F8@G}}0木铎校园 BBS 社区%m Su9z:We6oy(w
======================
/c7IUs(Sc0检测开放端口和关联进程木铎校园 BBS 社区{3F6c S3R/D Wa!GW.r
======================木铎校园 BBS 社区a)Zi-M|b L yN
[root@ay4z3ro foo]# netstat –anp木铎校园 BBS 社区jh`._X6T u+LK
Active Internet connections (servers and established)木铎校园 BBS 社区y:cS)E0V
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   木铎校园 BBS 社区4E#{$E/c a)E&ZXv6j}At(]/L
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      620/                木铎校园 BBS 社区5[RV9tx
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      908/X              
.bUDhVd0tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      880/sshd            
Z.O"f,X;Z0udp        0      0 0.0.0.0:111             0.0.0.0:*                           620/                
'fw)j`p#J%o0Active UNIX domain sockets (servers and established)
S$t6^sn\ LB!H0Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path木铎校园 BBS 社区 jZ5~uJ(O?
unix  2      [ ACC ]     STREAM     LISTENING     2753   756/                /tmp/.font-unix/fs-1
$p$e*Z-Wb _B0……(以下省略)
K.R5Wq1`D sA.i$_e3}0在Solaris,HP-UX,AIX,FreeBSD,Linux上可以使用lsof工具列举所有运行进程及其所打开的文件描述符,其中包括常规文件,
l%T1l\"M j1k9C:B0库文件,目录,UNIX流,套接字等。如果只想显示网络套接字的进程:木铎校园 BBS 社区@XzO4oZF,z
[root@ay4z3ro foo]# lsof –i木铎校园 BBS 社区/__G8V(K!f
COMMAND PID USER   FD   TYPE DEVICE SIZE NODE NAME
b6qa%J,W}0portmap 620  rpc    3u  IPv4   2598       UDP *:sunrpc
H7q'a6rE9C0portmap 620  rpc    4u  IPv4   2609       TCP *:sunrpc (LISTEN)
k3uj| E#p:_5M$yP[0sshd    880 root    3u  IPv4   2885       TCP *:ssh (LISTEN)木铎校园 BBS 社区'qr ^H3[ @!f4W
X       908 root    1u  IPv4   2945       TCP *:x11 (LISTEN)木铎校园 BBS 社区C(t:md{4t0e nUC

"\I`?Q/QH0其中特别需要注意的是奇怪的进程和已打开的原始套接字。
)l%}A L(Y*l~4t0
B#q.wjK8Zl^y@0================================木铎校园 BBS 社区E`0EUk
寻找系统中是否运行一个非法嗅探器
Pj!?&A?2`'Ozy0================================
]F(P Y;WB-h0为了达到这个目的,我们需要检查网卡是否处于混杂(promiscuous)模式:木铎校园 BBS 社区HeO_YB_j-i#wE&M]
[root@ay4z3ro foo]# ifconfig –i eth0 | grep PROMISC木铎校园 BBS 社区,w RhQx`0{eN
PROMISC标志并不会在所有的*NIX上出现,通过lsof+ps命令可以判断系统是否正运行一个嗅探器。或者通过第三方的工具,比如AntiSniff。木铎校园 BBS 社区-^@)W%rQ9m`

Tb/cW(x3^LH'r([0=================木铎校园 BBS 社区3Kn_i+C,}
检查/proc文件系统
6J B#Qx#JLv1sg6`0=================木铎校园 BBS 社区6eW5F$M(V
在/proc/$PID/目录下对于调查比较有意义的是:exe链接,fd子目录,cmdline文件。
^ |0p'sJ(F q0[root@ay4z3ro 880]# ls -al
zt%kA.p F ]0total 0木铎校园 BBS 社区6o6_EA1]!d
dr-xr-xr-x    3 root     root            0 Sep 20 19:53 ./
!C$B'MC(o!b0G0dr-xr-xr-x   62 root     root            0 Sep 20 15:07 ../
&R~!e?N(Q`'Ns0-r--r--r--    1 root     root            0 Sep 20 19:54 binfmt木铎校园 BBS 社区^d0O0u[9N*Q4IY
-r--r--r--    1 root     root            0 Sep 20 19:54 cmdline木铎校园 BBS 社区 b,p"i2g2Z:X?O.y.Ib
lrwxrwxrwx    1 root     root            0 Sep 20 19:54 cwd -> //
OS [,z9WV5ak o0-r--------    1 root     root            0 Sep 20 19:54 environ
^#o C)QQ0lrwxrwxrwx    1 root     root            0 Sep 20 19:54 exe -> /usr/sbin/sshd*
'sR'w2] b5k K D9F0dr-x------    2 root     root            0 Sep 20 19:54 fd/
C*A9KDtq|/k0-r--r--r--    1 root     root            0 Sep 20 19:54 maps木铎校园 BBS 社区)W9`7I4_|+C.J5a9q0J
-rw-------    1 root     root            0 Sep 20 19:54 mem木铎校园 BBS 社区n\)sw8l4rqef Q
-r--r--r--    1 root     root            0 Sep 20 19:54 mounts
x"]:LXu(un0lrwxrwxrwx    1 root     root            0 Sep 20 19:54 root -> //木铎校园 BBS 社区 J!s6R$MO+s @[_U
-r--r--r--    1 root     root            0 Sep 20 19:54 stat木铎校园 BBS 社区7z/];?G1i
-r--r--r--    1 root     root            0 Sep 20 19:54 statm木铎校园 BBS 社区A3@c UZ${f!P^
-r--r--r--    1 root     root            0 Sep 20 19:54 status木铎校园 BBS 社区iW@i{f
木铎校园 BBS 社区)H+E4@.Y)Fw
Exe链接允许我们恢复被删除的文件,只要这些文件仍然运行。为获得“已删除”可执行文件的备份,只需要使用cp命令在该文件系统上
@(QY@W)A0创建一个拷贝就行。通过检查fd子目录,可以识别该进程打开的所有文件。如果对unix环境下的编程有所了解的话,很容易就能发现木铎校园 BBS 社区 aTRPbDN*v
是在读写一个文件还是打开一个网络连接。cmdline文件的内容是该进程的完整命令行。以下语句是攻击者的欺骗手段,木铎校园 BBS 社区'saa T#n@cH7\%b
strcpy(argv[0],”any_string”);木铎校园 BBS 社区'~Z L'Pc X
这样该文件就显示了一种假象,即使如此,我们仍有必要检查此文件。木铎校园 BBS 社区G,]3o1]4k2y3@f4?+a
木铎校园 BBS 社区xpq/X5da
==================================
!u*a!Q+V/W8n0获取所有文件的创建,修改和访问时间木铎校园 BBS 社区4s i4i"n'K
==================================木铎校园 BBS 社区O/] \ u3o z!FU(g
ls –alRu > /mnt/usb/access
CH ]$]R$D1ML8Z0ls –alRc > /mnt/usb/modification木铎校园 BBS 社区zj8vT0{S
ls –alR > /mnt/usb/creation木铎校园 BBS 社区&cv1fh%c

lihCc1|nA0============
0FM;u_ kYDz!s0获取系统日志木铎校园 BBS 社区0z9DJ#d?+I|g6a-C9Mj|
============
2r e w ]i0大多数UNIX的日志在/var/log和/var/adm目录下,各种UNIX派生系统日志的具体位置有所不同。木铎校园 BBS 社区@gf!RJg
在此之前,有必要了解针对特定系统的日志存贮位置。木铎校园 BBS 社区A(A@$Vq!v
比较重要的二进制日志文件:木铎校园 BBS 社区6V Z1G7oKs4`Wg
utmp,用w工具访问;木铎校园 BBS 社区[D bH a|f0i
wtmp,用last工具访问;木铎校园 BBS 社区5a,G8I$e@'W
lastlog,用lastlog工具访问;
NV{:l3f1B9q0 进程记账日志,用astcomm工具访问
6e i{H~m0 常见的ASCII文本日志文件:木铎校园 BBS 社区9gB-@[e
apache日志--/var/log/httpd/access_log;
R&S#bm8X0y0 ftp日志—xferlog;
(o7O GpiCamu.B0 命令历史记录文件;
;Vhs2w*v_9G0 /var/log/messages;木铎校园 BBS 社区1i![)Lo`[!m/q{#u%u
检查/etc/syslog.conf以及其他守护进程的配置文件以确定其余日志的位置。木铎校园 BBS 社区p3o$b+P9mz(]

%m(h-X8|N lN"@c0================
\ ?fJM"LM4_-m0获取重要配置文件木铎校园 BBS 社区 k[ Xq:Hd3]*z
================
1u Yt-[+[1P:hp0 检查各配置文件查找后门位置,未授权的信任关系和未授权的用户ID。
E&K:d[{ am*m.h&nk0 /etc/passwd,查找未授权的用户帐号和权限。初级的入侵者会添加uid=0的用户,
([fe;jhWX0有人也会把系统中一个不起眼的原本没有shell的普通账户改成可登陆获得shell执行命令,木铎校园 BBS 社区-r]'i)b0E v
然后他可以通过一个suid位的ksh或其他的安置在本地的后门马上得到rootshell.
.K/ak$dq IL9~%W0 /etc/shadow,确保每个用户都有密码认证;当然攻击者给自己的账户加一个md5 hash其实也是非常简单的事。
v#@REA _)D;p0 /etc/groups,查找权限的升级和访问范围的扩大。木铎校园 BBS 社区+VS7C9XB[`(G
/etc/hosts,列出本地DNS条目。木铎校园 BBS 社区\ ~k5Q(u*n\4S
/etc/hosts.equiv,检查信任关系。木铎校园 BBS 社区4a&_M xi P%f)I
~/.rhosts,检查基于用户的信任关系,”++”这种很滥的后门相信大家都知道。
al9C#v w?:Y3gi1Gx2A |0 /etc/hosts.allow && /etc/hosts.deny 检查tcpwrapper的规则。木铎校园 BBS 社区 @(l/c;a:YfoHd
/etc/rc*,检查启动文件。木铎校园 BBS 社区%Uh)j7t5V1X
Crontab文件,列出计划事件。
%`3QWeNIvc-X5U0 /etc/inetd.conf,列出端口所监听的服务。
b7]7W$@ Q9PfEf0木铎校园 BBS 社区s q[!UrJ8j
===========
*mjP7{ e'Y2l0转储系统RAM
f8XZ$`C0L/d0===========
V5L t.?y0主要是从系统转移/proc/kmem或/proc/kcore文件,该文件以非连续方式包含系统RAM的内容。木铎校园 BBS 社区1uKOQ^1d&Z5[?s7A3T
木铎校园 BBS 社区|]'V^6a"v7}
{{深入调查}}木铎校园 BBS 社区 ^.qA5|!|
木铎校园 BBS 社区*KPV']L-Cl8q]
============
0M&\ X+J Qj0检查系统日志
OBKk0e%G,z-m0============木铎校园 BBS 社区0V!RH9\9ZW0y+xe)a(wY
UNIX有很多日志,这些为应急响应提供重要的线索。日志文件大多位于公用目录,通常是/var/log,或/usr/adm,/var/adm,木铎校园 BBS 社区$ZSCv5t-|w1Lbt4C R
有些日志位于禁止访问的/etc目录。具体请参考当前操作体系统文档。
p P Jadt4m)Z0 其中syslogd守护进程提供非常强大的日志功能,比如装载一个内核模块的登记,其配置文件为/etc/syslog.conf,木铎校园 BBS 社区0^9lY[Qd
通常它提供的最有用的日志是:messages,secure,syslog.在syslog.conf中每一行含有三个字段:木铎校园 BBS 社区 bT`|;a
facility字段表示产生该日志文件的子系统;priority字段表明事件的严重级别;
ip6r%oN'n{&r(M'K0action字段表明如何记录日志,它提供了远程网络记录的能力。木铎校园 BBS 社区'b[ZZL/`~O`&n
TCP wrapper日志也利用syslog记录,其中可能会有telnet,ssh,ftp等远程登录的信息。这些日志中有很多有价值的条目:木铎校园 BBS 社区 v+`\ fp&`
尝试登陆的时间日期,主机名称,访问的服务类型,以及源IP地址。木铎校园 BBS 社区6]4`!~#[|,|imM
其他的网络日志比如,web,ftp,sql通常自身都提供了较为详细的信息。Apache默认日志在/usr/local/apache/logs,
M%H*L |I-d$zsMe0最有用的日志是access_log,还有ssl_request_log,ssl_engine_log也能提供有价值的信息。其中可能包含攻击前的扫描记录。木铎校园 BBS 社区#vT(q8o iZ0G
Su命令日志,记录了每一次执行su命令的动作:时间日期,成功与否,终端设备,用户ID.有些UNIX具有单独的su日志,
7s2AH$] D&CMcy3p0有些则保存在syslog中。
U6@*m.@ `,J:fXd)~0 登陆用户日志:utmp或wtmp文件保存了有关当前登陆到系统的用户的信息。此文件根据各UNIX版本的不同,
v p~x TJ!LP2jY0名称及存储位置有所差异。保存的基本信息是用户名,用于登陆的终端以及登陆的时间。文件以二进制格式存储。木铎校园 BBS 社区$^ PA+p$kSj`$ZU4E}
查询utmp,wtmp文件应使用适当的客户端,如w,who,finger,last.检索成功,失败与用户名未知的登陆条目。
!W$b d;yM2t8}(P0 Cron日志记录了定时作业的内容,通常在/var/log/cron或默认日志目录中一个称为cron的文件里。木铎校园 BBS 社区W*oj:[g$B K
进程记账,如果系统存在acct或pacct日志文件,则可使用lastcomm或acctcom命令查看。该日志为二进制文件。木铎校园 BBS 社区 n6`o5}m$\,I_
Shell历史记录:木铎校园 BBS 社区\j+B+w'T
[root@ay4z3ro foo]# less ~/.bash_history
4r2}t MM {Ecm0如果.bash_history被链接到/dev/null文件,或者环境变量中的$HISTFILE,$HISTFILESIZE两个变量值为0,那么肯定有人非法活动过了。
cn6QNEo;ae0 大多数入侵者都会修改或删除日志,虽然理论上能够做到除种植lkm rootkit之外几乎不留任何痕迹,但在实际入侵中,木铎校园 BBS 社区nB_J _m |
善后工作实际上是个不小的工程,不仅依赖入侵者对系统的熟知程度,而且当处理过多繁琐的内容时,疏忽很容易出现。比如:刚得到
KG,OX WZ id0rootshell时unset HISTFILESIZE,退出时忘了复原,留下一条痕迹。诸如此类的例子还有很多,日志清除工具是死的,它只会清除预定义的
q(}h+i;UqJ0项目,虽然你也能修改源码,但那样还是不能随机应变。最保险的方法就是手工劳动,这样就加大了入侵者的负担。出于懒惰,木铎校园 BBS 社区 U}wW0p,W
对系统掌握程度不够或是各种各样的原因往往还是会留下一些对我们有价值的东西。所以,检查日志对应急响应来说非常重要。
i4YQAT^0木铎校园 BBS 社区 tJ;@f'B8^/Hv
==============木铎校园 BBS 社区+nE@&A+e6v
执行关键字搜索
?Rz m|9h@e SN0==============
$~)l1eid Y0无论是对何种操作系统进行应急响应,关键字搜索都是该过程的一部分。针对某个具体事件,可能会有一些ID,phrase与此事件密切相关,
,? c9i[K1yH D/e,OH0执行关键字搜索可以找到更多的信息。关键字可以是很长的ASCII字符串,包括攻击者后门密码,用户名,MAC地址或IP.木铎校园 BBS 社区;p onI2O
例:搜索整个文件系统中包含”ay4z3ro”字符串大小写形式的所有文件:木铎校园 BBS 社区fZ#BC(s(X6v
[root@ay4z3ro foo]# grep –r –i ay4z3ro /木铎校园 BBS 社区6s$\I\1cs+}
strings命令用于显示文件中的可打印字符,例如:srings /bin/login用于显示login后门中的密码(未加密的明文,编码或加密后的散列)。木铎校园 BBS 社区s&I.y0E8mA9}
Find命令用于寻找匹配常规表达式的任何文件名。例:木铎校园 BBS 社区 Zn-Rw4oR
在整个文件系统中搜索名为”…”的文件或目录:木铎校园 BBS 社区`~#Va7H
[root@ay4z3ro foo]# find / -name “\.\.\.” –print
~AfW;?-k_ ^L_0此外find命令可以匹配的特征还包括:修改访问时间,文件所有者,文件内的字符串,文件名的字符串等。
J!Sw/a!h0Find命令的-exec选项与grep,strings结合使用体现了unix的天才气质,那样干起活来非常方便。
5o'U)ks GJk1s@0
%kt:@C%H9I2]H0================木铎校园 BBS 社区L e4r4u&k2` LS
确定突发事件时间
zeqWT#FP0================
w3]1}mE Xx0*如果有IDS,确保IDS系统时间与受害系统时间一致。
^.j {s S MlC-o0B0*检索系统中突发事件前后创建和被改动的文件,可能会有惊喜地发现。
&}v1UE%W:x&j.G*Aq0
X ^R4i${{l0======================木铎校园 BBS 社区QUgVRp?
恢复被删除的文件和数据
}wtG!l0======================
"d DJza.M9r9R0这个过程需要操作者对unix/linux文件系统的体系结构有所了解,这里并不打算去介绍文件系统的数据结构及其代码的实现,木铎校园 BBS 社区[P6Xj:o0T
而是简单的说明一下,删除一个文件其实只是将inode节点的部分数据和指针置0,在下次数据覆盖以前并没有将节点指向的木铎校园 BBS 社区#f6m"gB]l'h%{P9}
数据块的内容删除。要想恢复删除的文件,需要使用inode节点的信息重建文件大小和数据块列表。
rA}?%]C0p0~0找到文件节点信息:
Y-l L&@q0E-a0[root@ay4z3ro foo]# ls –i /tmp/x.d木铎校园 BBS 社区%HjOC!k9s'[Z]P
82241 /tmp/x.d
G k9v},Gi0表明/tmp/x.d位于82241节点。
2Gg#}u5G`0TCT(The Coroner’s Toolkit)是一个非常有用的工具包,其中的icat可以查看指定节点上文件的全部内容。
l)N)i2K.Q a0[root@ay4z3ro TCT]# ./icat /dev/hda5 82241木铎校园 BBS 社区(ro7bM3DsU
如果程序还在运行,可以使用lsof命令引用NODE栏查找节点信息。木铎校园 BBS 社区,d Lr;h5il
恢复一个文件只需要:木铎校园 BBS 社区m P"g(u Vl.O{LQ
[root@ay4z3ro TCT]# ./icat /dev/hda5 NODE > some.recovery木铎校园 BBS 社区1br gw2WD N
TCT中还有很多有用的工具,例:木铎校园 BBS 社区3X6E7J,k!XDqPp
[root@ay4z3ro TCT]# ./ils –A /dev/hda5 | grep “|501|”
$y:Vc-kn i%r1z"sr y0以上命令行找出与UID=501用户有关的所有被删除的文件。木铎校园 BBS 社区 {K|9s7B/_m*vL)kk
TCT链接:http://www.fish.com/forensics/
.imiaB3u2KU#O0木铎校园 BBS 社区,k)o(hD+c|
============
m"].[7e/a P0检查特殊文件木铎校园 BBS 社区(?7@EbmFf[ l{
============
G0\WH2cr'KY0SUID和SGID文件:
di2[l` aR0---------------
"a5uea*s8H(E6tS%\NN0[root@ay4z3ro /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}木铎校园 BBS 社区$k9G4@8o2ek
从中查找那些原本不含有S位的,不寻常的或是被放在一个奇怪地方的S位程序。把/bin/ksh改名后放在/tmp(777)目录下就是一种后门。
O*K$}L"{PA |*`0
A{&a7|.\].j/r0不常用的和隐藏的文件及目录:木铎校园 BBS 社区E;P5f)Wm:K4pk
---------------------------
M4b~j-@[dE0UNIX系统中以”.”开头的文件都是隐藏的,如果ls不加”-a”参数就不会出现在文件列表里,攻击者经常利用的还有:”…”。木铎校园 BBS 社区#m"[:`)~LL zCM
用隐藏字符对目录进行重命名是一种黑客技巧,比如有的文件名是这样的:”..^T”,”… “(注意三个点后面有个空格)……
@(C p9YYSA?0这可以欺骗很多系统管理员。木铎校园 BBS 社区 cUp dgn G
怎么办呢?如下:
np(k,d.F&Z&_0[root@ay4z3ro foo]# ls –al “| cat –tve”木铎校园 BBS 社区M,LSRW)`
cat命令的参数让其显示非打印字符,显示制表符并在每个结尾放置一个$,所以以上目录会显示为:”..^T$”,”… $”。
-zmL`i/ZSeLK0要进入前一个目录在T之前按下CTRL+V,而不是用^符号,进入后一个目录则是:[root@ay4z3ro foo]# cd “… “
@X!Sd"UG#Hs]0木铎校园 BBS 社区(Y5@l1qENF6g P;Q
配置文件:
D;G-N Fxj*{T0---------
-O!s(V(J p3@no;_WD0一个攻击者如果拥有相当熟练的系统管理技能,偷梁换柱,在配置文件中做点手脚是很轻而易举的事。木铎校园 BBS 社区TEf'@(k{~
比如修改或添加/etc/services,/etc/inetd.conf,不过对于熟练的系统管理员来说,这样的后门很容易发现。木铎校园 BBS 社区l y'P"OX*r*_,`v-S;o-`
还有就是某些exploit的副产品,比如那个Solaris2.6的Sadmind RPC远程溢出,默认的攻击程序就是溢出后在/etc/inetd.conf木铎校园 BBS 社区1N8CbMra%['p
添加一句伪造ingreslock服务把/bin/sh绑定在1524端口。水平差的攻击者通常不会注意这个问题。
Z8DDxjF/[jP0
po|k5oSW0启动文件:
K9is1Vnh-[0----------
$U/^g$S#bq'`0上面的inetd.conf就是这类文件,除此之外还有cron文件,目录/var/spool/cron,/usr/spool/cron用来为不同用户保存cron作业。
qd9H~W1F`0该目录中的文件以用户帐号命名,并且其中的任务以该用户特权运行。此目录下的root文件应该是我们关注的。木铎校园 BBS 社区KS%FCJ
有人喜欢在半夜启动木马运行一个bindshell,然后过几个小时又把开放的端口关闭。木铎校园 BBS 社区e-MS,`xTL2C
/etc/rc*是开机自动运行脚本,也经常被攻击者利用。木铎校园 BBS 社区6O E^!I"b+YU
剩下的还有用户启动文件,如login,profile, .bashrc, .cshrc, .exrc可能被插入特洛伊语句,在www.apache.org被入侵木铎校园 BBS 社区(Y(@"Y6f K.I:F
的事件中就曾被利用过。
'V(m6nrr)}&R:f!b C0木铎校园 BBS 社区q dY/y$o7L#V qZ:t ij
/tmp目录:木铎校园 BBS 社区1X.JQ+Cn5`!II$L
-------------木铎校园 BBS 社区L&e!?6T6o3d7~
/tmp目录的权限默认是777,这是攻击者经常利用的地方,很多黑客工具也利用此目录存储中间文件,如果攻击者不小心,
-C` [ ])rK:y0就会在此留下尾巴。木铎校园 BBS 社区w6w1w*f ZZd
木铎校园 BBS 社区5\(]-f#J8P7M};t
================ 木铎校园 BBS 社区3i6XQ1sR)_2Y uO
检查用户帐号和组
q1D"~8Eb Bz0================木铎校园 BBS 社区C:k!lc'r/H
有些账号是为系统而设,本来没有shell,也不能登陆,攻击者可能会利用这点。刚学习UNIX入侵没多久的人可能会这样:
r.\7J1V(D0echo “aya:x:0:0:intruder!!:/:/bin/sh”>>/etc/passwd,更有可怜的家伙因为少了一个”>”而破坏了passwd文件,木铎校园 BBS 社区4w!F5Z2Sa3b [
弄得自己都无法登陆?,真见过这样的家伙,说实话我自己也干过,不过是发生在自己的Linux上,所以没有铸成大错。木铎校园 BBS 社区P'a$X.kZ0]P
老练的不会这样做,他们可能会从一堆用户中挑出一个不起眼的,然后占为己有,远程合法登录取得shell后本地再升级为root.
$] pct4|"xf&^7F&F!k0我相信这个问题对我们来说很好解决。木铎校园 BBS 社区Q ukC m
木铎校园 BBS 社区oxt*a)D?
============
wmq0T(p)t0识别非法进程
g6G0C*dO;? Z6K0============木铎校园 BBS 社区%w)mEo5p!^o k8pO
监听服务和运行进程相关的二进制文件都应该检查,查看/etc/inetd.conf时可能会发现合法的服务在合法的端口监听,
&?7m A9q*g1Pi0但是那个进程的二进制文件可能是被替换过的,所以先要确保正在运行的不是rootkit(lrk4,lrk5……)
xf1M:veLg0[root@ay4z3ro tool]# ./chkrootkit木铎校园 BBS 社区,a0R]W;s#h
chkrootkit是一个用于检查完整性的工具,如果之前用过tripwire,则可以用tripwire校验。
+| C_R+E6iKke0或者用rpm自身的MD5校验和功能。木铎校园 BBS 社区e+`o)^&{S3W3z
木铎校园 BBS 社区W%U$bbR
============木铎校园 BBS 社区V9G*K3Ra%YKY
勘查系统弱点木铎校园 BBS 社区%FB'? \[
============
&?~M$B2U6F6V&t0 检查各服务,应用程序,内核及补丁的版本,对照bugtraq上已知的漏洞列表,查找系统弱点,从正面挖掘潜在的和可能被忽略漏洞。木铎校园 BBS 社区weoq+@} r `
这要求响应人员具有一个职业入侵者的相关技能!试图扮演一个入侵者也能从中发掘对方是如何进入系统的。木铎校园 BBS 社区1S"rf| v(b&R
木铎校园 BBS 社区*oNo9geal
============木铎校园 BBS 社区%i3O XD#h!ouG:D
分析信任关系
3Km Lc0j!^j&zFH0============
m QrA,HSo"_-c0 首先UNIX中的信任关系一度成为被攻击的弱点。其次,如果该关系被利用,那么受害范围将扩大,木铎校园 BBS 社区C{!d5a#|)ZOW
此时受信任的系统也被认为是不安全的,并将其同时列入响应对象的范围。木铎校园 BBS 社区/A oHf*S`
木铎校园 BBS 社区-zo ZsFN8d GW q.e9K
============
:Kq2rvD T7m&X0分析黑客工具
;}8v ROb2h K^J0============
TqiI` SXT Z}4{0 如果很有幸的,入侵者留下了或者是我们用某种聪明的办法恢复了入侵者在活动过程中使用的工具,代码,就可以对其进一步分析。
&eUv-bu8E;d0 如果是源代码,直接拿过来就能读(当然是LKM RootKit的源码最好,呵呵)。不熟练的家伙甚至把原来的工具比如sniffit名字都不
H%^7JR:Nus^.r0改就运行了,这样的就比较好对付。木铎校园 BBS 社区{A+P#r9b}2m7Q
如果我们得到的是一个正在运行进程的二进制文件的副本,可以使用gdb等调试器反汇编,跟踪调试。木铎校园 BBS 社区(A}x {+Z5b
但是如果一个极具水准的攻击者这样编译他的程序:木铎校园 BBS 社区kA1v/k X/\
[root@ay4z3ro evil]# gcc –O4 evil.c –o evil
Vkt@f nUE3F0用-O4参数优化编译后会减少指令,然后用strip去掉二进制文件中的符号信息:
_v+W2t(Fd#C h|s0[root@ay4z3ro evil]# strip ./evil
g[&m] e0KfV0这样我们的工作就会变得非常困难。木铎校园 BBS 社区'~,Vq kXCS
File命令可以显示文件的类型信息,是否被strip过等。
TzO ? @;Q0c?0Strings命令可以用来显示可执行文件中的ASCII字符串,比如一个本地缓冲区溢出exploit中由printf()语句控制的行,出错处理的消息,木铎校园 BBS 社区*H"})e'T4]S
默认的-h参数的返回信息等。此外还有可能得到函数,变量名,编译之前所用的文件名,创建该文件的编译器版本等,通过这些关键字进行
4YnC BP#{(~0在线搜索就有可能找到该工具的源码。
e|j\C2x0 同样我们可以对二进制文件进行动态分析,用strace工具跟踪系统调用。strace显示了文件执行时所产生的文件访问,网络访问,木铎校园 BBS 社区~X$[6]~!n x2{
内存访问和许多其它的系统调用信息。通常通过观察关键的系统调用我们大致能确定该程序作了什么。由此重构该文件的运行情景也是可能
^B SA FXS0的。strace给我们提供了极大的方便,在整个响应过程中,我们还可以利用它做很多事情。木铎校园 BBS 社区&?-Z3B$pX+s3oU'dZ
木铎校园 BBS 社区5E-H1D)fe;b F? UW
{{后话}}
M!` R f&cH?0应急响应并不需要完全遵循固定的模式,思路新颖可以适度发挥,如果遇到的对手是水平极高的攻击者,应该适当改变策略,木铎校园 BBS 社区cX)Y7x)Al:c
为了安全起见,最后重装系统或许也是必要的。木铎校园 BBS 社区%fO_;Q-P0J$U*Zb
写给广大“搞机器一族”的话:
@8BFd%Hf d$b@E0纵使有人觉得自己入侵技巧高明,但事实上防御的一方总是或多或少的有些出乎你意料之外的对策,一点小马虎可能就会使你很难堪。
~zic2DP ~0即使你认为已经清除了目标系统上所有的日志,但是前端路由器或IDS,Firewall上可能有你无法“处理”甚至你未曾察觉到的跟踪记录,
#y.\4X i5lq1E:tk0为了自身的安全,找一条快速的线路,用多重跳板来发动一次真正的攻击是很有必要的。从“开始”到“结束”都不能暴露自己!
`+dC+V?0
1L"H} j_%T z1Y9I!r*R0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者