上个月有台服务器被入侵了,当时吓出一身冷汗。好在之前学过一些应急响应的知识,处理得还算及时,没造成太大损失。今天就把整个排查过程写下来,给没遇到过这种情况的朋友参考参考。
一、怎么发现被黑的?
说起来挺丢人的,我是收到云厂商的告警短信才知道的。说我的服务器在往外发送大量流量,疑似中了挖矿木马。我赶紧登上服务器一看,CPU占用率99%,一个叫kworkerds的进程在疯狂挖矿。
其实早点留意的话是有迹象的,比如前几天服务器偶尔会卡一下,我以为是正常负载波动,没当回事。所以大家平时一定要多关注服务器的监控数据,异常早发现。
二、紧急处理步骤
发现被入侵后,千万别慌,按照步骤来:
1. 先断网
不是拔网线,是先把对外的服务停掉,或者直接在安全组里把端口都封了。这样就算黑客还在里面,也没法继续搞事,也没法把你的数据传出去。
2. 保留现场
这是很多人忽略的一步。别急着清理,先把当前的状态记录下来:
- 用ps把所有进程列表保存下来
- 用netstat把网络连接保存下来
- 把/var/log下的日志打包备份
- 用last命令查看登录记录
- 查看crontab有没有被篡改
这些信息对后续分析入侵路径很重要。
3. 杀掉可疑进程
我那个案例里,挖矿进程很明显,直接kill掉就行。但有些木马会伪装成系统进程,要仔细辨别。注意看进程的启动路径,系统进程一般在/usr/bin、/usr/sbin这些目录,如果发现一个系统进程从/tmp或/var/tmp启动的,那基本就是有问题的。
三、排查入侵路径
杀掉进程只是治标,找到入侵路径才能治本。我排查了以下几个方面:
1. 查看登录日志
last -f /var/log/wtmp
lastb -f /var/log/btmp
看有没有异常的登录记录,特别是异地IP。我那台服务器就发现有个海外IP用root账号登录过,但我从来没在海外登录过。
2. 检查SSH配置
一看/etc/ssh/sshd_config,发现PermitRootLogin被改成了yes,而且authorized_keys里多了一个我不认识的公钥。这是典型的SSH密钥后门。
3. 查看crontab
crontab -l一看,果然被加了一条定时任务,每隔几分钟从远程下载脚本执行。这就是为什么杀掉进程后会重新出现的原因。
4. 检查启动项
ls /etc/init.d/ 和 systemctl list-unit-files 都要看,看看有没有可疑的开机启动服务。
5. 查看最近修改的文件
find / -mtime -7 -type f | head -100
这个命令可以找到最近7天内被修改的文件,帮你想缩小排查范围。
四、修复和加固
找到问题后,就是修复和加固了:
1. 删除黑客添加的SSH密钥和定时任务
2. 修改所有密码,包括root密码、数据库密码等
3. 禁止root远程登录,改用密钥认证
4. 修改SSH默认端口
5. 安装fail2ban防暴力破解
6. 配置防火墙,只开放必要端口
7. 开启系统自动更新
五、预防措施
事后我总结了几个预防要点:
- 密码一定要复杂,最好用密钥认证
- 端口别用默认的,至少改掉SSH的22端口
- 及时更新系统补丁
- 安装入侵检测工具,如rkhunter、chkrootkit
- 重要服务器配好监控告警
- 定期检查登录日志和crontab
被入侵这种事,不遇到的时候觉得离自己很远,遇到了才知道后悔。希望这篇文章能帮到你,别像我一样等到出了问题才重视安全。
有什么问题欢迎留言,也可以分享你遇到过的安全事件,大家互相学习。
