前段时间公司发生了一起服务器入侵事件, 在此分享给大家也顺便理顺下 Linux 入侵应急响应思路.
一, 事件描述
某天监控同事反馈有台机器 CPU 飙高到 2000%, 可能机器已经被黑. 于是登录上去查看, 果然有个进程名为 "HT8sUy71″的进程在作祟, 这一看名字就不大可能是正常进程.
二, 处理过程
2.1 查杀病毒进程
CPU 占用率如此之高, 基本可判断为挖矿程序无疑了, 使用在线威胁情报系统对进程进行检测, 不出所料, 得出的标签是 coinminer. 这种挖矿进程一般都有自动重启机制, 可能是某个进程的子进程, 也可能在 cron 定时任务里出现.
首先, 检查 cron 定时任务, 发现 / var/spool/cron/crontabs/root 和 / etc/cron.d/tomcat 文件修改时间有变化, 但是内容却无改动.
然后, 使用 ps -ef 进行查找主进程, 并无收获. 同时发现此挖矿进程正在和 "172.105.114.84" 这个 ip 的 8443 端口进行通信, 可能是黑客的一台远控服务器.
之后, lsof 查看此进程在操作哪些文件, 也无实际收获.
推测一定是有某个主进程在工作, so, 继续通过 ps 和 netstat 查找监听所监听端口的异常. 果不其然, 看到异常进程, 正在批量爆破, 看来是被当做肉鸡了. 同时使用 lsof 查看此进程文件, 发现在调用 / root/.ddg/4003.db 文件, 貌似是个加密的社工库.
判断是此程序即是主程序, kill 掉挖矿进程后, 使用 strace -T -tt -e strace=full 进行跟踪, 发现主进程先对挖矿进程增加可执行权限, 之后拉起进程.
那么现在 kill 掉主进程吧, 发生个小插曲, 发现主进程 pid 一直在变化, 好吧, 直接 killall osryfa3.
至此, 算是暂时消停一下, 简单总结一下此病毒特征, 其一方面释放挖矿病毒进行挖矿, 同时又对公网 SSH 服务进行爆破以扩大感染面. 在这里同时给了我一个提醒, 或许这台服务器就是通过 SSH 爆破被入侵的.
2.2 查找入侵痕迹
一般情况下, 入侵可能有以下几种方式:
a. 各种弱口令爆破
b. 系统漏洞的利用
c. 应用漏洞的利用
上面说了, 可能是通过 SSH 爆破被入侵的, 我们先来验证一下.
查看登录日志, 发现异常 (下图是已经过滤掉正常登录的日志), 基本可断定是通过 SSH 爆破入侵了, 也可以断定 SSH 的访问控制已经失效.
cat /var/log/secure* | grep Accepted
结合以上 ip 查看爆破日志, 确认以上 ip 的用户不是同一个人, 是刚好有这么多 ip 同时爆破了 root 账户, 而且最短的爆破时间只花了 1 分钟. 想来这个 root 账户必然是个弱密码了. 继续查找 Failed 日志的最早时间如下:
cat /var/log/secure* | grep Failed
基本可断定在这之前有人动过访问控制策略了, 询问运维人员无果.....
stats 查看 iptables,/etc/hosts.allow 和 / etc/hosts.deny 文件状态, 结合. bash_history 命令, 一切真相大白, 一言难尽, 你们自己体会.
2.3 病毒文件的清理
首先, 使用 stat 查看上面两个进程的修改时间, 大约在 7 月 8 号早上 6 点多, 而 SSH 系统最早爆破时间是 7 月 6 号 16:41.
然后, 结合这两个时间来查找敏感目录中被修改过的系统文件, 进行检查修复和清除.
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ /var/spool/cron/ -type f -mtime -3 | xargs ls -l
最后 , 使用 chkrootkit,clamav,rkhunter 一通查杀, 当然, 还是重装系统最保险.
三, 总结
首先啰嗦一下, 关于 Linux 主机, 高危端口真得万万不能全网开放. 看了日志后, 发现黑客真是时时刻刻在爆破啊.
关于 Linux 入侵的排查思路, 总结如下:
1. 查看异常进程活动 - 查找是否有异常进程和端口占用
1.1 查找占用 CPU 最多的进程, 相关命令: 运行 top 命令后, 键入大写字母 P 按 CPU 排序;
1.2 查找占用内存最多的进程, 相关命令: 运行 top 命令后, 键入大写字母 M
ps aux | sort -k4nr
1.3 查找进程文件:
ls -la /proc/$pid/exe
1.4 跟踪异常进程运行情况:
strace -tt -T -e trace=all -p $pid
1.5 查看进程打开的文件
lsof -p $pid
1.6 查看进程端口情况
netstat -anltp | grep $pid
2. 查看账号安全
2.1 查看是否有存在新增异常账号:
a. 查找特权用户
awk -F ":" '$3==0{print $1}' /etc/passwd
b. 查找可以远程登录的账号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
c. 查找 sudo 权限账户
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
2.2 查看是否有账号异常登录情况:
a. 查看当前登录用户和其行为
w
b. 查看所有用户最后一次登录的时间
lastlog
c. 查看所有用户的登录注销信息及系统的启动, 重启及关机事件
last
d. 查看登录成功的日期, 用户名及 ip
grep "Accepted" /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
e. 查看试图爆破主机的 ip
- grep refused /var/log/secure* | awk {
- 'print $9'
- } | sort | uniq -c |sort -nr | more
- grep "Failed password" /var/log/secure* | grep -E -o "(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}))" | uniq -c
f. 查看有哪些 ip 在爆破主机的 root 账号
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort
g. 查看爆破用户名字典
grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr
3. 查找异常文件
3.1 查找 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/*
3.2 查看最近一段时间内被修改的系统文件
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime -T | xargs ls -la
3.3 按时间排序, 确认最近是否有命令被替换, 可以结合 rpm -Va 命令
- ls -alt /usr/bin /usr/sbin /bin /usr/local/bin
- rpm -Va>rpm.log
3.4 确认是否有异常开机启动项
- cat /etc/rc.local
- chkconfig --list
4. 借助工具查杀病毒和 rootkit
4.1 查杀 rootkit
- chkrootkit (下载地址 - http://www.chkrootkit.org)
- rkhunter (下载地址 - http://rkhunter.sourceforge.net)
4.2 查杀病毒
clamav(下载地址 - http://www.clamav.net/download.html)
4.3 查杀 webshell
cloudwalker(下载地址 - http://github.com/chaitin/cloudwalker)
工具用法不再赘述, 大家自行查阅.
来源: http://www.tuicool.com/articles/fQnIJrU