V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guiling
V2EX  ›  信息安全

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

  •  
  •   guiling · 16 天前 · 6037 次点击

    白天在外面浪的好好的,收到客户反馈服务崩了,服务器上去一看两个“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 多个矿机。。。估计都是肉鸡

    第 1 条附言  ·  10 天前
    追加个后续,曝光下挖矿的信息,好像没啥人关注,是不是标题骂的太直白了(狗头
    https://v2ex.com/t/1070677
    35 条回复    2024-09-02 17:53:34 +08:00
    wangsongyan
        1
    wangsongyan  
       16 天前 via iPhone   ❤️ 3
    成功被标题里的“Go”吸引到了
    DefoliationM
        2
    DefoliationM  
       16 天前 via Android
    docker 又不是虚拟机,没有虚拟磁盘,文件当然会存在宿主机文件系统上了。
    Java 依赖包也有可能投毒,况且 Java 还有 java-agent 这种东西,想干什么更方便。
    gesse
        3
    gesse  
       16 天前
    “因为容器创建都 1 年多了,中途都是拷贝代码到容器重启”
    ---
    最少两三个月更新下吧
    yinmin
        4
    yinmin  
       16 天前   ❤️ 6
    推荐一种 docker 容器防止入侵的通用防御方式:把容器配置成不允许访问 internet ,能抵御 99%的漏洞入侵。这是因为:入侵需要下载木马程序到容器里,容器无法访问 internet 能阻止入侵实施。

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

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

    更强的方式是容器无网卡,容器间通信使用 unix socket 文件方式,更安全。
    xiaomoxian
        5
    xiaomoxian  
       16 天前 via Android
    源 才是祸首 开源的真实目的
    falcon05
        6
    falcon05  
       16 天前
    @yinmin 一点也不通用,只适合不需要访问外网的容器。
    dallaslu
        7
    dallaslu  
       16 天前   ❤️ 2
    这和 Go 有啥关系?直接说“狗日的”会怎么样?
    xsharp
        8
    xsharp  
       16 天前
    挖矿可能只是其中一步,可能还会扫描你的数据,尝试入侵内网服务器,找到更有价值的数据,然后锁你的数据,再然后如果你是大些的公司,可能会给你发勒索邮件,或者上勒索名单。
    laminux29
        9
    laminux29  
       15 天前   ❤️ 1
    兄弟你要更新一下思路了。

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

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

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

    做好心理准备,事先想好应对之策。
    ShikiSuen
        10
    ShikiSuen  
       15 天前 via Android
    @dallaslu go 语言经常被用于挖矿木马
    levelworm
        11
    levelworm  
       15 天前 via Android
    @ShikiSuen 原来还有这种用途,得去看看源代码学习 Go 。虽然对黑产毫无兴趣,但是技术上也许挺好玩的。
    guiling
        12
    guiling  
    OP
       15 天前 via Android
    @dallaslu 没关系,只是不想骂的太直白,实际刀了他的心都有
    swulling
        13
    swulling  
       15 天前 via iPhone
    中了病毒或者木马,非专业人士还是直接重装吧。

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

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

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

    黑客入侵的第一步往往需要用到 curl 或 wget 命令,基础镜像选基于 debian 或 ubuntu 多一份安全。
    cdlnls
        18
    cdlnls  
       15 天前 via Android   ❤️ 1
    不太可能是基础镜像的问题,实现起来很难。dockerfile 里面都是写死了容器启动命令,病毒就算打包在镜像里面,也不会自己启动。

    唯一可能就是系统用了有漏洞的框架和库,服务端口暴露在公网,然后恰好被扫描到了。(另外这一堆脚本可能是不同的人植入的)
    Jhma
        19
    Jhma  
       15 天前
    检查操作系统对外开放的端口,操作系统防火墙关闭或者限制 IP 访问非公共服务端口,然后外面的硬件防火墙也是同样设置,并限制下面服务器的出站访问即不能上网,这样排查以后还会有病毒产生的话那就是公共服务端口有漏洞的问题了
    guiling
        20
    guiling  
    OP
       15 天前 via Android
    @cdlnls 我也倾向于这点,但看了最近代码没有引入新库,可能还得往前再排查排查~
    guiling
        21
    guiling  
    OP
       15 天前 via Android
    @yinmin Java 项目,跟 go 没关系,抱歉标题有歧义哈哈
    guiling
        22
    guiling  
    OP
       15 天前 via Android
    @Jhma 有的,安全组只开了要用的端口
    guanzhangzhang
        23
    guanzhangzhang  
       15 天前
    docker 的容器的 rootfs 是一层 overlay2 的 diff 层,也就是容器产生的文件可以在/var/lib/docker/overlay2/xxx/merged/ 或者 xxx/diff/下看到,因为病毒是容器内下载的,你 touch 一个文件一样的可以看到
    assassing
        24
    assassing  
       15 天前
    @yinmin #4 通用方法是将服务器外网网卡解梆。如果需要调用外网服务 API ,统一走代理服务器,防护好代理服务器即可。
    bestcondition
        25
    bestcondition  
       15 天前 via Android
    @guiling 那你应该改成,Java 日的挖矿病毒
    azraeljack
        26
    azraeljack  
       15 天前
    这标题写的。。。还以为什么 go 依赖被投毒了
    guiling
        27
    guiling  
    OP
       15 天前 via Android
    @guanzhangzhang 是的,病毒文件就在 merged/tmp,就是不知道哪个进程或者程序把文件拉下来的
    guiling
        28
    guiling  
    OP
       15 天前 via Android
    @azraeljack
    @assassing 我的锅,发的时候没考虑到会碰瓷到 go ,只是不想骂得那么直白
    Achophiark
        29
    Achophiark  
       15 天前
    告诉你我是怎么解决的,我把主机 cpu 后来只给 4 核心,就好了, 挖矿程序检测到没有可挖掘的 cpu 价值就不启动了。然后记得在主机启动个 server status 监控程序。
    supersu
        30
    supersu  
       15 天前 via Android
    🌿,我今天也遇到了,病毒的进程名伪装成了 perfctl,也是在 docker 的 tmp 下面,宿主机的 overlay 下面也有,原因是启动了暴露在公网的 selenium 容器,我用的 cloudcone 的便宜 vps,不支持安全组,本机开了 ufw 防火墙,后来查了一下说是 ufw 防火墙和 docker 有冲突不生效,但是我奇怪的是我用 netcat 命令测试我的允许访问的 80 ,443 端口时可以通,我访问 selenium 里面 java 启动的默认的 4444 端口的时候,返回了 no host to route ,也就是不通被防火墙拦截了,好奇是怎么黑进来的~
    guanzhangzhang
        31
    guanzhangzhang  
       14 天前
    @guiling #27 这个一般都是容器内下载的,这样实际位置就是 overlay2/xxxx/merged/tmp
    guiling
        32
    guiling  
    OP
       14 天前
    @supersu 推测最初应该是某个带毒的依赖带进来的脚本,然后他会下载 sshd 程序,还有个 ssh 脚本的定时任务估计是做保活的,至于端口应该是占用容器映射的端口作为他 ssh 的端口,然后基本就完全控制容器了
    sampeng
        33
    sampeng  
       14 天前
    其实我很好奇。。。是怎么带进来的。一般机器都是不开外网只有一个 80443 在外面还是负载均衡。当然,代码有 bug 那 Go 日的是研发了。。
    jianyang
        34
    jianyang  
       14 天前
    还以为是 GO , 原来是 Go
    前段时间我有台机器 也是被挂了 xmr ,我怎么都想不明白真没被挂的、机器很干净、就安装了 1panel nginx 搭建了个网站
    并且也没找到木马、后门,就一个 xmr 的挖矿程序和一些配置文件、文件夹名都没改
    网站是应该安全的、就只是期间有让机房运维登录了几次处理了几次问题、 也不太可能是 root pass 爆破
    怀疑过机房运维、可是没证据、又感觉机房运维不至于做这种事吧

    另外清理了挖矿程序、改了 root pass , 后面也没再出现了
    crc8
        35
    crc8  
       14 天前
    好一个 Go 日的挖矿病毒。牛!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:03 · PVG 03:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.