问题发现:
- 系统出现了个挖矿的docker容器,删除了但忽略了(根源在此,docker容器的远程端口没有认证,出现了问题)
- 执行sudo或htop命令输出奇怪字符
- 执行touch等创建文件命令,生成的文件读写权限很奇怪
问题探索:
- 开始以为是sudo、bash或htop的问题
- 使用strace跟踪调用发现了奇怪的
write(1, "\210$\255\373", 4)
- 查看htop、sudo等对应版本源码,发现可能是某些系统lib的问题
- 使用strace跟踪调用发现了奇怪的
- 意识到是共享库出问题了
- 然后发现用touch后其他创建的文件的权限(chmod的读写执行权限)很奇怪
- 调查touch源码没有发现异常
- 用C写了个
open
创建文件的代码发现文件的权限始终是002
,无论如何都改不了 - 在另一个同样操作系统上对比同样代码的strace,发现有不一样的
open(... /usr/lib/libc.so.9)
系统调用
- 意识到可能是这个libc.so.9的问题
- 查看该文件发现是最近创建的,确定就是它的问题
- 一直在查看sshd的日志,发现这个文件创建时有root的登录操作
原因探索:
- 将
/usr/lib/libc.so.9
删除后,命令执行的时候都会报一个错误,和/lib64/libacl.so
相关,感觉问题不大就先,没处理 - 第二天发现删除的文件又回来了!查看日志发现文件回来的时间(创建时间)有一个docker容器启动了,
docker container ls -a
查看果然看到了一个容器,然后意识到可能是docker的远程端口漏洞,结果发现Docker远程端口2375没有任何认证 - 至此大概知道问题根源:Docker远程端口被利用,挂载了系统文件并将公钥写到ssh中,同时启动了容器执行挖矿脚本,并创建了有问题的动态库
/lib64/libacl.so -> /usr/lib/libc.so.9
,导致程序执行异常
加固:
- 将ssh的Root登录禁用
- 使用fail2ban加固系统,防止ssh爆破