一次完整的对linux取证

环境介绍:

Ip地址:192.168.57.231

系统:centos

Web服务:Apache

动态语言:php

取证范围:web入侵痕迹 ,系统后门,检查Apache日志中存在的入侵痕迹

                     Mysql数据库日志分析。

Web入侵取证:

登录系统,在查看web服务

权限也比较大

可发现这是漏洞测试平台

于是登录网页查看可能存在那些漏洞

可发现存在命令执行,目录遍历,phpinfo.php泄露,上传,越权访问等。

于是我们先审核Apache access.log.txt 文件

可发现这样的日志特别麻烦,于是我们需要用命令处理一下

首先我们将access_log*.txt文件合并到一个文件以便联合查询

我们可知道在对网站测试时会产生大量的访问日志

同理,如果我们通过GET或者POST方式调用数据库也会产生访问日志

于是我们将包含有select sqlmap(工具)的日志单独审核

打开access_log日志将包含select 等的访问调出

cat access_log |grep '(select|script|acunetix|sqlmap)'

我们发现不存在有注入的地方(网站也不存在SQL注入)

我们发现网站存在命令执行

于是我们对命令执行网站进行检索

cat access_log.5 |grep /WebShell.php?cmd=

我们可以审核打印出的文件 可知道测试时用到了那些命令

 

我们发现网站存在文件上传

于是我们对文件上传进行检索

cat access_log.5 |grep FileSharing.php

 

运用awk对文件处理 调出访问频繁的ip地址

grep 'GET' /etc/httpd/logs/access_log.5 | awk '{print $1}'

awk命令用法详解:https://www.cnblogs.com/xudong-bupt/p/3721210.html

Sort命令用法详解:http://man.linuxde.net/sort (对文件进行排序)

Uniq命令用法详解:http://man.linuxde.net/uniq (忽略文件中的重复行)

Sort 命令用法详解:http://man.linuxde.net/sort (它将文件进行排序,并将排序结果标准输出)

调出访问频繁的ip地址

grep 'GET' /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr

 

 

Content-Length过大的请求,过滤Content-Length大于5000kb的日志

awk '{if($10>5000){print $0}}' /etc/httpd/logs/access_log.5

Web服务取证主要是针对web服务日志,还有数据库的日志可以针对性的对sql注入和xss,上传进行取证

如果发现文件,不要直接用vim查看编辑文件内容,这样会更改文件的mtime,而对于应急响应来说,时间点很重要。对比时间点更容易在Log找到其他的攻击痕迹。

 

 

Linux系统取证

对ssh连接取证分析

访问/var/log/secure 文件

注意不要用任何文本编辑器打开日志,可能会破坏文件时间

cat /var/log/secure |grep Accepted

在现实中,一个服务器可能会有多人管理,说以还是要对打印结果进行一些参数处理

查看正确和失败的登录可以在grep ‘Failed’ && grep ‘Accepted’中编辑

 

检查SSH后门

1)比对ssh的版本

ssh -V

2)查看ssh配置文件和/usr/sbin/sshd的时间

stat /usr/sbin/sshd

3)strings检查/usr/sbin/sshd,看是否有邮箱信息

strings可以查看二进制文件中的字符串,在应急响应中是十分有用的。有些sshd后门会通过邮件发送登录信息,通过strings /usr/sbin/sshd可以查看到邮箱信息。

4)通过strace监控sshd进程读写文件的操作

一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

3.进程

检查是否存在可疑进程,需要注意如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,进程也会隐藏。

资源占用

Top然后找到CPU和MEM排序

启动时间

可疑与前面找到的web取证时发现的webshell时间点比对。

启动权限

这点很重要,木马进程可能是mysql权限执行的,那基本可以判断是通过Mysql入侵,重点排查Mysql弱口令、UDF提权等。

不存在由mysql权限执行的文件(下面是可能存在后门的mysql权限)

mysql 63763 45.3 0.0 12284 9616 ? R 01:18 470:54 ./db_temp/dazui.4

mysql 63765 0.0 0.0 12284 9616 ? S 01:18 0:01 ./db_temp/dazui.4

mysql 63766 0.0 0.0 12284 9616 ? S 01:18 0:37 ./db_temp/dazui.4

mysql 64100 45.2 0.0 12284 9616 ? R 01:20 469:07 ./db_temp/dazui.4

mysql 64101 0.0 0.0 12284 9616 ? S 01:20 0:01 ./db_temp/dazui.4

 

父进程

例如菜刀反弹Bash

ps -ef | grep '/dev/tcp‘

获取到可疑进程号之后,可疑使用lsof -p pid查看相关文件和路径。

使用lsof -p pid可以看到可执行文件

可以文件类型可以使用file获取

命令替换,通过Strings查看发现有大量的IP地址

strings /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.'

 

 

网络连接

需要注意如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,连接是可以被隐藏的。

netstat -antlp | grep ESTABLISHED

查看已经建立的网络连接,例如反弹bash

netstat -antlp | grep EST | grep bash

 

netstat -antlp | grep LISTEN

检查可以监听端口,例如攻击者在本地开启sock5代理,然后使用SSH反弹sock5。

netstat -antlp | grep LISTEN | grep 1080

 

敏感目录

/tmp, /var/tmp, /dev/shm,所有用户都可读,可写,可执行

 

查看当前用户  cat /etc/passwd |cut -f 1 -d :

cat /etc/passwd/

 

创建一个名为1的shell

(删除多余用户 userdel  XXXX)

批量删除 shell脚本

 

#!/bin/bash

for user in `<2`

do

userdel -r $user

 

done

用法:chmod -R 777 加文件1的绝对路径

创建2 (为将要删除的用户名表单)

 

查看当前进程  netstat -ef

ps -ef | grep  autorunp| grep  -v grep | awk  ' {print $2}' | xargs kill -9

ps -ef 用于获取当前系统所有进程.
grep  autorunp过滤出与“ autorunp”字符相关的数据(以行为单位)。
grep -v grep 的作用是除去本次操作所造成的影响,-v 表示反向选择。
awk '{print $2}' 表示筛选出我们所关注的进程号,$2 表示每行第二个变量,在这个例子中就是进程号。所以如果你使用ps工具不一样,或者ps带的参数不一样,那需要关注的就可能不是$2,可能是$1 。
xargs kill -9 中的 xargs 命令表示用前面命令的输出结果(也就是一系列的进程号)作为 kill -9 命令的参数,-9 表示强制终止,不是必须的。

上面是用 kill 配合过滤操作来完成,实际上还有更简单的方法——使用 killall 命令。killall 通过进程名字终止所有进程,用法如下:killall <process_name> 。
在我们这个例子中,可以这么用:

# killall -9 rtprecv1

当然,killall 也可以和 ps 或 pgrep 结合使用,以此来查看哪些程式正在运行。

 

批量删除root目录下的autorunp文件

ls  /root/|grep autorunp|xargs rm -rf

 

参与评论