记一次对Linux应急响应处置流程的学习

Linux基础

1、文件排查

2、进程排查

3、日志排查

4、系统信息排查

5、后门排查

 

文件排查

敏感目录的文件分析[类/tmp目录,命令目录/usr/bin /usr/sbin等]

ls 用来显示目标列表

-a 显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);

-C 多列显示输出结果。这是默认选项;

-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;

-t 用文件和目录的更改时间排序;

 

(1)查看tmp目录下的文件➜➜➜ ls –alt /tmp/

图片1.png

 

(2)发现多个异常文件,疑似挖矿程序病毒:

图片2.png

 

(3)对已发现的恶意文件进行分析,查看559.sh脚本内容:脚本先是杀掉服务器上cpu占用大于20%的进程,然后从远程27.155.87.26(黑客所控制的一个IDC服务器)下载了病毒程序并执行;

图片3.png

 

(4)查看开机启动项内容➜➜➜ ls -alt /etc/init.d/(/etc/init.d 是 /etc/rc.d/init.d 的软链接)

图片4.png

 

(5)按时间排序查看指定目录下文件➜➜➜ ls -alt | head -n 10

图片5.png

 

(6)针对可疑文件可以使用stat进行创建修改时间、访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他

Access:当访问该文件,时间会改变,cat more

modify:文件内容被改 vi vim

change:文件夹、文件权限被改

图片6.png

 

(7)查看历史命令记录文件**~/.bash history**

图片7.png

查找~/.bash_history命令执行记录,主要分析是否有账户执行过恶意操作系统;命令在linux系统里,只要执行过命令的用户,那么在这个用户的HOME目录下,都会有一个.bash_history的文件记录着这个用户都执行过什么命令;那么当安全事件发生的时候,我们就可以通过查看每个用户所执行过的命令,来分析一下这个用户是否有执行恶意命令,如果发现哪个用户执行过恶意命令,那么我们就可以锁定这个线索,去做下一步的排查;

 

(8)查看操作系统用户信息文件**/etc/passwd**

图片8.png

 

(9)查看新增文件

find:在指定目录下查找文件

-type b/d/c/p/l/f查是块设备、目录、字符设备、管道、符号、链 接、普通文件

-mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天前

-atime -n +n 按文件访问时间来查找文件,-n指n天以内,+n指n天前

-ctime -n +n 按文件创建时间来查找文件,-n指n天以内,+n指n天前

 

find ./ -mtime 0 -name “*.php”(查找24小时内被修改的php文件)

find / -ctime 2(查找72小时内新增的文件)

PS:-ctime 内容未改变权限改变时候也可以查出;

 

(10)特殊权限的文件查看

查找777的权限的文件➜➜➜ find / .jsp -perm 777

图片9.png

 

(11)隐藏的文件(以 “.“开头的具有隐藏属性的文件)ls -ar | grep “^\.”

图片10.png

PS:在文件分析过程中,手工排查频率较高的命令是 find grep ls 核心目的是为了关联推理出可疑文件;

 

(12)查看分析任务计划

crontab -u <-l, -r, -e>

-u 指定一个用户

-l 列出某个用户的任务计划

-r 删除某个用户的任务

-e 编辑某个用户的任务(编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件)

 

(13)通过crontab –l 查看当前的任务计划有哪些,是否有后门木马程序启动相关信息;

查看etc目录任务计划相关文件,cat /etc/crontab

图片11.png

 

进程排查

netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

选项参数:

-a 显示所有连线中的Socket。

-n 直接使用IP地址,而不通过域名服务器。

-t 显示TCP传输协议的连线状况。

-u 显示UDP传输协议的连线状况。

-v 显示指令执行过程。

-p 显示正在使用Socket的程序识别码和程序名称。

-s 显示网络工作信息统计表。

 

(1)用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程

netstat –antlp | more

图片12.png

 

(2)可查看到本地mysql数据库有外部连接行为

a) “Recv-Q"和"Send-Q"指的是接收队列和发送队列。

b) Proto显示连接使用的协议;RefCnt表示连接到本套接口上的进程号;Types显示套接口的类型;State显示套接口当前的状态;Path表示连接到套接口的其它进程使用的路径名。

c) 套接口类型:

-t TCP -u UDP

-raw RAW类型 –unix UNIX域类型

–ax25 AX25类型 –ipx ipx类型 –netrom netrom类型

d)状态说明:

LISTENING 侦听状态 ESTABLISHED 建立连接

CLOSE_WAIT 对方主动关闭连接或网络异常导致连接中断

图片13.png

 

(3)根据netstat 定位出的pid,使用ps命令,分析进程

选项参数:

-a 代表 all。同时加上x参数会显示没有控制终端的进程

-aux 显示所有包含其他使用者的行程(ps -aux –sort -pcpu | less根据cpt使用率进行排序)

-C 显示某的进程的信息

-axjf 以树形结构显示进程

-e 显示所有进程。和 -A 相同。

-f 额外全格式

-t ttylist by tty 显示终端ID在ttylist列表中的进程

ps aux | grep pid

图片14.png

 

(4)将netstat与ps 结合

图片15.png

 

日志排查

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d,

默认配置文件为 /etc/syslog.conf 或 rsyslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。

Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。

 

/etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d

/etc/syslog.conf 或 rsyslog.conf

日志目录.png

 

(1)Apache默认自动生成两个日志文件,访问日志access_log和error_log;

图片16.png

 

(2)在url中视图搜索所有关键词为“union”的请求,可以发现172.24.123.120在尝试SQL注入,类似,通过通过特殊的关键词搜索web攻击。如/etc/passwd,alert等。但单凭web日志无法判断攻击者是否攻击成功了,只能知道攻击者在尝试攻击;

cat access.log.1 | grep “union”

图片17.png

 

(3)查询访问量前十的IP地址

cat access.log.1 | cut -f 1 -d ’ ’ | sort |uniq -c |sort -k 1 -n -r |head -10

图片18.png

(4)查询访问量前十的URL

cat access.log.1 | cut -f 7 -d ’ ’ | sort |uniq -c |sort -k 1 -n -r |head -10

图片19.png

(5)统计访问量前十QPS的时间点

cat access.log.1 | cut -f 4 -d ’ ’ | sort |uniq -c |sort -k 1 -n -r |head -10

图片20.png

 

在对WEB日志进行安全分析时,可以按照两种思路展开,逐步深入,还原整个攻击过程;

首先确定受到攻击、入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程;

图片21

一般攻击者在入侵网站后,通常会上传一个后门文件,以方便自己以后访问。我们也可以以该文件为线索来展开分析;

图片22

 

信息系统排查

查看分析history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一步排查溯源。运气好有可能通过记录关联到如下信息:

a) wget 远程某主机(域名&IP)的远控文件;

b) 尝试连接内网某主机(ssh scp),便于分析攻击者意图;

c) 打包某敏感数据或代码,tar zip 类命令

d) 对系统进行配置,包括命令修改、远控木马类,可找到攻击者关联信息

……

 

(1)查看分析用户相关分析

awk -F: ‘{if($3==0)print $1}’ /etc/passwd

图片23.png

 

(2)查看分析任务计划

crontab -u <-l, -r, -e>

cat /etc/crontab

图片24.png

 

(3)查看linux 开机启动程序

查看rc.local文件(/etc/init.d/rc.local /etc/rc.local

ls –alt /etc/init.d/

图片25.png

 

(4)查看系统用户登录信息

使用lastlog命令,系统中所有用户最近一次登录信息

图片26.png

 

(5)使用lastb命令,用于显示用户错误的登录列表;

使用last命令,用于显示用户最近登录信息(数据源为**/var/log/wtmp,var/log/btmp**);

last -10

图片27.png

 

后门排查

(1)chkrootkit是用来监测 rootkit 是否被安装到当前系统中的工具。rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。所以,我们要用 chkrootkit 来定时监测系统,以保证系统的安全。

chkrootkit主要功能:

(a)检测是否被植入后门、木马、rootkit;(b)检测系统命令是否正常;(c)检测登录日志

图片28.png

chkrootkit –n;如果发现有异常,会报出“INFECTED”字样

图片29.png

 

(2)rkhunter是Linux系统平台下的一款开源入侵检测工具,具有非常全面的扫描范围,除了能够检测各种已知的rootkit特征码以外,还支持端口扫描、常用程序文件的变动情况检查。

rkhunter主要功能:

系统命令(Binary)检测,包括Md5 校验

Rootkit检测

本机敏感目录、系统配置、服务及套间异常检测、第三方应用版本检测

图片30.png

 

(3)系统完整性也可以通过rpm自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查。

如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串,c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。 . (点) 表示测试通过。下面的字符表示对RPM软件包进行的某种测试失败:

5 MD5 校验码 S 文件尺寸 L 符号连接 T 文件修改日期

D 设备 U 用户 G 用户组 M 模式e (包括权限和文件类型)

 

RPM check检查

./rpm -Va > rpm.log

下图可知ps, pstree, netstat, sshd等等系统关键进程被篡改了

图片31.png

 

(4)Webshell的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后应急过程中频率也比较高。

a)Webshell的排查可以通过可根据webshell特征进行命令查找,简单的可使用(当然会存在漏报和误报)

b)Github上存在各种版本的webshell查杀脚本,各有各的自己的特点

可使用河马shell查杀(shellpub.com)或者D盾等等

 

(5)手工Webshell排查

通过文件内容中的危险函数,去找到网站中的web后门。最常见的Webshell文件内容中常见的恶意函数:

PHP Eval、System、assert、……

JSP getRunTime、 FileOutputStream、……

ASP eval、execute、 ExecuteGlobal、……

find /var/www/html/ -type f -name ‘*.php’|xargs grep ’eval’ |more

图片32.png

除了通过grep去找webshell,我们还可以用类似 D盾之类的webshell查杀工具,把源码拖下来在本机查杀。

有时候黑客在上传完webshell后门,获取到自己想要的信息后,就会删除掉webshell,又或者遇到了一些变形过的webshell后门,我们的关键字没有搜索到,这时候通过文件去找到webshell的方法就不适用了。那么这个时候就只能通过分析web日志,来找到黑客的webshell文件。直接分析web日志的最直接方式就是通过web日志中的特征来判断是否存在恶意的webshell后门,比如上面列表展示的这些常见webshell会传递的get参数。常见webshell后门日志特征如下:

Darkblade:goaction=login

JspSpy:o=login

PhpSpy:action=phpinfo

Regeorg: cmd=connect

Other:cmd=

不过这种方式能发现的问题不多,因为很多时候web后门接收参数的方式都是post,前面说了大部分中间件默认情况下只能记录get,如果需要记录post的话,就需要安装第三方模块。

 

Ps:常规黑客攻击流程,一个黑客通常通过web漏洞获取管理员密码进入后台,然后上传webshell,这个webshell文件在以前的访问记录是没有的,那么我们就可以通过统计每天访客所访问过的动态脚本文件,来列出每天新增加的文件入口的记录,快速查找webshell后门,最后我们可以根据统计低频访问的动态脚本文件,来找出可能是webshell的文件,因为一般来说webshell的访问ip只有几个,并且访问的次数也不多,那么根据这个分析模型,我们就可以发现可能是恶意的动态脚本文件。此排查需要懂一点了解编程,作为思路了解。

 

(6)通过chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得出以下应对措施:

1.根据进程、连接等信息关联的程序,查看木马活动信息。

2.假如系统的命令(例如netstat ls 等)被替换,为了进一步排查,需要下载一新的或者从其他未感染的主机拷贝新的命令。(busybox)

3.发现可疑可执行的木马文件,不要急于删除,先打包备份一份。

4.发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连IP地址、加密方式、关键字(以便扩大整个目录的文件特征提取)等。