# Linux应急响应

## Linux

### 文件

> ls -alt #查找72小时内新增的文件
>
> find / -ctime -2 #文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件
>
> /var/run/utmp #有关当前登录用户的信息记录
>
> /etc/passwd #用户列表
>
> /tmp #临时目录
>
> find / *.jsp -perm 4777 #查找777的权限的文件(可以将文件名进行修改`php`、`py`、`html`、`sh`等)
>
> 隐藏文件`.xxxx`
>
> 命令目录：`/usr/bin`、`/usr/sbin`

### 日志

/var/log/messages 包含整体系统信息，其中也包含系统启动期间的日志。此外，mail，cron，daemon，kern和auth等内容也记录在var/log/messages日志中。

/var/log/dmesg 包含内核缓冲信息。在系统启动时，会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。

/var/log/auth.log 包含系统授权信息，包括用户登录和使用的权限机制等

/var/log/boot.log 包含系统启动时的日志

/var/log/daemon.log 包含各种系统后台守护进程日志信息

/var/log/dpkg.log 包含安装或dpkg命令清除软件包的日志

/var/log/kern.log 包含内核产生的日志，有助于在定制内核时解决问题

/var/log/lastlog 记录所有用户的最近信息。这不是一个ASCII文件，因此需要用lastlog命令查看内容

/var/log/maillog /var/log/mail.log 包含来着系统运行电子右键服务器的日志信息。

/var/log/user.log 包含所有等级用户信息的日志

/var/log/secure 包含验证和授权方面信息。例如，sshd会将所有信息记录(其中包括失败登录)在这里
。
/var/log/faillog 包含用户登录失败信息。此外，错误登录命令也会记录在本文件中

/var/log/lastlog 文件记录用户最后登录的信息，即lastlog

查看爆破主机的ROOT账号的IP： `grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort`

查看登录成功的日期、用户名及IP： `grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'`

### 用户

`/etc/shadow` 密码登陆相关信息

`uptime` 查看用户登陆时间

`/etc/sudoers` 查看sudo用户列表

`awk -F: '{if($3==0)print $1}' /etc/passwd` 查看UID为0的帐号

`lastb` 用户错误的登录列表

### 进程

> lsof 查看当前全部进程
>
> lsof -i:1677 查看指定端口对应的程序
>
> lsof -p 1234 检查pid号为1234进程调用情况
>
> lsof -g pid
>
> strace -f -p 1234 跟踪分析pid号为1234的进程
>
> ps -aux或ps -ef

### 端口

> netstat -anpt

### 自启动

~/.bashrc
rc.local
/etc/init.d
chkconfig
chkconfig --list | grep "3:on|5:on"
/etc/init.d/rc.local
/etc/rc.local
/etc/init.d/ 开机启动项
/etc/cron* 定时任务

### 计划任务

crontab -l
crontab /etc/cron*
crontab -u root -l
cat /etc/crontab
ls /etc/cron.*
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
/var/log/cron*

### 别名

可以使用`alias`命令来查看当前用户所定义的别名

### MISC

#### `stat`

> `stat` 可以显示文件的大小、创建时间、修改时间、访问时间、权限、所有者等等信息
>
> `-c`：指定输出格式
>
> `-f`：指定输出文件系统相关信息。
>
> `-L`：对符号链接解引用。
>
> `-t`：指定时间格式。

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

`Size`表示文件大小，`Access`表示访问时间，`Modify`表示修改时间，`Change`表示属性修改时间，`Uid`表示所有者的用户ID，`Gid`表示所有者的组ID等等。

#### echo $PATH

用于显示当前用户的环境变量`PATH`的值。

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

#### ./rpm -Va > rpm.log

是一个在Linux系统中常用的命令，用于检查系统中已安装的软件包的完整性，并将检查结果输出到指定的日志文件中

#### kill -9

`kill -9`是一个在Linux和Unix系统中常用的命令，用于强制终止一个正在运行的进程。

`kill`命令用于向指定的进程发送信号，以改变其状态或终止其执行。

`-9`参数表示发送`SIGKILL`信号，该信号可以强制终止进程的执行，即使进程正在执行一些关键任务或者处于死锁状态，也可以强制终止它的执行

`ps aux`查看当前系统中正在运行的进程列表

#### chattr –i

用于修改文件或目录的属性，将其设置为不可修改（immutable）。

#### rm

`rm`是一个在Linux和Unix系统中常用的命令，用于删除文件或目录。

`-r`参数,删除一个目录及其下面的所有文件和子目录

#### setfacl

用于设置文件或目录的访问控制列表（ACL）。

`getfacl`命令查看文件或目录的ACL信息

#### lsattr

`lsattr`是一个在Linux系统中常用的命令，用于显示文件或目录的属性。

`lsattr`命令会列出文件或目录的特殊属性信息，其中每个属性用一个字符来表示。常见的属性包括：

- `i`：不可修改属性；
- `a`：只追加属性；
- `c`：压缩属性；
- `e`：扩展属性；
- `s`：安全删除属性；
- `u`：未分配块属性。

### 实例1：

ssh

ssh后门快速判断：

> string /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.'

检查SSH后门：

> 1. 比对ssh的版本 `ssh -V`
>
> 2. 查看ssh配置文件和/usr/sbin/sshd的时间 `stat /usr/sbin/sshd`
>
> 3. `strings` 检查/usr/sbin/sshd 是否有邮件西信息
>
> 4. 通过strace监控sshd进程读写文件的操作
>
>    `ps axu | grep sshd | grep -v grep`查看sshd服务的进程号
>
>    ## root `65530` 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshd
>
>    `strace -o aa -ff -p 65530` 对进程进行监控





### Linux排查

#### 文件排查

- 铭感目录的文件分析[类/tmp目录，命令目录/usr/bin /usr/sbin等]

  ls 用来显示目标列表

  > -a 显示所有档案及目录（ls 内定将档案名或目录名称为“.”的视为影藏，不会列出）；-C 多列显示输出结果。这是默认选项；-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名，文件类型、权限模式、 硬连接数、所有者、组、文件大小和文件的最后修改时间等；-t 用文件和目录的更改时间排序；

- 查看tmp目录下的文件->==ls -alt /tmp/==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

如图发现当前目录下出现了异常文件，疑似挖矿程序病毒：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

对已发现的恶意文件进行分析，查看`559.sh`脚本内容：脚本先是杀掉服务器上cpu占用大于20%的进程，然后从远程27.155.87.26（福建，黑客所控制的一个IDC服务器）下载了病毒程序并执行；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

- 查看开机启动项内容->==ls -alt /etc/init.d==，/etc/init.d是/etc/rc.d/init.d的软链接

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

- 按事件排序查看指定目录下文件->==ls -alt | head -n 10==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

针对可疑文件可以使用stat进行创建改事件、访问时间的详细查看，若修改时间距离事件日期接近，有线性关联，说明可能被篡改或者其他

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

- 查看历史命令记录文件==~/bash_history==

  查找==~bash_history==命令执行记录，主要分析是否有账户执行过恶意操作系统；命令在linux系统里，只要执行过命令的用户，那么在这个用户的HOME目录下，都会有一个==~bash_history==的文件记录着这个用户都执行过的命令

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

所以若是出现了安全事故，可以通过查看用户的历史记录来排查用户是否执行过恶意命令，然后再往下进行排查

- 查看操作系统用户信息文件==/etc/passwd==

/etc/passwd 这个文件是保存着这个 linux 系统所有 用户的信息，通过查看这个文件，我们就可以尝试查找有没有攻击者所创建的用 户，或者存在异常的用户

主要关注的是第 3、4 列的用户标识号和组标识号，和倒数一二列的用户主目录和命令解析程序

一般来说最后一列命令解析程序如果是设置为 nologin 的话，那么表示这个用户是不能登录的，所以可以结合我们上面所说的 bash_history 文件的排查方法

> 首先在/etc/passwd 中查找命令解释程序不是 nologin 的用户，然后再到这些用户的用户主目录里，找到bash_history，去查看这个用户有没执行过恶意命令。

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

/etc/passwd 中一行记录对应着一个用户，每行记录又被冒号(:)分隔为 7 个字段， 其格式和具体含义如下：

\==用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell==

- 查看新增文件

  find：在指定目录下查找文件

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==find ./ -mtime 0 -name "*.php"==（查找 24 小时内被修改的 php 文件）

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==find / -ctime 2==（查找 72 小时内新增的文件）

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

> ps：-ctime内容未改变权限时候也可以查出

- 特殊权限的文件查看

查找777的权限文件->==find /*.jsp -perm 4777==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

- 隐藏的文件（以“.”开头的是具有隐藏属性的文件）

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

> ps：在文件分析过程中，手工排查频率较高的命令是`find、grep、ls`核心目的是为了关联推理出可疑文件

- 查看分析任务计划

\==crontab -u < -l，-r，-e >==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

通过crontab -l查看当前的任务计划有哪些，是否有后门木马程序启动相关信息

查看etc目录任务计划相关文件，ls /etc/cron*

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

#### 进程排查

\==top==

（1）使用 top 命令实时动态地查看系统的整体运行情况，主要分析 CPU 和内存 多的进程，是一个综合了多方信息监测系统性能和运行信息的实用工具

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

字段含义如下表：

| 列名    | 含义                                                         |
| :------ | :----------------------------------------------------------- |
| PID     | 进程id                                                       |
| PPID    | 父进程id                                                     |
| UID     | 进程所有者的用户id                                           |
| USER    | 进程所有的用户名                                             |
| GROUP   | 进程所有者的组名                                             |
| TTY     | 启动进程的终端名                                             |
| PR      | 优先级                                                       |
| NI      | nice值；负值表示高优先级，正值表示低优先级                   |
| RES     | 进程使用的、未被换出的物理内存大小，单位kb。RES=CODE+DATA    |
| SHR     | 共享内存大小，单位 kb                                        |
| S       | 进程状态：D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| %CPU    | 上次更新到现在的 CPU 时间占用百分比                          |
| %MEM    | 进程使用的物理内存百分比                                     |
| TIME    | 进程使用的 CPU 时间总计，单位秒                              |
| TIME+   | 进程使用的 CPU 时间总计，单位 1/100 秒                       |
| COMMAND | 命令名/命令行                                                |

\==netstat==

（2）用 netstat 网络连接命令，分析可疑端口、可疑 IP、可疑 PID 及程序进程 netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据，一般用于检验 本机各端口的网络连接情况

选项参数:

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

> netstat –antlp | more

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

说明：

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` 对方主动关闭连接或网络异常导致连接中断

如图，可查看到本地 mysql 数据库有外部连接行为：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（3）根据 netstat 定位出的 pid，使用 ps 命令，分析进程

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==ps aux | grep pid | grep –v grep==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

将 netstat 与 ps 结合：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

发现了3个可疑进程1742、1677、1683

看一下这些可执行程序在什么地方

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

可以使用 `lsof -i:1677` 查看指定端口对应的程序；

\==lsof==

lsof（list open files）是一个列出当前系统打开文件的工具。

在 linux 环境下，任何事物都以文件的形式存在，通过文件不仅仅可以访问常规数据，还可以访问网络连接和硬件

所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等，系统在后台都为该应用程序分配了一个文件描述符，无论这个文件的本质如何，该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息。

\==lsof filename== 显示打开指定文件的所有进程

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

`COMMAND`：进程的名称

`PID` 进程标识符 `USER` 进程所有者 `FD` 文件描述符，应用程序通过文件描述符识别该文件。如 cwd、txt 等 `TYPE` 文件类型，如 DIR、REG 等 `DEVICE` 指定磁盘的名称 `SIZE` 文件的大小 `NODE` 索引节点（文件在磁盘上的标识） `NAME` 打开文件的确切名称

（4）使用 ls 以及 stat 查看系统命令是否被替换

两种思路：

- 查看命令目录最近的时间排序
- 根据确定时间去匹配

> ls -alt /usr/bin | head -10 ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15"

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

```
备注：如果日期数字<10，中间需要两个空格。比如 1 月 1 日，grep “Jan 1”
```

（5）隐藏进程查看

> ps -ef | awk '{print}' | sort -n | uniq >1 ls /proc | sort -n |uniq >2 diff 1 2

#### 系统信息排查

（1）查看分析 history (cat /root/.bash_history)，曾经的命令操作痕迹，以便进一 步排查溯源。运气好有可能通过记录关联到如下信息：

> a) wget 远程某主机（域名&IP）的远控文件；b) 尝试连接内网某主机（ssh scp），便于分析攻击者意图; c) 打包某敏感数据或代码，tar zip 类命令 d) 对系统进行配置，包括命令修改、远控木马类，可找到攻击者关联信息…

（2）查看分析用户相关分析

> seradd userdel 的命令时间变化（stat），以及是否包含可疑信息 b) cat /etc/passwd 分析可疑帐号，可登录帐号 查看 UID 为 0 的帐号`➜➜➜awk -F: '{if($3==0)print $1}'/etc/passwd` 查看能够登录的帐号`➜➜➜cat /etc/passwd | grep -E "/bin/bash$"`

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

> PS：UID 为 0 的帐号也不一定都是可疑帐号，Freebsd 默认存在 toor 帐号，且uid 为 0.（toor 在 BSD 官网解释为 root 替代帐号，属于可信帐号）；

（3）查看分析任务计划

```
crontab -u <-l, -r, -e>
```

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

- 通过 crontab –l 查看当前的任务计划有哪些，是否有后门木马程序启动相 关信息
- 查看 etc 目录任务计划相关文件，ls /etc/cron*

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（4）查看 linux 开机启动程序

- 查看 rc.local 文件（/etc/init.d/rc.local /etc/rc.local）
- ls –alt /etc/init.d/

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==chkconfig==

chkconfig 是管理系统服务(service)的命令行工具，对开机启动的可疑程序进行更改

设置 service 启动信息： `chkconfig name on/off/reset`

设置 service 运行级别： `chkconfig --level levels`

（5）查看系统用户登录信息

a）使用 lastlog 命令，系统中所有用户最近一次登录信息。

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

b) 使用 lastb 命令，用于显示用户错误的登录列表；

c) 使用 last 命令，用于显示用户最近登录信息（数据源为/var/log/wtmp，var/log/btmp）；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

utmp 文件中保存的是当前正在本系统中的用户的信息。wtmp 文件中保存的是登录过本系统的用户的信息。/var/log/wtmp 文 件 结 构 和 /var/run/utmp 文 件 结 构 一 样 ， 都 是 引 用 /usr/include/bits/utmp.h 中的 struct utmp

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（6）系统路径分析

`echo $PATH` 分析有无敏感可疑信息

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（7）指定信息检索

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（8）查看 ssh 相关目录有无可疑的公钥存在

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

#### 后门排查

（1）系统后门排查

\==➜chkrootkit==：

chkrootkit 是用来监测 rootkit 是否被安装到当前系统中的工具。

rootkit ，是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉，通过这类工具，入侵者建立了一条能够常时入侵系统，或者说对系统进行实时控制的途径。

下载链接：https://www.chkrootkit.org/

chkrootkit 主要功能：

- 检测是否被植入后门、木马、rootkit
- 检测系统命令是否正常
- 检测登录日志

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

a)chkrootkit 安装：

> rpm -ivh chkrootkit-0.47-1.i386.rpm

b)检测

> chkrootkit –n；如果发现有异常，会报出“INFECTED”字样

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

c)定时检测 chkrootkit 自带的脚本并没有包括定时检测部分，而考虑到该工具的作用。建议编写一个脚本，并加入计划任务中。并把脚本加入 crontab 中：`cp -p ./chkrootkit.sh /etc/cron.daily/`

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==➜Rkhunter==：rkhunter 是 Linux 系统平台下的一款开源入侵检测工具，具有非常全面的扫描范围，除了能够检测各种已知的 rootkit 特征码以外，还支持端口扫描、常用程序文件的变动情况检查

rkhunter 主要功能：

- 系统命令（Binary）检测，包括 Md5 校验
- Rootkit 检测
- 本机敏感目录、系统配置、服务及套间异常检测
- 三方应用版本检测

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==➜RPM check 检查==

系统完整性也可以通过 rpm 自带的-Va 来校验检查所有的 rpm 软件包,有哪些被篡改了,防止 rpm 也被替换,上传一个安全干净稳定版本 rpm 二进制到服务器上进行检查。

> ./rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出。如果有不一致的地方，就会显示出来。输出格式是 8 位长字符串,c 用以指配置文件, 接着是文件名. 8 位字符的每一个 用以表示文件与 RPM 数据库中一种属性的比较结果 。. (点) 表示测试通过。.下面的字符表示对 RPM 软件包进行的某种测试失败：

`5` MD5 校验码 `S` 文件尺寸 `L` 符号连接 `T` 文件修改日期 `D` 设备 `U` 用户 `G` 用户组 `M` 模式 e (包括权限和文件类型)

下图可知 ps, pstree, netstat, sshd 等等系统关键进程被篡改了：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

\==➜Webshell Check==

Webshell 的排查可以通过文件、流量、日志三种方式进行分析，基于文件的命名特征和内容特征，相对操作性较高，在入侵后排查过程中频率也比较高。

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

综上所述，通过 chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得 出以下应对措施：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

2）手工 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==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

除了通过 grep 去找 webshell，我们还可以用类似 D 盾之类的 webshell 查杀工具，把源码拖下来在本机查杀。

#### 日志排查

Linux 系统拥有非常灵活和强大的日志功能，可以保存几乎所有的操作记录，并可以从中检索出我们需要的信息。大部分 Linux 发行版默认的日志守护进程为syslog，位于 /etc/syslog 或 /etc/syslogd或/etc/rsyslog.d，默认配置文件为/etc/syslog.conf 或 rsyslog.conf，任何希望生成日志的程序都可以向 syslog 发送信息

Linux 系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息，这些信息对管理员了解系统的运行状态是非常有用的，所以应该把它们写到日志文件中去。完成这个过程的程序就是 syslog。syslog 可以根据日志的类别和优先级将日志保存到不同的文件中。

（1）日志类型

下面是和排查相关的常见日志类型，但并不是所有的 Linux 发行版都包含这些类型：

| 类型     | 类型                                                         |
| :------- | :----------------------------------------------------------- |
| auth     | 用户认证时产生的日志，如 login 命令、su 命令。               |
| authpriv | 与 auth 类似，但是只能被特定用户查看。                       |
| console  | 针对系统控制台的消息。                                       |
| cron     | 系统定期执行计划任务时产生的日志。                           |
| daemon   | 某些守护进程产生的日志。                                     |
| ftp      | FTP 服务。                                                   |
| kern     | 系统内核消息。                                               |
| mail     | 邮件日志。                                                   |
| mark     | 产生时间戳。系统每隔一段时间向日志文件中输出当前时间，每行的格式类似于 May 26 11:17:09 rs2 -- MARK --，可以由此推断系统发生故障的大概时间。 |
| news     | 网络新闻传输协议(nntp)产生的消息。                           |
| ntp      | 网络时间协议(ntp)产生的消息。                                |
| user     | 用户进程。                                                   |

（2）日志优先级：

| 优先级  | 说明                                                       |
| :------ | :--------------------------------------------------------- |
| emerg   | 紧急情况，系统不可用（例如系统崩溃），一般会通知所有用户。 |
| alert   | 需要立即修复，例如系统数据库损坏。                         |
| crit    | 危险情况，例如硬盘错误，可能会阻碍程序的部分功能。         |
| err     | 一般错误消息。                                             |
| warning | 警告。                                                     |
| notice  | 不是错误，但是可能需要处理。                               |
| info    | 通用性消息，一般用来提供有用信息。                         |
| debug   | 调试程序产生的信息。                                       |
| none    | 没有优先级，不记录任何日志消息。                           |

（3）常用日志文件

| 日志目录            | 作用                                             |
| :------------------ | :----------------------------------------------- |
| /var/log/message    | 包括整体系统信息                                 |
| /var/log/auth.log   | 包含系统授权信息，包括用户登录和使用的权限机制等 |
| /var/log/userlog    | 记录所有等级用户信息的日志                       |
| /var/log/cron       | 记录 crontab 命令是否被正确的执行                |
| /var/log/vsftpd.log | 记录 Linux FTP 日志                              |
| /var/log/lastlog    | 记录登录的用户，可以使用命令 lastlog 查看        |
| /var/log/secure     | 记录大多数应用输入的账号与密码，登录成功与否     |
| var/log/wtmp        | 记录登录系统成功的账户信息，等同于命令 last      |
| var/log/faillog     | 记录登录系统不成功的账号信息，一般会被黑客删除   |

（4）日志配置

linux 系统日志相关配置文件为/etc/rsyslog.conf（syslog.conf），以下是对配置文件各项配置；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

（5）日志分析

日志查看分析，主要为 grep,sed,sort,awk 的综合运用；

##### 5.1、基于时间的日志管理：

5.1.1、`/var/log/wtmp` /var/log/wtmp 是一个二进制文件，记录每个用户的登录次数和持续时间等 信息； `last` 命令 last 命令用于显示用户最近登录信息。单独执行 last 命令，它会读取 `/var/log/wtmp` 的文件，并把该给文件的内容记录的登入系统的用户名单全部显示出来；

> -f: <记录文件>：指定记录文件 -a: 把从何处登入系统的主机名称或 ip 地址，显示在最后一行

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

5.1.2、`/var/run/utmp` /var/run/utmp 是一个二进制文件，记录当前登录系统的用户信息。可用 who 命令显示当中的内容，Who 的缺省输出包括用户名、终端类型、登录日期及远程主机；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

5.1.3、`/var/log/lastlog(lastlog)` /var/log/lastlog 记录用户最后登录的时间和登录终端的地址，可使用 lostlog 命令查看；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

5.1.4、`/var/log/btmp(lastb)` /var/log/btmp 记录错误登录的日志，可使用 lostb 查看，有很多黑客试图使用密码字典登录 ssh 服务，可以使用此日志查看恶意 ip 试图登录次数；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

> PS：登录日志可以关注 Accepted、Failed password 、invalid 特殊关键字；

##### 5.2、系统日志

```
/var/log/secure
```

安全日志 secure 包含验证和授权方面信息，比如最常用的远程管理协议 ssh，就会把所有授权信息都记录在这里。

所以通过查看该日志，我们就能查看是否有人爆破 ssh，通过查看存在过爆破记录的 ip 是否有成功登录的行为，我们就能知道是否有攻击者通过 ssh 暴力破解的方式成功攻击进来了。

通过时间的纬度去判断，可以查看出是机器行为还是人为的，机器登录事件间隔特别密；

主要分析点：是否有 ip 爆破 ssh 成功；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

定位有多少 IP 在爆破主机的 root 帐号：

\==grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

登录成功的 IP 有哪些：

\==grep "Accepted " /var/log/ secure | awk '{print $11}' | sort | uniq -c | sort -nr | more==

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

##### 5.3、中间件日志

Web 攻击的方法多种多样，但是默认情况下 Web 日志中所能记录的内容并不算丰富，最致命的是 web 日志是不会记录 post 内容的

一般来说我们的分析思路都是先通过文件的方式找到 webshell，然后再从日志里找到相应的攻击者 ip，再去分析攻击者的整个攻击路径，来回溯攻击者的所有行为；

如黑客在入侵完了之后把 webshell 删除了，通过文件搜索的方式找不到 webshell 或者只能通过分析 web 日志去发现 webshell

比如这时候要排查的话，难度会稍大。Web 日志主要分析 `access_log`，本文以常见的中间件 apache 为例，其他中间件日志格式和分析思路大同小异；

Apache 默认自动生成两个日志文件，`访问日志 access_log` 和 `报错日志 error_log`；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

Apache 日志字段说明：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

在对 WEB 日志进行安全分析时，可以按照下面两种思路展开，逐步深入，还原整个攻击过程；

1）首先确定受到攻击、入侵的时间范围，以此为线索，查找这个时间范围内可疑的日志，进一步排查，最终确定攻击者，还原攻击过程；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

2）一般攻击者在入侵网站后，通常会上传一个后门文件，以方便自己以后访问。我们也可以以该文件为线索来展开分析；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

##### 5.4、数据库日志

数据库日志以常用的数据库 Mysql 数据库为例。Mysql 数据库有五种日志，`错误日志`、`查询日志`、`慢查询日志`、`更新日志`、`二进制日志`，重点关注查询日志；查看是否开启查询日志：

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

查看数据库文件：路径为`/var/log/mysql/`，记录一次数据库的连接、查询和退出中间的数据库操作；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

在查询语句中搜索所有关键词为“union”的请求，可以发现 172.24.123.120 在尝试 SQL 注入，类似，通过通过特殊的关键词搜索有无敏感的数据库操作。如读取/etc/passwd 敏感文件，写 webshsll 等；

![图片](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/640)

### 处置建议与防御措施

#### 处置建议

- 断网或ACL隔离；
- 结束恶意进程；
- 提取木马样本；
- 删除木马；

#### 防御措施

- 安装杀毒软件，对被感染机器进行安全扫描和病毒查杀；
- 对系统进行补丁更新，封堵病毒传播途径；
- 制定严格的口令策略，避免弱口令；，
- 结合备份的网站日志对网站应用进行全面代码审计，找出攻击者利用的漏洞入口进行封堵；

#### 