问题现象:
刚才开始只有9台服务器异常,过一会有34台服务器异常。内网在传播。
收到阿里云的提醒:您的云服务器(8.211.xx.xx)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:6379)的访问,阻断预计将在2021-07-17 10:46:50时间内结束,请及时进行安全自查。若有疑问,请工单或电话联系阿里云售后。 感谢您对阿里云的支持。
阿里云云安全中心发现,计划任务在下载恶意脚本。
登录服务器发现,计划任务被篡改
查看计划任务日志,第一次是下载init.sh,后面每个40分钟,整点执行/etc/newinit.sh脚本
服务器top命令被修改,使用其他正常机器上传top命令。
通过分析发现有两个异常进程,zzh和pnscan
pnscan:扫描程序,过一会就会换pid
zzh: 挖矿程序
ps查看进程正在执行下载恶意脚本
恶意脚本init.sh
init.sh
恶意脚本分析:
- 替换了top/ps/pstree/wget/curl系统命令,替换过的ps top pstree命令过滤了zzh和pnscan进程。
- 卸载了阿里云的云监控agent
- 计划任务植入下载恶意脚本并重复执行。
- 下载zzh挖矿程序并运行
- /root/.ssh/authorized_keys注入了key
- 脚本会找/root/.ssh/known_hosts文件登录过的服务器,尝试ssh进一步感染传播
- /etc/resolv.conf 新增了一个dns:nameserver 1.1.1.1
- 很多关键目录新增了chattr +a +i权限,导致不能正常删除和修改
问题根因:
服务器redis没设置密码,切redis是已root身份运行的。利用了无密码进入redis
config set dir
config set dbfilename
save
具体原理参考:https://www.52pojie.cn/thread-1393261-1-1.html
我们服务器redis是没有公网对外的,后排查是因为公司内部有机器被感染,然后传播到阿里云服务的。
处理步骤:
杀病毒进程
killall -9 zzh killall -9 pnscan
临时chattr权限,增加可自行权限
chmod +x /bin/chattr
删除异常文件
chattr -i -a /usr/local/bin/pnscan rm -rf /usr/local/bin/pnscan
清理异常计划任务
chattr -a -i /var/spool/cron/root echo ‘’ >/var/spool/cron/root chattr -i -a /etc/crontab; echo ‘’ >/etc/crontab chattr -i -a /etc/cron.d/; chattr -i -a /etc/cron.d/zzh; rm -rf /etc/cron.d/zzh
删除zzh二进制挖矿程序
chattr -i -a /etc/zzh rm -rf /etc/zzh chattr -i -a /etc/zzhs rm -rf /etc/zzhs
清空authorized_keys文件
chattr -i -a /root/.ssh/authorized_keys chattr -i -a /root/.ssh/ echo ‘’ >/root/.ssh/authorized_keys
删除恶意脚本
chattr -i -a /etc/newinit.sh rm -rf /etc/newinit.sh
其他
chattr -i /usr/lib/systemd/systemd-update-daily rm -rf /usr/lib/systemd/systemd-update-daily chattr -i /tmp/kdevtmpfsi rm -rf chattr -i /tmp/kdevtmpfsi chattr -i /usr/bin/ip6network chattr -i /usr/bin/kswaped chattr -i /usr/bin/irqbalanced chattr -i /usr/bin/rctlcli chattr -i /usr/bin/systemd-network chattr -i /usr/bin/pamdicks
/etc/resolv.conf文件删除nameserver 1.1.1.1 这一行
chattr -e -i /etc/resolv.conf sed -i ‘/1.1.1.1/d’ /etc/resolv.conf
3. 恢复命令,从其他机器拷贝以下命令到机器
/usr/bin/ps<br />/usr/bin/top<br />/usr/bin/wget<br />/usr/bin/curl<br />/usr/bin/chattr<br />/usr/bin/pstree
4. 进入redis flushall,停止redis.
```shell
echo -e "config set dir /\nconfig get dir\nconfig set dbfilename dump.rdb\nconfig get dbfilename"|redis-cli
改进方案:
- redis增加密码
- redis绑定127.0.0.1
- redis非root启动