发现异常的第一反应
凌晨3点收到监控告警,服务器CPU飙到100%,网站打不开了。这时候别慌,也别急着重启服务器。重启会丢掉内存里的攻击痕迹,后面排查就难了。
正确做法是立刻截图保存当前状态,然后登录服务器看进程。top命令看一下什么进程在吃CPU,netstat看一下什么IP在疯狂连接你。二七广场附近一家做电商的公司去年就是这么被搞的,凌晨被打了CC攻击,运维小哥直接重启服务器,结果攻击者埋的木马每次重启都自动拉起,折腾了三天才彻底清干净。
断网隔离保住数据
确认被攻击后,第一步是隔离。不是拔网线那么粗暴,而是在防火墙层面把对外服务全部封掉,只保留SSH管理端口,而且把SSH端口改成非标准端口。
为什么要隔离?因为攻击者可能已经拿到了服务器的部分控制权,如果你边排查他边搞破坏,你永远比他慢一步。隔离之后,攻击者远程连不上来,你才可以从容地排查。
具体操作:iptables或者firewalld把所有入站流量DROP掉,只放行你自己的管理IP。如果你的服务器在郑州机房托管,可以让机房帮你在上层交换机做ACL,效果更彻底。
日志分析找入侵路径
隔离完了就开始查日志,这是最关键的一步。要回答三个问题:攻击者从哪进来的?进来了多久?动了什么东西?
查日志的顺序:先看Web访问日志找攻击特征,再看系统日志找提权痕迹,另外看命令历史找后门。
说个真实案例。金水区某企业网站被挂马,我去看的时候发现Web日志里有个IP在凌晨2点疯狂请求一个upload.php接口,上传了一个伪装成图片的PHP文件。这就是入侵入口。然后翻系统日志,发现这个PHP文件被执行后,攻击者通过这个webshell下载了一个提权脚本,拿到了root权限。整个入侵过程不到15分钟。
找到了入侵路径,你才知道该堵哪个漏洞。不然你修了半天可能修了个没用的地方,真正的入口还敞着。
清除后门修复漏洞
攻击者通常不会只留一个后门。常见的后门位置:crontab定时任务、SSH authorized_keys、系统启动项、Web目录下的伪装文件。
排查方法:crontab命令看定时任务有没有奇怪的条目;检查ssh目录下的authorized_keys有没有不认识的公钥;ls看tmp、var/tmp、dev/shm这几个目录是攻击者最爱放东西的地方;find命令找最近修改过的PHP文件。
找到后门全部清除之后,修复入侵漏洞。如果是Web漏洞,更新对应的应用版本或者打补丁。如果是系统漏洞,把系统包全部更新。别忘了改掉所有密码:root密码、数据库密码、FTP密码、后台管理密码,一个都不能少。
别嫌麻烦。我见过管城区一家公司被黑之后只改了root密码没查后门,结果三天后又被打回来了。攻击者留的那个crontab定时任务每4小时自动下载木马,你改密码有什么用?
恢复服务和事后加固
漏洞修完了,后门清干净了,确认服务器干净了再恢复对外服务。恢复之后别松懈,做几件事。
第一,把这次攻击的日志和复盘记录存档,以后遇到类似情况能快速定位。第二,部署一个入侵检测系统,比如fail2ban或者WAF,下次有人尝试攻击你能在第一时间收到告警。第三,把这次事件中暴露的安全短板补上,比如SSH禁止密码登录只允许密钥、数据库不开外网端口、后台管理加IP白名单。
安全这件事没有一劳永逸。攻击者的手段在升级,你的防御也得跟上。花几百块买个服务器安全审计服务,比被攻击后损失几万块划算多了。说白了,安全防护的成本永远是最低的,出事之后的补救才是最贵的。