前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker安全入门与实战(一)

Docker安全入门与实战(一)

作者头像
0xtuhao
发布于 2022-06-21 02:25:25
发布于 2022-06-21 02:25:25
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

与其他介绍Docker的文章不同,由本文开启的系列文章将专注于Docker安全研究,一共分为6部分。

第1部分介绍Docker存在的安全问题、整套Docker应用架构的安全基线以及安全规则,重头戏是Docker安全规则的各种思路和方案,这部分重点介绍Docker官方安全建议。第2部分开始将围绕Docker安全规则的各种思路与方案的详细实现展开,包括技术选型、应用部署、功能使用以及如何与企业或组织的Docker容器编排系统、仓库集成等具体问题,更多的是介绍业界实现。

第2部分介绍Docker镜像的漏洞扫描与审计,第3部分介绍如何使用Sysdig Falco监控Docker容器安全,第4部分介绍如何将namespace和cgroup技术用于Docker容器安全隔离与资源控制,第5部分介绍如何使用seccomp和apparmor实现Docker容器系统调用和文件访问的权限控制,第6部分介绍如何使用Hashicorp Vault安全管理docker容器敏感信息。

下面让我们进入Docker安全的大门,开始从入门到实战的精彩历程!

Docker简介

按照Docker官方的介绍:Docker是世界领先的容器平台。开发人员使用Docker在与同事协作代码时消除“在我的机器上工作”的问题。 运营商使用Docker在并行容器中并行运行和管理应用程序,以获得更好的计算密度。企业使用Docker构建敏捷软件交付管道,以更快,更安全,更可靠地为Linux和Windows Server应用程序提供新功能。挺拗口的,大概是这么一回事。

说起容器,很容易想到虚拟机,人们也热衷于讨论虚拟机与容器的区别,那么,本文也不能免俗,下面就来对比一下两者,从而突出Docker容器的不同之处。

Docker与虚拟机的区别

隔离与共享:

虚拟机通过添加hypervisor层,虚拟出网卡,内存,CPU等虚拟硬件,再在其上建立客户机,每个客户机都有自己的系统内核。而docker容器则是通过隔离的方式,将文件系统,进程,设备,网络等资源进行隔离,再对权限,CPU资源等进行控制,最终让容器之间互不影响,容器无法影响宿主机。容器与宿主机共享内核,文件系统,硬件等资源。

性能与损耗:

与虚拟机相比,容器资源损耗要小得多。 同样的宿主机下,能够建立容器的数量要比虚拟机多得多。

安全性:

但是虚拟机的安全性要比容器好一些,要从虚拟机突破到宿主机或其他虚拟机,需要先突破hypervisor层,这是极其困难的。 而docker容器与宿主机共享内核,文件系统等资源,更有可能对其他容器,宿主机产生影响。

Docker存在的安全问题

下面进入正题,从攻击树上来讲,Docker的安全问题如下图所示:

Docker自身漏洞

Docker作为一款应用本身实现上会有代码缺陷。CVE官方记录docker历史版本共有超过20项漏洞,参见https://docs.docker.com/engine/security/non-events/。主要有代码执行,权限提升,信息泄露,绕过这几类。现在Docker已经到了17.03版本,版本更迭非常快,docker用户最好将docker升级为最新版本。

Docker源问题

Docker提供了docker hub可以让用户上传创建的镜像,以便其他用户下载,快速搭建环境。但同时也带来了一些安全问题。下载的镜像被恶意植入后门,传输的过程中镜像被篡改, 镜像所搭建的环境是否本身就包含漏洞等等,不一而足。主要介绍下面三种:

黑客上传恶意镜像:

如果有黑客在制作的镜像中植入木马,后门等恶意软件,那么环境从一开始就已经不安全了,后续更没有什么安全可言。

镜像使用有漏洞的软件:

据一些报告显示,hub上能下载的镜像里面,75%的镜像都安装了有漏洞的软件,所以下载镜像后,需要检查里面软件的版本信息,对应的版本是否存在漏洞,并及时更新打上补丁。

中间人攻击篡改镜像:

镜像在传输过程中可能被篡改,目前新版本的docker已经提供了相应的校验机制来预防这个问题。

Docker架构缺陷与安全机制

由docker本身的架构与机制可能产生的问题,这一攻击场景主要产生在黑客已经控制了宿主机上的一些容器(或者通过在公有云上建立容器的方式获得这个条件),然后对宿主机或其他容器发起攻击来产生影响。

容器之间的局域网攻击:

同一主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗,嗅探,广播风暴等攻击方式便可以用上。所以在一个主机上部署多个容器需要合理的配置网络,设置iptable规则。

DDoS攻击耗尽资源:

cgroups安全机制就是要防止此类攻击的,不要为单一的容器分配过多的资源即可避免此类问题。

调用有漏洞的系统调用:

我们都知道Docker与虚拟机的一个区别就是,Docker与宿主公用一个操作系统内核,一旦宿主内核存在可以横向越权或者提权漏洞,那么尽管docker使用普通用户执行,一旦容器被入侵,攻击者还是可以利用内核漏洞逃逸到宿主,做更多事情。

共享root:

如果以root权限运行容器,容器内的root用户也就拥有了宿主机的root权限。

未隔离的文件系统:

虽然docker已经对文件系统进行隔离,但是有一些重要的系统文件暂时没有被隔离,如/sys, /proc/sys, /proc/bus等。

缺少完整的用户namespace实现

目前还没有完整的用户namespace实现。某些东西是不受Docker控制的。缺少用户namespace的风险之一是,用户从主机到容器的映射仍是一对一映射。以前,容器中的用户0在主机上等于0。换句话说,如果你的容器被攻破,它不需要太多成本就能损害整台宿主。

默认放通所有:

不管是网络访问,还是remote api的访问,都是默认放通所有的,这也为网络流量攻击和之前大规模发生Docker remote api漏洞埋下了隐患。

Docker安全基线

这部分结合了Docker官方文档与七牛云布道师陈爱珍的《如何打造安全的容器云平台

》整理,从内核、主机、网络、镜像、容器以及其他等6大方面总结了Docker安全基线标准。

内核级别

· 及时更新内核

· User NameSpace(容器内的root权限在容器之外处于非高权限状态)

· Cgroups(对资源的配额和度量)

· SELiux/AppArmor/GRSEC(控制文件访问权限)

· Capability(权限划分)

· Seccomp(限定系统调用)

· 禁止将容器的命名空间与宿主机进程命名空间共享

主机级别

· 为容器创建独立分区

· 仅运行必要的服务

· 禁止将宿主机上敏感目录映射到容器

· 对Docker守护进程、相关文件和目录进行审计

· 设置适当的默认文件描述符数

· 用户权限为root的Docker相关文件的访问权限应该为644或者更低权限

· 周期性检查每个主机的容器清单,并清理不必要的容器

网络级别

· 通过iptables设定规则实现禁止或允许容器之间网络流量

· 允许Dokcer修改iptables

· 禁止将Docker绑定到其他IP/Port或者Unix Socket

· 禁止在容器上映射特权端口

· 容器上只开放所需要的端口

· 禁止在容器上使用主机网络模式

· 若宿主机有多个网卡,将容器进入流量绑定到特定的主机网卡上

镜像级别

· 创建本地镜像仓库服务器

· 镜像中软件都为最新版本

· 使用可信镜像文件,并通过安全通道下载

· 重新构建镜像而非对容器和镜像打补丁

· 合理管理镜像标签,及时移除不再使用的镜像

· 使用镜像扫描

· 使用镜像签名

容器级别

· 容器最小化,操作系统镜像最小集

· 容器以单一主进程的方式运行

· 禁止privileged标记使用特权容器

· 禁止在容器上运行ssh服务

· 以只读的方式挂载容器的根目录系统

· 明确定义属于容器的数据盘符

· 通过设置on-failure限制容器尝试重启的次数

· 限制在容器中可用的进程树,以防止fork bomb

其他设置

· 定期对宿主机系统及容器进行安全审计

· 使用最少资源和最低权限运行容器

· 避免在同一宿主机上部署大量容器,维持在一个能够管理的数量

· 监控Docker容器的使用,性能以及其他各项指标

· 增加实时威胁检测和事件响应功能

· 使用中心和远程日志收集服务

Docker安全规则

Docker安全规则其实属于Docker安全基线的具体实现,不过对于Docker官方提出的方案本文会直接给出实现方式,而对于第三方或者业界使用的方案,则只是介绍基本规则,具体实现方案会在本系列下部分介绍。

容器最小化

仅在容器中运行必要的服务,像ssh等服务是绝对不能开启的。使用以下方式来管理你的容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it mycontainer bash

Docker remote api访问控制

Docker的远程调用API接口存在未授权访问漏洞,至少应限制外网访问。如果可以,建议还是使用socket方式访问。

建议监听内网ip或者localhost,docker daemon启动方式:

docker -d -H uninx:///var/run/docker.sock -H tcp://10.10.10.10:2375#或者在docker默认配置文件指定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
other_args=" -H  unix:///var/run/docker.sock -H tcp://10.10.10.10:2375"

然后在宿主iptables上做访问控制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*filter:
HOST_ALLOW1 - [0:0]
-A HOST_ALLOW1 -s 10.10.10.1/32 -j ACCEPT
-A HOST_ALLOW1 -j DROP
-A INPUT -p tcp -m tcp -d 10.10.10.10 --port 2375 -j HOST_ALLOW1

限制流量流向

可以使用以下iptables过滤器[7]限制Docker容器的源IP地址范围与外界通讯。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -A FORWARD -s <source_ip_range> -j REJECT --reject-with icmp-admin-prohibited
Iptables -A FORWARD -i docker0 -o eth0 -j DROP-A FORWARD -i docker0 -o eth0 -m state –state ESTABLISHED -j ACCEPT

我们处理过大量因为Docker容器端口外放引起的漏洞,除了操作系统账户权限控制上的问题,更在于对Docker Daemon的进程管理上存在隐患。我们都知道,目前常用的Docker版本都支持Docker Daemon管理宿主iptables的,而且一旦启动进程加上-p host_port:guest_port的端口映射,Docker Daemon会直接增加对应的FORWARD Chain并且-j ACCEPT,而默认的DROP规则是在INPUT链做的,对docker没法限制,这就留下了很严重的安全隐患了。因此建议:

1. 不在有外网ip的机器上使用Docker服务

2. 使用k8s等docker编排系统管理Docker容器

3. 宿主上Docker daemon启动命令加一个--iptables=false,然后把常用iptables写进文件里,再用iptables-restore去刷。

使用普通用户启动Docker服务

截至Docker 1.10用户命名空间由docker守护程序直接支持。此功能允许容器中的root用户映射到容器外部的非uid-0用户,这可以帮助减轻容器中断的风险。此功能可用,但默认情况下不启用。

1.使用用户映射

要解决特定容器中的用户0在宿主系统上等于root的问题,LXC允许您重新映射用户和组ID。配置文件条目如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536

这将容器中的前65536个用户和组ID映射到主机上的100000-165536。主机上的相关文件是/etc/subuid和/etc/subgid。此映射技术命名为从属ID,因此称为“子”前缀。

对于Docker,这意味着将其作为-lxc-conf参数添加到docker run:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -lxc-conf ="lxc.id_map = u 0 100000 65536" -lxc-conf ="lxc.id_map = g 0 100000 65536"

2.启动容器时不带--privileged参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it debian8:standard /bin/bash

文件系统限制

挂载的容器根目录绝对只读,而且不同容器对应的文件目录权限分离,最好是每个容器在宿主上有自己单独分区。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
su con1
docker run -v dev:/home/mc_server/con1 -it debian8:standard /bin/bash
su con2
docker run -v dev:/home/mc_server/con2 -it debian8:standard /bin/bash

镜像安全

如下图所示,在镜像仓库客户端使用证书认证,对下载的镜像进行检查 ,通过与CVE数据库同步扫描镜像,一旦发现漏洞则通知用户处理,或者直接阻止镜像继续构建。 如果使用的是公司自己的镜像源,可以跳过此步;否则至少需要验证baseimage的md5等特征值,确认一致后再基于baseimage进一步构建。

一般情况下,我们要确保只从受信任的库中获取镜像,并且不要使用--insecure-registry=[]参数。具体实现我们在漏洞扫描部分一块介绍。

Docker client端与 Docker Daemon的通信安全

按照Docker官方的说法,为了放置链路劫持、会话劫持等问题导致docker通信时被中间人攻击,c/s两端应该通过加密方式通讯。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker –tlsverify –tlscacert=ca.pem –tlscert=server-cert.pem –tlskey=server-key.pem  -H=0.0.0.0:2376

资源限制

限制容器资源使用,最好支持动态扩容,这样既可以尽可能降低安全风险,也不影响业务。下面是使用样例,限制cpu使用第2核、分配2048

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -tid –name ec2 –cpuset-cpus 3 –cpu-shares 2048 -memory 2048m –rm –blkio-weight 100 --pids--limit 512

更多限制可以参考Docker官方说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  --cpu-period                    Limit CPU CFS (Completely Fair Scheduler) period
  --cpu-quota                     Limit CPU CFS (Completely Fair Scheduler) quota
  --device-read-bps=[]            Limit read rate (bytes per second) from a device
  --device-read-iops=[]           Limit read rate (IO per second) from a device
  --device-write-bps=[]           Limit write rate (bytes per second) to a device
  --device-write-iops=[]          Limit write rate (IO per second) to a device
  --kernel-memory                 Kernel memory limit
  --label-file=[]                 Read in a line delimited file of labels
  -m, --memory                    Memory limit
  --memory-reservation            Memory soft limit
  --memory-swap                   Swap limit equal to memory plus swap: '-1' to enable unlimited swap
  --pids-limit                    Tune container pids limit (set -1 for unlimited)
  --ulimit=[]                     Ulimit options

宿主及时升级内核漏洞

使用Docker容器对外提供服务时,还要考虑宿主故障或者需要升级内核的问题。这时为了不影响在线业务,Docker容器应该支持热迁移,这个可以纳入容器调度系统的功能设计中。此外,还应考虑后续的内核升级方案规划、执行以及回迁方案等。

避免docker容器中信息泄露

就像之前github上大量泄露个人或企业各种账号密码的问题,我们一般使用dockerfile或者docker-compose文件创建容器,如果这些文件中存在账号密码等认证信息,一旦docker容器对外开放,则这些宿主机上的敏感信息也会随之泄露。因此可以通过以下方式检查容器创建模板的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# check created users
grep authorized_keys $dockerfile
# check OS users
grep "etc/group" $dockerfile
# Check sudo users
grep "etc/sudoers.d" $dockerfile
# Check ssh key pair
grep ".ssh/.*id_rsa" $dockerfile
# Add your checks in below

安装安全加固

如果可能,使用安全的Linux内核、内核补丁。如SELinux,AppArmor,GRSEC等,都是Docker官方推荐安装的安全加固组件。

如果先前已经安装并配置过SELinux,那么可以在容器使用setenforce 1来启用它。Docker守护进程的SELinux功能默认是禁用的,需要使用--selinux-enabled来启用。容器的标签限制可使用新增的—-security-opt加载SELinux或者AppArmor的策略进行配置,该功能在Docker版本1.3[9]引入。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --security-opt=secdriver:name:value -i -t centos bash

SELinux的相关选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--security-opt ="label:user:USER"(设置标签用户)
--security-opt ="label:role:ROLE"(设置标签角色)
--security-opt ="label:type:TYPE"(设置标签类型)
--security-opt ="label:level:LEVEL"(设置标签级别)
--security-opt ="label:disable"(完全禁用标签限制)

AppArmor的选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--secutity-opt ="apparmor:PROFILE"(设置AppArmor配置文件)

GRSEC的选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gradm -F -L /etc/grsec/learning.logs

GRSEC的更多说明请参考:https://en.wikibooks.org/wiki/Grsecurity

限制系统命令调用

1.系统调用层面:

Linux系统调用列表见:

http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html

Seccomp(secure computing mode),就是安全计算模式,这个模式可以设置容器在对系统进行调用时进行一些筛选,也就是所谓的白名单。它可以去指定允许容器使用哪些的调用,禁止容器使用哪些调用,这样就可以增强隔离,它其实也是访问控制的一个部分。

2.函数调用层面

通过使用“–security-optseccomp=<profile>”标记来指定自定义的 seccomp 描述文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run -d –security-opt seccomp:allow:clock_adjtime ntpd

这条命令将会允许容器内使用 clock_adjtime 调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$docker run -d –security-opt seccomp:deny:getcwd /bin/sh

这条命令将会禁止容器内执行的 shell 查询当前自己所在的目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--security-opt=[]
          Security Options
              "label=user:USER"   : Set the label user for the container
              "label=role:ROLE"   : Set the label role for the container
              "label=type:TYPE"   : Set the label type for the container
              "label=level:LEVEL" : Set the label level for the container
              "label=disable"     : Turn off label confinement for the container
              "no-new-privileges" : Disable container processes from gaining additional privileges
 
              "seccomp=unconfined" : Turn off seccomp confinement for the container
              "seccomp=profile.json :  White listed syscalls seccomp Json file to be used as a seccomp filter
 
              "apparmor=unconfined" : Turn off apparmor confinement for the container
              "apparmor=your-profile" : Set the apparmor confinement profile for the container

在没有缺省secconf配置文件的情况下运行,可以通过unconfined运行配置不在默认seccomp配置文件的容器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run --rm -it --security-opt seccomp =ulimit-debian:jessie \ unshare --map-root-user --user sh -c whoami

suid和guid限制

SUID和GUID程序在受攻击导致任意代码执行(如缓冲区溢出)时将非常危险,因为它们将运行在进程文件所有者或组的上下文中。如果可能的话,使用特定的命令行参数减少赋予容器的能力,阻止SUID和SGID生效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it --rm --cap-drop SETUID --cap-drop SETGID 

还有种做法,可以考虑在挂载文件系统时使用nosuid属性来移除掉SUID能力。最后一种做法是,删除系统中不需要的SUID和GUID程序。这类程序可在Linux系统中运行以下命令而找到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find / -perm -4000 -exec ls -l {} \; 2>/dev/null 
find / -perm -2000 -exec ls -l {} \; 2>/dev/null

然后,可以使用类似于下面的命令将移除SUID和GUID文件权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chmod u-s filename sudo chmod -R g-s directory

能力限制

尽可能降低Linux能力。

Docker默认的能力包括:chown、dac_override、fowner、kill、setgid、setuid、setpcap、net_bind_service、net_raw、sys_chroot、mknod、setfcap、和audit_write。在命令行启动容器时,可以通过--cap-add=[]或--cap-drop=[]进行控制。例如:

docker run --cap-drop setuid --cap-drop setgid -ti <container_name> /bin/sh

此功能在Docker 1.2版本引入。

多租户环境

由于Docker容器内核的共享性质,无法在多租户环境中安全地实现责任分离。建议将容器运行在没有其它目的,且不用于敏感操作的宿主上。可以考虑将所有服务迁移到Docker控制的容器城。可能的话,设置守护进程使用--icc=false,并根据需要在docker run时指定-link,或通过—-export=port暴露容器的一个端口,而不需要在宿主上发布。将相互信任的容器的组映射到不同机器上。

完全虚拟化

使用一个完全虚拟化解决方案来容纳Docker,如KVM。如果容器内的内核漏洞被发现,这将防止其从容器扩大到宿主上。类似Docker-in-Docker工具,Docker镜像可以嵌套来提供该KVM虚拟层。

日志分析

收集并归档与Docker相关的安全日志来达到审核和监控的目的,一般建议使用rsyslog或stdout+ELK的方式进行日志收集、存储与分析,因为Docker本身要求轻量,所以不建议像虚拟机或者物理机上安装安全agent,这时实时威胁检测和事件响应功能就要依赖实时日志传输和分析了。可以在宿主上使用以下命令在容器外部访问日志文件

docker run -v /dev/log:/dev/log <container_name> /bin/sh

使用Docker内置命令:

docker logs ... (-f to follow log output)

日志文件也可以导出成一个压缩包实现持久存储:

docker export

漏洞扫描

前面的镜像安全,跟这里的漏洞扫描关联很密切,可以使用相同的工具去实现安全扫描,不过漏洞扫描更倾向于外部检测,镜像安全则需要镜像仓库和CI系统联动,始终不是一回事,所以分来介绍。

下面介绍5款用于Docker漏洞扫描的工具,它们各有千秋,从镜像到容器,从宿主到容器,从dockerfile到docker-compose,从安全基线检查与漏洞发现,从容器安全到性能优化,均有覆盖。

docker-slim:

参考:https://github.com/docker-slim/docker-slim

创建小容器需要大量的巫术魔法,它可以是相当痛苦的。你不应该丢掉你的工具和你的工作流程。使用Docker应该很容易。docker-slim是一个容器的魔法减肥药。它将使用静态和动态分析为你的应用程序创建一个紧凑的容器。

Docker Bench for Security:

https://github.com/docker/docker-bench-security

Docker Bench for Security是一个脚本,用于检查在生产环境中部署Docker容器的几十个常见的最佳实践,测试都是自动化的,受CIS Docker 1.13基准的启发而来。

Clair: 参考:https://github.com/coreos/clair

Clair是一个用于静态分析应用程序容器(目前包括appc和docker)中的漏洞的开源项目。基于k8s,将镜像上传到clair所在机器扫描即可。从已知的一组源连续导入漏洞数据,并与容器映像的索引内容相关联,以便产生威胁容器的漏洞的列表。当漏洞数据在上游发生变化时,可以传递通知,并且API会查询以提供漏洞的先前状态和新状态以及受这两者影响的图像。

Container-compliance:

参考:https://github.com/OpenSCAP/container-compliance

Container-compliance是基于OpenSCAP的用于评估镜像、容器合规性的资源和工具。

Lynis:

参考:https://cisofy.com/lynis/plugins/docker-containers/

lynis本身是一套Linux/Unix系统安全审计的shell脚本,执行时系统消耗很低。Lynis-docker是Lynis的一个插件,这个插件收集关于Docker配置和容器的信息。

端口扫描

很多人认为,容器被入侵带来的风险,远比不上物理机和传统虚拟机,于是他们直接把docker容器对外网开放,而且不配置任何访问控制。另外,也会存在宿主iptables错误调导致容器直接对外开放的问题存在,于是,这时针对容器进行快速批量的端口快速扫描显得很有必要。目前Nmap/Masscan这两款工具用的比较多。

Nmap支持tcp/udp端口扫描以及自定义插件扫描任意漏洞,是最著名、应用最广的端口扫描器。masscan的扫描结果类似于nmap,在内部,它更像scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。参考:https://github.com/robertdavidgraham/masscan

上面介绍了很多配置、工具,如果要应用到生产环境,还是需要大量调研的,所以本文的下半部分会结合将它们联动起来,深入到应用部署、功能使用以及如何与企业或组织的Docker容器编排系统、仓库集成等具体实现,形成一套企业级Docker安全解决方案,敬请期待。

参考资料

Docker官方Docker安全文档https://docs.docker.com/engine/security/

关于Docker的几点安全解析http://www.4hou.com/technology/2902.html

陈爱珍 如何打造安全的容器云平台 http://blog.qiniu.com/archives/7743

docker安全部署指南 https://github.com/GDSSecurity/Docker-Secure-Deployment-Guidelines

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
9 个容器环境安全红队常用手法总结
随着云原生的火热,容器及容器编排平台的安全也受到了行业关注,Gartner在近期发布的《K8s安全防护指导框架》中给出K8s安全的8个攻击面,总结如下:
iMike
2021/12/18
1.4K0
9 个容器环境安全红队常用手法总结
docker 安全
由于容器运行在主机上,且与主机共用一套内核,因此在容器的安全使用上会涉及到容器本身以及主机的安全加固,如针对系统调用,系统资源,远程访问等都需要进行安全方面的考量。
charlieroro
2020/03/24
1.1K0
浅析docker的多种逃逸方法
Docker实现原理:https://zone.huoxian.cn/d/1034-docker
UzJu@菜菜狗
2022/04/25
6.4K0
浅析docker的多种逃逸方法
​Docker:从入门到实战过程全记录
想要真正理解Docker,就不得不从虚拟化技术的发展历程说起。普遍认为虚拟化技术经历了物理机时代、虚拟机时代,目前已经进入到了容器化时代。可以说,Docker是虚拟化技术不断发展的必然结果。
用户8949263
2022/11/07
7770
04 . Docker安全与Docker底层实现
跟其他添加Docker容器的第三方工具一样(比如网络拓扑和文件系统共享),有很多类似的机制,在不改变Docker内核情况下就可以加固现有的容器.
iginkgo18
2020/09/27
1K0
04 . Docker安全与Docker底层实现
善攻者,动于九天之上。你的容器安全吗?
大家好,我是二哥。从今天开始的几篇,我会集中聊聊与容器安全相关的内容。我粗略估计会涉及到user account、capability、container image、container isolation的加固、container isolation的破防、container network security(涉及到网路安全,不是网络方案)、container runtime security等方面的内容。
LanceZhang
2021/12/06
4630
善攻者,动于九天之上。你的容器安全吗?
Docker1-架构原理及简单使用(终于把Docker讲明白了)
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
Java帮帮
2019/11/25
1.4K0
Docker部署开源私有云相册,给你的照片一个家
大家好,我是星哥,在这个数字化时代,照片不仅是一种记录生活的方式,更是一种方便并分享还原真时刻的工具。
星哥玩云
2024/12/30
6850
Docker部署开源私有云相册,给你的照片一个家
【随笔小记】提高Docker容器的安全性
随着 Docker 的兴起,越来越多的项目采用 Docker 搭建生产环境,因为容器足够轻量化,可以快速启动并且迁移业务服务,不过在使用的过程中,我们很容易就忽略了项目的安全问题,容器虽然有隔离的作用,但是我们知道,他与虚拟机的架构差距还是比较大的。
Balliol Chen
2022/04/21
5990
Docker
与其他介绍Docker的文章不同,由本文开启的系列文章将专注于Docker安全研究,一共分为6部分。
扬起
2022/06/24
1.2K0
Docker
Docker学习总结之Run命令介绍 Operator exclusive options
Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!   在使用Docker时,执行最多的命令某过于run了。这个命令可以说是所有docker操作的入口。在Docker官方Reference中单独列出了一个章节来介绍Run的各种参数使用,也足以看出Docker run的重要性。有感于此,我感觉有必要好好学习一下Run命令,因此特意看了一下Run命令介绍,结合日常中的使用心得,分享一下。以下文档大部分翻
随机来个数
2018/04/16
1.1K0
Docker容器安全性分析
Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响。本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析。
FB客服
2019/12/23
2K0
Docker容器安全性分析
Docker进阶与实战上
容器 = cgroup + namespace + rootfs + 容器引擎(用户态工具)
Jack Chen
2021/12/08
3840
[docker](九)docker -- 容器安全
Docker目前已经在安全方面做了一定的工作,包括Docker daemon在以TCP形式提供服务的同时使用传输层安全协议;在构建和使用镜像时会验证镜像的签名证书;通过cgroups及namespaces来对容器进行资源限制和隔离;提供自定义容器能力(capability)的接口;通过定义seccomp profile限制容器内进程系统调用的范围等。如果合理地实现上述安全方案,可以在很大程度上提高Docker容器的安全性。
baron
2019/12/03
2.5K0
容器安全机制解读
Docker默认设置可以保护主机容器内的进程访问资源,虽然Docker容器内的初始进程运行为root,但它具有的权限是非常有限的,这主要是通过使用以下几种主要的安全机制来实现的:
Al1ex
2023/12/22
5830
高中生也能读懂的Docker入门教程
Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker?
小小科
2019/06/27
6680
高中生也能读懂的Docker入门教程
Docker容器入门操作介绍
Docker是一个C/S结构的项目,有Docker Client、RESTAPI、Docker Server、images、container、 volumes、network组成。
王先森sec
2023/04/24
4350
Docker容器入门操作介绍
如何使用 AppArmor 限制应用的权限
众所周知,在云原生环境中,我们可以通过 RBAC 机制控制应用对集群中资源的访问权限,但对于生产环境来说,这些还远远不够,当应用可以访问到宿主机的资源(比如 Linux 权能字、网络访问、文件权限)时,宿主机仍然存在安全风险。对于这种情况,Linux 内核安全模块 AppArmor 补充了基于标准 Linux 用户和组的权限,将程序限制在一组有限的资源中,同时也是对 Pod 的保护,使其免受不必要的攻击。
CS实验室
2023/03/24
5.3K0
如何使用 AppArmor 限制应用的权限
Podman入门全指南:安装、配置与运行容器
在容器技术日益成熟的今天,许多开发者和系统管理员都在寻找Docker的替代品。Podman,作为一种相对较新的容器化工具,不仅提供了与Docker类似的功能,而且在安全性和效率上也有所增强。如果你对Docker感到满意,那么你可能会对Podman的无守护进程架构和根权限运行的能力感到惊喜。本文将带你走进Podman的世界,从最基本的安装到运行你的第一个容器,一步步展示这一工具的魅力和实用性。
一只牛博
2025/05/30
3020
Podman入门全指南:安装、配置与运行容器
docker实践(1) 入门和springBoot实践部署
Docker是一个开源项目,诞生于2013年初, 最初是 dotCloud 公司内部的一个业余项目。 它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会, 遵从了 Apache 2.0 协议,项目代码在GitHub上进行维护。 Docker 自开源后受到广泛的关注和讨论, 以至于dotCloud公司后来都改名为Docker Inc。 Redhat 已经在其RHEL6.5中集中支持Docker;Google也在其PaaS产品中广泛应用。
黄规速
2022/04/14
8390
docker实践(1)  入门和springBoot实践部署
相关推荐
9 个容器环境安全红队常用手法总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验