一种容器完整性校验方法与流程

文档序号:22757847发布日期:2020-10-31 09:55阅读:197来源:国知局
一种容器完整性校验方法与流程

本发明涉及linux系统运行完整性度量领域,更具体地说,本发明涉及一种容器完整性校验方法。



背景技术:

完整性度量是指将文件内容和文件的属性/扩展属性,通过加密哈希生成对应的ima/evm串完整性度量值,以扩展属性方式保存在文件系统节点中;系统运行时在文件被访问前,内核ima/evm模块通过校验文件的完整性度量值,判断文件是否被离线非法篡改过;如果有,返回非法结果给系统,从而阻止访问或运行该文件。docker创建容器时,其挂载目录是动态确定的,无法静态生成容器中可执行文件的完整性度量值,导致这些文件在运行时无法通过完整性度量从而被判断为非法,从而不能正常运行。

现有的技术方案:目前并没有相关方面的技术方案,我们之前想到的一个方案是,通过修改内核完整性度量模块,使其在校验文件前,判断文件所属的namespace,从namespace判断其是否是docker进程,若是,则不对其进行完整性校验,直接判定为合法文件,规避系统完整性度量,但这有可能对系统进行破坏,使得没有通过完整性度量的容器应用运行,安全性不高。

在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。



技术实现要素:

为了克服现有技术的上述缺陷,本发明的实施例提供一种容器完整性校验方法,本发明所要解决的技术问题是:如何动态生成docker容器可执行文件、.so文件和.ko文件的完整性度量值,使得容器文件能够通过完整性度量值校验,保证了系统的安全性。

为实现上述目的,本发明提供如下技术方案:一种容器完整性校验方法,所述校验方法包括:

s1:建立钩子函数监控mount系统调用;

s2:启动docker服务,调用dockercreate或dockerrun创建容器;s3:容器被创建过程中挂载容器文件系统时,mount系统调用将被调用;s4:钩子函数运行,分析其参数,获得容器文件系统挂载目录,执行mount系统调用原功能;

s5:遍历容器挂载目录,找出可执行文件、so文件和ko文件,根据文件内容和文件路径,计算出文件完整性度量值并保存在该文件的扩展属性里;s6:在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,通过校验则执行,否则报错;

s7:停止docker服务,执行完毕之后容器被终止。

实施方式为,先建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值。然后启动docker系统服务,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同(如devicemapper、overlay2fs等),容器内文件系统挂载目录也会不同。钩子函数将会接管系统调用运行,可分析其参数,判断是否是docker容器文件系统进行挂载,若是则获得容器文件系统挂载目录,并继续执行mount系统调用原功能,完成挂载。搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,校验通过则执行,否则报错。运行systemctlrestartdocker重启docker服务,再创建新容器重复s2-s7步骤。

在一个优选地实施方式中,建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值。

在一个优选地实施方式中,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。

在一个优选地实施方式中,docker创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同,容器内文件系统挂载目录也会不同。

在一个优选地实施方式中,搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。

在一个优选地实施方式中,运行systemctlrestartdocker重启docker服务,再创建新容器重复s2-s7步骤。

本发明的技术效果和优点:

本发明先建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值。然后启动docker系统服务,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同(如devicemapper、overlay2fs等),容器内文件系统挂载目录也会不同。钩子函数将会接管系统调用运行,可分析其参数,判断是否是docker容器文件系统进行挂载,若是则获得容器文件系统挂载目录,并继续执行mount系统调用原功能,完成挂载。搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,校验通过则执行,否则报错。运行systemctlrestartdocker重启docker服务,再创建新容器重复s2-s7步骤。根据docker创建的容器,主动生成完整性度量值,赋值给容器文件,使文件能够通过系统正常的完整性度量值校验,无需规避完整性度量值校验来运行容器,不会影响系统的安全性。

附图说明

图1为本发明的整体运行示意图。

具体实施方式

在将结合本发明的实施例更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些示例实施方式使得本公开的描述将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多示例实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的示例实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、步骤等。在其它情况下,不详细示出或描述公知结构、方法、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。

本发明提供了一种容器完整性校验方法,所述校验方法包括:

s1:建立钩子函数监控mount系统调用;

s2:启动docker服务,调用dockercreate或dockerrun创建容器;s3:容器被创建过程中挂载容器文件系统时,mount系统调用将被调用;s4:钩子函数运行,分析其参数,获得容器文件系统挂载目录,执行mount系统调用原功能;

s5:遍历容器挂载目录,找出可执行文件、so文件和ko文件,根据文件内容和文件路径,计算出文件完整性度量值并保存在该文件的扩展属性里;s6:在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,通过校验则执行,否则报错;

s7:停止docker服务,执行完毕之后容器被终止。

建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值。

启动docker系统服务,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。

docker创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同,容器内文件系统挂载目录也会不同。

钩子函数将会接管系统调用运行,可分析其参数,判断是否是docker容器文件系统进行挂载,若是则获得容器文件系统挂载目录,并继续执行mount系统调用原功能,完成挂载。

搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。

在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,校验通过则执行,否则报错。

运行systemctlrestartdocker重启docker服务,再创建新容器重复s2-s7步骤。

实施方式具体为:先建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值。然后启动docker系统服务,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同(如devicemapper、overlay2fs等),容器内文件系统挂载目录也会不同。钩子函数将会接管系统调用运行,可分析其参数,判断是否是docker容器文件系统进行挂载,若是则获得容器文件系统挂载目录,并继续执行mount系统调用原功能,完成挂载。搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,校验通过则执行,否则报错。运行systemctlrestartdocker重启docker服务,再创建新容器重复s2-s7步骤。根据docker创建的容器,主动生成完整性度量值,赋值给容器文件,使文件能够通过系统正常的完整性度量值校验,无需规避完整性度量值校验来运行容器,不会影响系统的安全性。

本发明工作原理:

建立钩子函数监控mount系统调用ksys_mount,该钩子函数形式与ksys_mount函数完全一致,可通过该函数获得mount系统调用各个参数值;启动docker系统服务,使用dockerrun命令来启动容器,docker在后台运行的标准操作包括:检查本地是否存在指定的镜像、使用镜像创建并启动容器、若不存在指定的镜像,则从镜像仓库下载。docker创建容器过程中,会调用mount系统调用挂载容器内文件系统。docker采用的存储驱动不同(如devicemapper、overlay2fs等),容器内文件系统挂载目录也会不同。钩子函数将会接管系统调用运行,可分析其参数,判断是否是docker容器文件系统进行挂载,若是则获得容器文件系统挂载目录,并继续执行mount系统调用原功能,完成挂载;搜索容器文件系统所挂载目录中所有的可执行文件、so文件和ko文件,计算出文件的完整性度量值并保存到文件属性中。在容器中运行可执行文件、so文件和ko文件时,会启动系统的完整性度量功能,判断文件能否通过度量,校验通过则执行,否则报错。

最后应说明的是:首先,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明的基础上,以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围;

其次:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1