Go 日的挖矿病毒,好好的周末被毁了

2024-08-31 23:44:16 +08:00
 guiling

白天在外面浪的好好的,收到客户反馈服务崩了,服务器上去一看两个“xm”进程 cpu300%。。。另一个同事卡的 ssh 都连不上

查到最后发现是 docker 里起的服务,病毒文件在容器 tmp 目录里,宿主机/var/lib/docker/overlay2/容器 id/merged/tmp 也有

病毒是个挖矿程序,跟这个帖子一样 https://www.v2ex.com/t/969255 ,也是 c3pool 的账号

这个病毒挺能潜伏的,有日志文件,发现两个月前就在了,只是 cpu 占用不高没被发现,容器里一堆脚本 networkSync 、kdevtmpfsi 、watchdogs

目前处理方法是重新构建了镜像(怀疑是很久之前某次构建镜像源有问题?因为容器创建都 1 年多了,中途都是拷贝代码到容器重启)

这种人有办法搞他么?脚本备份了,有他 c3pool 的 user 信息,暂时先不放出来,怕被看到,因为不确定毒是否清干净了,咱也不是专业运维

有两个问题希望有遇到过的老哥能解惑下 1 、tmp 目录没映射为啥宿主机也有对应的文件,是 docker 内部能越权还是 docker 内所有文件宿主机都能直接查到? 2 、相同代码、依赖镜像还有其他容器,但是只有这个出了问题,除了镜像源投毒,java 依赖包有可能干这事么

这个病毒挺能潜伏的,有日志文件,发现两个月前就在了,只是 cpu 占用不高没被发现

提醒下各位同志们检查下自己服务器 tmp 或者容器 tmp ,有没有可疑文件( xm 、networkSync 、kdevtmpfsi 、watchdogs 之类的),这货账号下有 100 多个矿机。。。估计都是肉鸡

9001 次点击
所在节点    信息安全
35 条回复
wangsongyan
2024-08-31 23:54:01 +08:00
成功被标题里的“Go”吸引到了
DefoliationM
2024-09-01 00:00:29 +08:00
docker 又不是虚拟机,没有虚拟磁盘,文件当然会存在宿主机文件系统上了。
Java 依赖包也有可能投毒,况且 Java 还有 java-agent 这种东西,想干什么更方便。
gesse
2024-09-01 00:04:48 +08:00
“因为容器创建都 1 年多了,中途都是拷贝代码到容器重启”
---
最少两三个月更新下吧
yinmin
2024-09-01 00:17:44 +08:00
推荐一种 docker 容器防止入侵的通用防御方式:把容器配置成不允许访问 internet ,能抵御 99%的漏洞入侵。这是因为:入侵需要下载木马程序到容器里,容器无法访问 internet 能阻止入侵实施。

创建不允许访问 internet 的内部网络模式 (加 --internal 参数):
docker network create --driver bridge --internal internal_network

创建容器时指定这个内部网络:
docker run --network internal_network ...

更强的方式是容器无网卡,容器间通信使用 unix socket 文件方式,更安全。
xiaomoxian
2024-09-01 00:46:53 +08:00
源 才是祸首 开源的真实目的
GG668v26Fd55CP5W
2024-09-01 01:44:32 +08:00
@yinmin 一点也不通用,只适合不需要访问外网的容器。
dallaslu
2024-09-01 02:06:32 +08:00
这和 Go 有啥关系?直接说“狗日的”会怎么样?
xsharp
2024-09-01 02:22:34 +08:00
挖矿可能只是其中一步,可能还会扫描你的数据,尝试入侵内网服务器,找到更有价值的数据,然后锁你的数据,再然后如果你是大些的公司,可能会给你发勒索邮件,或者上勒索名单。
laminux29
2024-09-01 03:15:56 +08:00
兄弟你要更新一下思路了。

1.系统有一千个漏洞,你浪费了无数个周末,修复了 999 个,但只要遗漏一个漏洞,病毒就会沿着这个漏洞攻入。

2.就算你修复了所有漏洞,只要是人,就会犯错,说不定哪天某组件又爆了漏洞,病毒同样也会进来。

所以,系统中毒,是一个常态,你平时就要想好,怎么去处理这个问题。包括不间断不删档的备份,包括晚上周末五一国庆节假日时病毒爆发等等。

做好心理准备,事先想好应对之策。
BEza5k2j7yew0VN9
2024-09-01 04:02:03 +08:00
@dallaslu go 语言经常被用于挖矿木马
levelworm
2024-09-01 07:07:35 +08:00
@ShikiSuen 原来还有这种用途,得去看看源代码学习 Go 。虽然对黑产毫无兴趣,但是技术上也许挺好玩的。
guiling
2024-09-01 08:41:44 +08:00
@dallaslu 没关系,只是不想骂的太直白,实际刀了他的心都有
swulling
2024-09-01 08:42:12 +08:00
中了病毒或者木马,非专业人士还是直接重装吧。

你怎么保证自己清除干净呢?
guiling
2024-09-01 08:43:32 +08:00
@gesse 更新什么呢?如果只是重新构建的话依赖镜像版本都是一样的
guiling
2024-09-01 08:58:21 +08:00
@xsharp 最担心的就是这些,目前除了文件没发现有越权到宿主里的行为
@laminux29 确实,不过服务器上没有重要数据,都是代码,实在不行是可以重装系统重新部署的
感谢各位提醒,抱拳 @xiaomoxian @DefoliationM
yinmin
2024-09-01 09:29:43 +08:00
@falcon05 #6 如果业务容器需要访问 internet 特定的资源,可以建立一个反向代理容器,业务容器只能通过反向代理容器访问 internet 。

如果需要访问的 internet 特定资源都是 https 协议,推荐 sniproxy ,业务容器设置 host 参数将 https 域名指向 sniproxy 容器 ip (让 gpt 写一个 dockerfile ,基于 debian12 的 sniproxy ,别用 hub.docker.com 上的第三方镜像)
yinmin
2024-09-01 09:34:51 +08:00
@guiling 基础 golang 镜像不要选基于 alpine ,选基于 debian ( bookworm )

alpine 内置 busybox 支持太多的命令了,debian 很干净,curl 、wget 、ping 、lsof 、netstat 啥都没有。

黑客入侵的第一步往往需要用到 curl 或 wget 命令,基础镜像选基于 debian 或 ubuntu 多一份安全。
cdlnls
2024-09-01 09:37:13 +08:00
不太可能是基础镜像的问题,实现起来很难。dockerfile 里面都是写死了容器启动命令,病毒就算打包在镜像里面,也不会自己启动。

唯一可能就是系统用了有漏洞的框架和库,服务端口暴露在公网,然后恰好被扫描到了。(另外这一堆脚本可能是不同的人植入的)
Jhma
2024-09-01 09:54:07 +08:00
检查操作系统对外开放的端口,操作系统防火墙关闭或者限制 IP 访问非公共服务端口,然后外面的硬件防火墙也是同样设置,并限制下面服务器的出站访问即不能上网,这样排查以后还会有病毒产生的话那就是公共服务端口有漏洞的问题了
guiling
2024-09-01 11:35:23 +08:00
@cdlnls 我也倾向于这点,但看了最近代码没有引入新库,可能还得往前再排查排查~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069292

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX