事故还原

近日,白泽在使用 docker 的时候,开放了防火墙的端口,以 SSH 方式访问远程服务器的 docker 守护进程(无需使用密钥即可建立连接),随后竟遭到了挖矿木马的攻击,好一顿折腾之后,使用 TLS 证书加密通信才解决了问题。

时间线

部分腾讯云短信和云服务器安全主机管理后台的截图(失眠.jpg):

TLS 实践

TLS For Docker:https://docs.docker.com/engine/security/protect-access/

TLS 的主要作用是提供加密、认证和数据完整性,以确保在网络上进行的通信是安全的。下面的实践在你对照复现的时候,白泽建议你同时打开 docker 的文档,一并参考,注意命令格式。

为了允许机器 A 通过 TLS 访问机器 B 上的 Docker,你需要在机器 B 上进行一系列设置,以确保 Docker 守护程序(Docker Daemon)使用 TLS,并为客户端提供相应的证书。

服务端(docker 守护进程对应服务器)配置

一、在 B 机器上生成 CA(Certificate Authority)证书和密钥

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
  • 生成 rsa 私钥

    • 私钥生成:rsa
    • 私钥位数:4096
    • 加密私钥:aes256(生成过程中会提示输入密码,用于对私钥进行加密,后续使用私钥时也会提示输入这个密码
  • 生成自签名证书(根证书 CA)

    • 格式:x509
    • 签名:使用 sha256 计算 hash 摘要,对摘要使用私钥进行加密,加密的过程就是签名
    • 作用:作为根证书用于对后续 server 和 client 端的证书进行签名

二、生成 Docker 守护程序的未签名证书和密钥

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=主机名" -sha256 -new -key server-key.pem -out server.csr
  • 创建服务器密钥
  • 生成服务器证书签名请求(CSR)文件:以便后续将其发送给证书颁发机构 (CA) 进行签名,从而得到服务器的证书

三、创建一个扩展属性配置文件(extfile.cnf),用于指定 IP 地址和 DNS 名称

echo subjectAltName = IP:机器B的IP地址,DNS:机器B的DNS名 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
  • 创建一个 extfile.cnf 配置文件,其中包含主题备用名称(subjectAltName)的信息,包括 DNS 名称和 IP 地址。
  • echo extendedKeyUsage = serverAuth >> extfile.cnf:添加一个扩展属性,指定此证书仅用于服务器认证

四、生成 Docker 守护程序的签名证书

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
  • 使用 CA 的私钥 (ca-key.pem) 和 CA 签名证书 (ca.pem) 对服务器的 CSR (server.csr) 进行签名,生成服务器的证书 (server-cert.pem)。此命令还使用了 extfile.cnf 文件中的配置信息,确保证书包含了正确的主题备用名称和扩展属性。

五、配置 Docker 守护程序

在 Docker 守护程序的启动配置中添加 TLS 相关的参数:

dockerd \
--tlsverify \
--tlscacert=ca.pem \
--tlscert=server-cert.pem \
--tlskey=server-key.pem \
-H=0.0.0.0:2376

防火墙配置: 如果机器 B 上有防火墙,确保允许来自机器 A 的流量通过 2376 端口。

Note:此时已经完成了服务端的配置,接下来需要在服务端上,借助根证书 CA,类似的生成客户端使用的证书,再将其拷贝到客户端机器上,即可使用 TLS 连接服务端 docker。

客户端配置

客户端的证书的生成和配置是类似的,这里简单罗列命令,不做重复解释。

  • 生成客户端私钥
openssl genrsa -out key.pem 4096
  • 创建客户端证书签名请求 (CSR)
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
  • 创建客户端证书扩展配置文件
echo extendedKeyUsage = clientAuth > extfile-client.cnf
  • 生成签名的客户端证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf
  • 在机器 B 上使用 docker 客户端连接到机器 B 的 docker 守护进程,并成功打印 docker version(后续只需要将客户端证书拷贝至 A 机器上即可实现安全的 TLS 连接
docker --tlsverify \
--tlscacert=ca.pem \
--tlscert=cert.pem \
--tlskey=key.pem \
-H=机器B的IP地址:2376 version

安全性工作

  • 设置文件访问权限
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
  • 清理临时文件
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
  • 方便使用 docker(通过这种方式就不用每次连接都指定客户端证书的路径了)
mkdir -p ~/.docker
cp -v {ca,cert,key}.pem ~/.docker
export DOCKER_HOST=tcp://82.156.171.8:2376 DOCKER_TLS_VERIFY=1

当然只通过 export 配置环境变量只在当前会话生效,你需要在额外的配置文件中进行声明,这是 gpt 的回答:

参考文献

结语

本次事故,让我意识到服务器安全的重要性,每次被迫重装系统需要做很多数据备份迁移工作,服务也被迫暂停。平日维护服务器,更应当预防为主,做好规划,降低出错带来的恢复成本。

感兴趣可以关注公众号 「白泽talk」,白泽目前也打算打造一个氛围良好的行业交流群,欢迎加入:622383022。

完蛋,我被挖矿木马包围了|使用 TLS 连接 Docker的更多相关文章

  1. Mac下一款门罗币挖矿木马的简要分析

    背景 最近在应急中发现了一款Mac上的挖矿木马,目标是挖门罗币,经过走访,受害用户都有从苹果电脑上安装第三方dmg的经历(其中可以确定一款LOL Mac私服安装app会导致该木马),怀疑在网上很多第三 ...

  2. 云服务器ECS挖矿木马病毒处理和解决方案

    云服务器ECS挖矿木马病毒处理和解决方案 最近由于网络环境安全意识低的原因,导致一些云服务器ECS中了挖矿病毒的坑. 总结了一些解决挖矿病毒的一些思路.由于病毒更新速度快仅供参考. 1.查看cpu爆满 ...

  3. 威胁快报|Nexus Repository Manager 3新漏洞已被用于挖矿木马传播,建议用户尽快修复

    背景 近日,阿里云安全监测到watchbog挖矿木马使用新曝光的Nexus Repository Manager 3远程代码执行漏洞(CVE-2019-7238)进行攻击并挖矿的事件. 值得注意的是, ...

  4. 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”

    简介 阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行攻击的挖矿事件.除挖矿外,攻击者还曾植入具有C&C功能的tsunami木马,也预留了反弹shell的功能,给用户带来极大安全隐 ...

  5. 记一次Xmrig挖矿木马排查过程

    问题现象 Linux 服务器收到报警信息,主机 CPU 跑满. 自动创建运行 Docker 容器 xmrig, 导致其他运行中容器被迫停止. 问题原因 通过 top 命令可以看到有一个 xmrig 进 ...

  6. kworkerds 挖矿木马简单分析及清理

    公司之前的开发和测试环境是在腾讯云上,部分服务器中过一次挖矿木马 kworkerds,本文为我当时分析和清理木马的记录,希望能对大家有所帮助. 现象 top 命令查看,显示 CPU 占用 100%,进 ...

  7. Windows下的挖矿木马查杀

    MS016小组(原创) 上一篇文章 简单讲了一下挖矿木马 大概流程  文章地址: https://www.cnblogs.com/ms016/articles/7978880.html 今天讲分析一个 ...

  8. Linux服务器中了挖矿木马怎么办?-挖矿木马自助清理手册

    什么是挖矿木马 挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,严重影响服务器上的其他应用的正常运行.黑客为了得到更多的算力资源,一般都会对全网进行无差别扫描,同时利用SSH爆破和漏洞 ...

  9. 云主机被拿去挖矿,cpu暴涨,tcp连接突增

    1.云主机被拿去挖矿,cpu暴涨,tcp连接突增 2.现象:top -c 3.然后我再查看pstree进程树 4.查找文件来源 ind  / -name '*suppoie*' 5. 然后删除 sup ...

  10. confluence 挖矿木马应急响应

    最近遇到一台confluence wiki主机被挖矿,收到CPU 告警异常之后,登录查看,进行分析. top c 命令查看,果然CPU 已经资源已经被吃完了.. 看到用户是confluence,100 ...

随机推荐

  1. 算法打卡|Day5 哈希表part01

    哈希表 part01 今日任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 目录 哈希表 part01 链表理论基础 Pr ...

  2. np.random.uniform()

    np.random.uniform(start,end,second) start:开始数 end:结束数 second:次数,也就是选择几次. 代码结果如下所示: import numpy as n ...

  3. Radius+OpenLdap+USG防火墙认证

    1.1.安装OpenLdap # 在数据目录创建ldap文件存放ldap的配置文件 mkdir -p /data/ldap/{data,conf} docker run -p 389:389 -p 6 ...

  4. 一文读懂计算机底层网络原理,包括TCP、UDP、header,什么是包、帧、段等关键问题

    说到计算机网络原理,大家可能马上联想到,七层协议,传输层,链路层,三次握手四次挥手:前端的同学,还会想到我们用Crome F12的network里面的headers,状态码等.后端同学可能会联想到,抓 ...

  5. IDEA在Debug模式下修改Java类,不小心关闭 Reload Changed Classes for AppArrowWebApplication 框提示之后的处理

    问题描述:Springboot maven 聚合项目里面,经常要启动多个服务. 当我们修改其中一个服务的时候,debug 启动时 idea 就会提示是否需要重新编译修改的内容,弹窗让你选择reload ...

  6. 用原型实现Class的各项语法

    本人之前对Class一直不够重视.平时对原型的使用,也仅限于在构造函数的prototype上挂属性.原型尚且用不着,更何况你Class只是原型的一颗语法糖? 直到公司开始了一个webgis项目,使用o ...

  7. python之继承的方法重写

    目录 普通方法 方法重写super().xxx() 我们在python之继承及其实现方法中已经学会了打印子类在父类继承的属性 那么我们怎么打印出子类中特有的属性呢 普通方法 我们当然可以在子类中添加新 ...

  8. 痞子衡嵌入式:我当了回华邦电子&恩智浦2023联合技术论坛演讲嘉宾

    「华邦电子(Winbond)」是国际领先的存储器厂商,其串行 NOR Flash 产品在全球市场占有率稳居前列. 11月23日,华邦电子联合「恩智浦(NXP)」在上海搞了场主题为"芯智无限, ...

  9. 手动部署Kraft模式Kafka集群

    手动部署Kraft模式kafka集群 基本信息 IP地址 Hostname Release Kafka-Version 172.29.145.157 iamdemo1 Centos7.9 kafka_ ...

  10. Codeforces Round 878 (Div. 3)

    Codeforces Round 878 (Div. 3) A:ABC A. Cipher Shifer 题意:在自身后面添加一个字母,但是不能添加自身 思路:找到第二个与自身相符的就再找 #incl ...