赞
踩
作为一款应用 Docker 本身实现上会有代码缺陷。
CVE 官方记录 Docker 历史版本共有超过 20 项漏洞,可参见 Docker 官方网站。
黑客常用的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。
目前 Docker 版本更迭非常快,Docker 用户可将 Docker 升级为最新版本。
Docker 提供了 Docker hub,可以让用户上传创建的镜像,以便其他用户下载,快速搭建环境。
但同时也带来了一些安全问题。
例如:
1. 黑客上传恶意镜像
如果有黑客在制作的镜像中植入木马、后门等恶意软件,那么环境从一开始就已经不安全了,后续更没有什么安全可言。
2. 镜像使用有漏洞的软件
DockerHub上能下载的镜像里面,75%的镜像都安装了有漏洞的软件。
所以下载镜像后,需要检查里面软件的版本信息,对应的版本是否存在漏洞,并及时更新打上补丁。
3. 中间人攻击篡改镜像
镜像在传输过程中可能被篡改,目前新版本的 Docker 已经提供了相应的校验机制来预防这个问题。
Docker本身的架构与机制就可能产生问题
例如:黑客已经控制了宿主机上的一些容器,或者获得了通过在公有云上建立容器的方式,然后对宿主机或其他容器发起攻击。
主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗、端口扫描、广播风暴等攻击方式便可以用上。
所以,在一个主机上部署多个容器需要合理的配置网络安全,比如设置 iptables 规则。
Cgroups 安全机制
就是要防止此类攻击的,不要为单一的容器分配过多的资源即可避免此类问题。
Docker 与虚拟机的一个重要的区别就是 Docker 与宿主机共用一个操作系统内核。
一旦宿主内核存在可以越权或者提权漏洞,尽管Docker使用普通用户执行,在容器被入侵时,攻击者还可以利用内核漏洞跳到宿主机做更多的事情。
如果以 root 用户权限运行容器(docker run --privileged
),容器内的 root 用户也就拥有了宿主机的root权限。
--privileged
运行容器(授权容器root用户用户宿主机的root权限) --network host
运行容器(使用host网络模式共享宿主机的网络命名空间)-m
--cpu-quota
--cpuset-cpus
--device-write-bps
-v 宿主机目录:容器目录:ro
--restart on-failure:N
详情见Docker 官方文档:
https://docs.docker.com/engine/security/
为了防止链路劫持、会话劫持等问题导致 Docker 通信时被中间人攻击,c/s 两端应该通过 TLS 加密方式通讯。
服务端会事先通过 CA 签发服务器端证书和私钥
在阿里云、腾讯云、华为云等云服务商申请一年有效期的免费证书或者购买付费的证书;
在服务器本地使用 openssl、mkcert、cfssl、certbot(Let’s Encrypt)等工具生成私有证书。
创建自签名证书大致分为三步,
#创建 CA 私钥文件
openssl genrsa -out ca.key 2048
#2048为位长
#创建 CA 证书文件
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
这是 OpenSSL 工具生成自签名 X.509 证书的命令
# `openssl req`: 执行 OpenSSL 工具,使用 "req" 子命令来创建证书请求。
# `-new`: 表示创建一个新的证书请求(Certificate Signing Request)。
#`-x509`: 表示创建自签名 X.509 证书。
#`-days 3650`: 表示生成的证书有效期为 3650 天(大约 10 年)。
#`-key ca.key`: 指定用来签名证书的密钥文件为 "ca.key"。
#`-out ca.pem`: 表示将生成的证书输出到文件 "ca.pem"。
#创建服务端私钥文件
openssl genrsa -out server.key 2048
#创建服务端证书自签名请求文件
openssl req -new -key server.key -out server.csr
#创建服务端证书文件
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem
我们使用自签名证书实现通过https访问harbor私有仓库。
私有仓库的部署过程,详见[云原生1.] Docker–harbor私有仓库部署与管理
这里只标明额外的配置。
#编辑配置文件
vim /usr/local/harbor/harbor.yml
...
13 https:
14 # https port for harbor, default is 443
15 port: 443
16 # The path of cert and key files for nginx
17 certificate: /data/server.pem
18 private_key: /data/server.key
....
cd /usr/local/harbor/
./prepare
./install.sh
#浏览器访问
https://192.168.67.100
编译安装时需要添加 --with-http_ssl_module 模板;
修改配置文件,添加 ssl 配置
http {
server {
#SSL 访问端口号为 443
listen 443 ssl;
# 填写绑定证书的域名
server_name 域名;
root html;
index index.html index.htm;
# 指定SSL证书和私钥路径
ssl_certificate /usr/local/nginx/conf/cert/xxxxx.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/xxxxx.key;
# ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 指定SSL服务器端支持的协议版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /welcome {
root html;
index index.html index.htm;
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。