UNIX应急响应攻略
*******************************
*author:ayazero * *mail:drdos@163.com * *homepage:overflow.nease.net * *team:www.ph4nt0m.net * ******************************* 应急响应有一半是非技术的内容,制定一个合理的响应策略是至关重要的! 记住:现在开始对受害系统的每一步操作都可能改变已存在的证据或是导致敏感信息的丢失! } 目标:在进行司法鉴定复制之前获得系统中的易失数据,初步确定突发事件概况。 ============== 创建响应工具包 ============== 我们调查系统,必须以高度可信赖的程序执行命令,再加上备份与修复,创建一个工具包是很有必要的。 即使在非UNIX/LINUX系统上,创建工具包也应该作为响应的第一步。 首先,我们需要在对应体系结构的系统上编译响应期间需要的工具,且编译程序需要考虑系统兼容的问题。 通常我们需要如下的工具: ls dd des file pkginfo find icat lsof md5sum nc netstat pcat perl ps strace strings truss df vi cat kstat ifconfig chkrootkit more gzip last w rm script bash modinfo lsmod 读者可根据自己的需要自行添加,但是一个工具包通常只能用来完成对某一特定平台的工作, 把对多个平台编译的工具放进同一个工具包反而会显得紊乱。 在Linux上创建响应工具包时,可以用gcc的–static参数编译源代码,或者用ldd检查动态连接库, 在响应工具包存储介质上建立库文件目录,并拷贝所有工具需要的动态连接库的副本,最后设置环境变量。 这个过程有点类似于创建一个Linux的优盘启动盘。 ============ 获取易失数据 ============ 易失的数据包括:当前打开的套接字,进程列表,RAM内容,非链接文件的位置。 *unix特性: unix允许进程正在执行时把其删除! 非链接文件是访问该文件的进程中止时被标记为删除的文件。当系统关闭时(正常关机或突然断电非正常关机), 标记为删除的文件都把消失。因此在找到被标记为删除的文件之前不能关机! ================= 执行可信赖的shell ================= 使用我们自己准备的响应工具包,装载该介质的文件系统, mount –t auto /dev/sda1 /mnt/usb 或 mount –t iso9660 /dev/cdrom /mnt/cdrom 按下Ctrl+Alt+F1~F6,从控制台以root身份登陆。 请一定要区分原环境变量中的命令和当前响应工具包的相同名字的命令集,防止潜在的二进制特洛伊木马攻击。 ================== 查看登陆系统的用户 ================== [root@ay4z3ro foo]# w 19:50:48 up 43 min, 2 users, load average: 0.00, 0.00, 0.00 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root :0 19:08 ?xdm? 11.10s 0.43s gnome-session root pts/0 19:08 1.00s 0.21s 0.01s w 输出标题行显示了当前系统时间,该系统已运行的时间,当前登陆用户数,最近1分钟,5分钟和15分钟内的平均系统负载。 USER字段显示当前登陆的用户名。TTY字段显示了会话的控制终端,tty表示从控制台登陆,pts/typ则可以表示通过一个网络连接, 因为X是个C/S模式的应用程序,所以我在GNOME下开的shell窗口显示为pts。如果不从本地登陆,输出中还有FROM字段, 表示建立会话的源地址的域名或IP。LOGIN@显示该连接的本地开始时间。IDLE字段显示了自上一个进程运行以来的时间长度。 JCPU显示与tty或pts关联的全部进程所使用的时间。PCPU字段显示了WHAT列中当前进程所使用的CPU时间。WHAT列显示用户当前运行的进程。 ================ 查看系统进程列表 ================ Solaris中使用ps –eaf,而在FreeBSD和Linux中则使用ps –aux. [root@ay4z3ro foo]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.2 1356 496 ? S 19:07 0:04 init root 2 0.0 0.0 0 0 ? SW 19:07 0:00 [keventd] root 3 0.0 0.0 0 0 ? SWN 19:07 0:00 [ksoftirqd_CPU0] root 4 0.0 0.0 0 0 ? SW 19:07 0:00 [kswapd] root 5 0.0 0.0 0 0 ? SW 19:07 0:00 [bdflush] root 6 0.0 0.0 0 0 ? SW 19:07 0:00 [kupdated] root 7 0.0 0.0 0 0 ? SW< 19:07 0:00 [mdrecoveryd] root 11 0.0 0.0 0 0 ? SW 19:07 0:00 [kjournald] root 114 0.0 0.5 2108 1304 ? S 19:07 0:00 devfsd /dev root 209 0.0 0.0 0 0 ? SW 19:07 0:00 [khubd] root 338 0.0 0.0 0 0 ? SW 19:07 0:00 [kjournald] rpc 620 0.0 0.2 1496 520 ? S 19:07 0:00 [portmap] root 636 0.0 0.2 1452 624 ? S 19:07 0:00 syslogd -m 0 …………………(以下省略) Ps命令输出中的START字段显示了程序开始运行的时间,对于查出攻击时间很有帮助。有时仅通过时间就能识别可疑进程。 Linux下还可以通过strings –f /proc/[0-9]*/cmdline来查看系统中运行进程的完整命令行参数,但是这个并不完全可信。 因为攻击者甚至不需要插入内核模块,而只在应用层的编码中加入语句就能欺骗我们。 =============== 检测LKM Rootkit =============== 内核模块后门,还有什么比这个更臭屁的呢?Solaris,Linux和几乎所有的UNIX都支持LKM(Loadable Kernel Modules), 用普通的方法无法检测其存在,这给应急响应带来了极大的挑战性。对于我们来说,解决的办法是找到那些lkm rootkit, 并熟悉,解剖他们。有时lkm rootkit虽然被成功装载,但在系统的某些细节上会出现“异常”,甚至可能使系统在运行一段时间后彻底崩溃。 还有,lkm虽然活动在ring0核心态,但是攻击者往往会在系统的某处留下痕迹,比如攻击者为了让系统每次关闭或重启后能自动装入他安置的 内核后门,可能会改写/etc/modules.conf或/etc/rc.local. kstat/ksec是检测lkm非常方便的工具,前者用于Linux,后者用于*BSD. [root@ay4z3ro kstat]# ./kstat Usage: ./kstat [-i iff] [-P] [-p pid] [-M] [-m addr] [-s] -i iff may be specified as 'all' or as name (e.g. eth0) 上一篇: 关于国内 Unix 主机常见安全漏洞描述 下一篇: 运用CrackLib构建安全的Unix口令 更多相关文章
|
推荐文章
精彩文章
|