遭受攻击后的处理流程
1. 断开网络
- 99%的攻击源于网络,首要断开网络
- 切断服务器与攻击源的连接
- 保护网络中的其它服务器
2. 查找攻击源
- 分析用户登录日志文件
# 登录记录
last -f /var/log/wtmp
# 失败登录记录
last -f /var/log/btmp
# 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里
# 查找登录成功的记录
cat /var/log/secure |grep Accepted
Apr 6 18:29:17 k8srancher sshd[13208]: Accepted password for root from 10.112.0.102 port 55519 ssh2
Apr 6 20:20:23 k8srancher sshd[16425]: Accepted password for root from 10.112.0.102 port 58263 ssh2
Apr 7 09:23:23 k8srancher sshd[4373]: Accepted password for root from 192.168.198.23 port 43704 ssh2
Apr 7 11:28:23 k8srancher sshd[8237]: Accepted password for root from 192.168.198.23 port 53022 ssh2
Apr 7 15:42:38 k8srancher sshd[19805]: Accepted password for root from 192.168.198.23 port 58957 ssh2
- 查看是否有异常定时任务
# 查看定时任务执行日志
cat /var/log/cron
# 列出定时任务
crontab -l
- 查看系统日志
# 包括整体系统信息,其中也包含系统启动期间的日志。
# 此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
# 从头输出前100行
head -n 100 /var/log/messages
- 查看是否有可疑用户
# 检查/etc/passwd和/etc/shadow文件中是否有可疑用户
# nologin权限之外的用户
cat /etc/passwd |grep -v "/sbin/nologin"
# 查看哪些用户被设置密码
cat /etc/shadow
# 设置密码显示格式
root:$6$cO6Wp7CYPmvpYdL6$8V0WR5RMkSV7MbYCgk6q3u0sCro0Ubk4YWfC.XAZjrzuTb1rQyExxMrqicmsAvx9Br7mF/::0:99999:7:::
# 无密码显示格式
systemd-network:!!:18010::::::
mail:*:17834:0:99999:7:::
- 查看用户历史命令
# 默认在每个用户目录下记录历史命令的文件.bash_history
# 查找异常的操作命令历史
cat /root/.bash_history
-
rootkit检查,推荐使用RKHunter
-
查看可疑进程并关闭
# 通过ps、top查找可疑进程
top - 16:59:54 up 38 min, 1 user, load average: 0.29, 0.32, 0.26
Tasks: 279 total, 1 running, 278 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.4 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 24521024 total, 17621316 free, 1879020 used, 5020688 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 22219144 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12690 root 20 0 771748 510392 42404 S 3.3 2.1 1:09.55 kube-apiserver --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserve+
12452 root 20 0 10.3g 154036 20596 S 2.3 0.6 0:34.74 /usr/local/bin/etcd --initial-cluster-state=existing --cert-file=/etc/kub+
1830 root 20 0 1694460 110852 30236 S 1.7 0.5 3:07.41 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
13355 root 20 0 1345696 87220 33768 S 1.7 0.4 0:21.87 kubelet --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --pod-inf+
18846 root 20 0 2002100 41240 17144 S 1.0 0.2 0:07.99 calico-node -felix
# 查看对应PID目录下exe文件信息,如果是容器进程,得到的路径是基于容器目录的
[root@node ~]# ls -al /proc/12690/exe
lrwxrwxrwx 1 root root 0 Apr 7 16:43 /proc/12690/exe -> /usr/local/bin/kube-apiserver
[root@node ~]# ls -al /proc/18846/exe
lrwxrwxrwx 1 root root 0 Apr 7 17:00 /proc/18846/exe -> /usr/bin/calico-node
# 查找进程所在的容器id
docker inspect -f "{{.Id}} {{.State.Pid}}" $(docker ps -q) |grep <PID>
# 以pid为12690为例,找到其容器id,然后验证上面查找出的exe路径
[root@node ~]# docker inspect -f "{{.Id}} {{.State.Pid}}" $(docker ps -q) |grep 12690
17aed2e7494d8b1c6d24d473e8a2e6134afcd38d031b6c120c8afdf24ed451d2 12690
[root@node ~]# docker exec -it 17ae ls -al /usr/local/bin/kube-apiserver
-rwxr-xr-x 1 root root 118722560 Mar 12 21:00 /usr/local/bin/kube-apiserver
- 查找可疑的监听端口
# 一般来说应用服务器都有其固定使用的端口,入侵者会伪装自己,避免和已有业务端口冲突造成暴露
# 查看tcp
netstat -ntlp
# 查看udp
netstat -nulp
3. 分析入侵原因和途径
- 查找系统版本公开漏洞
- 查找应用漏洞,分析应用日志