一种基于Docker的可信容器安全加固方法_2

文档序号:9350280阅读:来源:国知局
行完整性度量,从而构造一条完整的从B1S、Grub, OS内核、Docker Daemon,再到最后容器启动的信任链,确保Docker容器的可信启动,防止容器本身及其运行的环境被篡改。
[0017](2)对容器文件系统进行度量,确保容器运行時文件系统的完整性:
基于“可信"的核心理念,本发明不仅对Docker可执行程序、镜像迸行了完整性度量,确保了容器的可信启动,还对容器运行时的文得系统迸行了实时的监控,以确保容器运行时的可信和安全。容器启动时会创建容器文件系统的哈希基准值,每隔特定时间会进行检查核对。当文件系统改变时,提醒管理员输入密码更新基准值。
[0018](3)设置白名单监控容器内部进程,确保容器进程安全;
通过HOOK主机的相关系统调用函数来实现容器内进程实时监控的功能。当容器内的某个进程创建运行前,判断该容器内的这个进程是否为被预设的迸程,然后再迸行相应的操作。并且可以通过预先设置白名单到达对不同容器内对不同可信进程的实时保护。如果是为司j目进程,则操作如常,如果是bj疑迸程,则在创建运行til就拦截。通过容器内进程实时监控这个模块的保护,可以保证多容器运行多进程的安全。
[0019](4)实现细粒度的网络访问控制,确保容器网络安全X
通过运用IPtable技术,设置容器通信规则,改进了 Dockei?本身只能开启或关闭网络功能和容器间通信功能,可对容器与外部的通信进行监控,实现了细粒度的网络访问控制。
[0020]
【附图说明】
[0021」图1:是本发明实施例的基于Docker的司彳目容器糸统架构不意图。
[0022]图2:是本发明买施例的Rj I目后动子模块不意图。
[0023]图3:是本发明实施例的容器文件系统监控模块示意图。
[0024]图4:是本发明实施例的容器进程监控模块示意图。
[0025]图5:是本发明实施例的容器网络监控示意图。
[0026]
【具体实施方式】
[0027]为了便于本领域普通技术人员理解和实施本发明,下面结合■图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示倒仅用于说明和解释本发明,并不用于限定本发明。
[0028]本发明提供的一种基于Docker的可信容器安全加固方法,用于对Docker容器系统进行安全增强,实现基于Docker的可信容器,应用于基于Docker的服务器集群中。
[0029]请见图1,本实施例的基于Docker的可信容器包含容器程序Docker,容器可信度量模块、进程监控模块和网络通信监控模块,其中容器可信度量模块包括可信启动子模块与文件度量子模块;其中Docker为容器程序主体,用于对各个进程监控模块的调用以及对容器镜像的可信度量,可信启动子模块用于实现镜像的完整性度量和容器的可信启动;文件系统监控模块用于对各个容器的文仲系统的监控;进程监控模块用于通过设置黑白名单实现对容器内的进程的监控:网络通信监控模块用于对容器的网络连接的细粒度控刺,限制容器对外连接和容器间的连接。
[0030]可信启动子模块是非常重要的一个模块。在确保容器能否安全启动非常关键。当Docker获取新镜像后,会目动对镜像进行HASH值计算。同时在容器启动fftl对镜像进行先整性度量确保容器启动時的安全。
[0031]文件度量子模块是另一个关键的一个模块。它确保了容器在运行过程中的文件系统的安全性。由于Docker采用分层结构组织其文件系统/而只有最上面一层是可读写的,所以本发明认为确保容器文件系统的完整性主要是确保该读写层的完整性。至于其所依赖的只读层则交由可信启动子模块中的镜像度量模块进行度量。
[0032]在实例中本发明基于TPM芯片和可信计算技术实现了对容器HASH基准值的计算和加密存储。
[0033]进程监控模块是确保容器运行时的安全性的另一重要模块。当容器启动时,将触发该模块4艮据用户自定义的管理策略开始监控容器内部运行的进程,一旦发现非法进程,将立即发出警告。
[0034]实施例中,本发明基于HOOK技术和内核模块加载技术实现了对Proc文件系统下白名单文件迸行改写^容器内进程监控模块根据白名单迸行操作t从而对容器内部可疑迸程的限制和可信进程的信赖。
[0035]网络通信监控模块主要负责限制容器的非授权通信行为,以提高容器在网络方面的安全性。当容器启动时,将触发该模块,根据用户自定义的管理策略开始监控容器的网络通信行为,只允许容器与可信主机进行通信^-旦出现非授权通信行为将立即阻止。
[0036]实施例中,本发明将用户自定义的策略转换成iptables规則,并将规则文件载入生效,实现对容器网络通信的监控和限制。
[0037]本发明提供的一种基于Docker的可信容器安全加固方法,包括以下步骤:
步骤1:容器的可信启动;请见图2,其具体实现包括以下子步骤:
步骤L I ;BI()S加电启动搜索到MBR,读取配置信息,将控刺权转给TrustedGRUB ;
步骤L 2:TrustedGRUB加载系统内核,对Docker程序的可执行文件及关键配置文件进行完整性度量,完整性度量通过之后,将度量结果存入PCR,将控制权转给操作系统;
可执行文件及关键配置文件包括:
/etc/bash—complet1n.d/docker /etc/init, d/docker /etc/default/docker /var/lib/docker/init/dockerinit-1.6, 0 /var/lib/docker/init/dockerinit-1.7, 0-dev /etc/1nit/docker.conf /11b/systemd/system/docker.service /1ib/systemd/systera/docker, socket
步骤I, 3:操作糸统.后动之后.,jd动Docker程;1予:
步骤L 4 Aocker程序启动之后,可信启动子模块启动,随即监控Docker关于镜像获取的命令;当Docker获取到新镜像后,度量程序开始计算镜像的HASH基准值并加密存储;Docker获取镜像的方式有:王种,包括从Registry下载镜像、将当前活动容器封装成镜像、从tar包读取镜像存于本地,这三种方式对应的Docker命令分别是pul 1、commit、load与 save ο
[0038]当Docker获取到新镜像后,度量程序开始计算镜像的HASH基准值并加密存储;所度量的内容包括镜像的rootfs层、镜像配置信息以及层间关系文件。度量程序通过调用TPM提供的SHA-1引擎分别计算得到与镜像有关的各部分hash值并将他们连接起来再进行----次SHA-1计算得到最后的hash值,将此MSH值作为基准值,对其进行加密存储,这里利用的是TPM提供的RSA密钥将hash值加密为512位密文最后将密文存入以镜像id命名的文件中。
[0039]步骤1.5:接收到用户发出的启动容器命令时,首先读入存有HASH基准值的文件,用密钥将其解密,得到40位HASH值;然后再依据步骤1.4中所述的计算镜像MSH基准值的方法再计算一遍镜像的HASH值;
步骤I。6:将步骤1.5中新计算得到的HASH值与步骤I。4屮的HASH基准值进行对比,若两值相等則启动容器,否则不启动将弹框报告用户,提示镜像己被损坏;
当镜像被删除时,同时也删除存有该镜像hash基准值的文仲。
[0040]通过以上操作就可以确保容器启动时是从一个安全的可信的没有被篡改的镜像中启动的。
[0041]步骤2:容器启动后的文件系统监控d青见图3,其具体实现包括以下子步骤:
步骤2.1:启动容器之后,Docker对文件系统监控程序可执行文件进行度量,验证完文件系统监控程序可执行文件的完整性后启动文件系统监控程序;
度量的内容包括容器当前可读写层、读写层对应的init层以及层间关系文件。由于Docker采用AUFS文件系统,敌只有容器层是可读写的,容器所依赖的各层都是只读的,而可信启动子模块中的镜像度量模块可以确保这些只读层的完整性,故文仲系统度量模块只需关注容器读写层即可。
[0042]步骤2。2:文件系统监控程序启动之后计算容器的文件系统的读写层的HASH值; 步骤2,3:对容器的文件系统的读写层的HASH进行加密作为基准值存储在以容器ID
为文件名的文件中;
步骤2.4:当经过预设的时间以后,文件系统监控模块对文件系统的读写层的MSH值进行解密,然后重新计算容器的文件系统的HASH值作为实捋度量值;
步骤2.5:将步骤2.4中的两个HASH值进行对比;如果两个HASH值相等,则等待下一次度量文件系统直到删除容器;如果两个MSH值不相等,则说明度量值与基准值不一样,容器文件系统的读写层被篡改;如果管理员是合法更新了读写层文件,雨可输入管理员用户名和密码更新基准值;如果密码输入错误则身份认证失败,并报告管理员为非法修改,本流程结束;如果密码输入正确则身份认证通过,更新基准值,并回转执行所述的步骤2.3 ;如果销毁容器,贝Ij该容器的文件监控模块自行退出,并删除掉该容器的文件系统的hash基准值文件。
[0043]步骤3:容器启动后的进程监控;请见图4,其具体实现包括以下子步骤
步骤3.1:用户输入指定容器的管理策赂,即进程白名单;白名单中为可在容器中正常运行的程序;*于本发明是针对大规模集群服务器应用场景
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1