一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种容器环境下的文件防篡改方法及装置与流程

2021-11-03 11:32:00 来源:中国专利 TAG:


1.本技术涉及网络安全技术领域,尤其涉及一种容器环境下的文件防篡改方法及装置。


背景技术:

2.目前,随着容器技术的发展,业务容器化被广泛应用于多种场景中,例如,可以应用于公有云、私有云等业务中。为了保证容器文件的安全性,相应地就需要防止容器文件被篡改,因此,如何能够实现对linux操作系统容器环境下的文件防篡改进行检测,成为了一个亟待解决的问题。
3.相关技术中,当需要确定是否允许进程对文件进行修改时,可以采用内核事件触发机制实现。例如,对操作系统i/o访问相关系统调用函数进行hook处理,当进程发起文件写操作请求时,对进程的合法性进行检测,从而确定是否允许进程对文件进行修改。
4.然而,使用相关技术中的这种方式对文件防篡改进行检测时,若同一个宿主机环境下同时运行多个(2个或以上)容器实例,且任意2个容器实例内存在相同的防护目录或防护文件但各自拥有不同的访问权限,当其中任意一个容器实例中的任意一个应用发起对防护目录或防护文件的访问请求时,系统无法判断发起文件访问请求的进程来源于哪一个容器,也就无法确定该进程是否拥有该防护文件的访问请求,从而会降低文件防篡改检测的准确度。


技术实现要素:

5.本技术实施例提供一种容器环境下的文件防篡改方法及装置,以提高文件防篡改检测的准确度。
6.本技术实施例提供的具体技术方案如下:
7.一种容器环境下的文件防篡改方法,包括:
8.获取进程发起的文件修改请求,其中,所述文件修改请求中至少包括所述进程的名字空间信息和待修改文件对应的文件名或文件路径信息;
9.根据所述名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算所述进程所属的容器实例对应的容器实例标识,其中,宿主机内核管理各容器实例标识,每一个容器实例标识对应于一种预先配置的文件防护策略;
10.根据所述容器实例标识,查找到所述容器实例对应的文件防护策略,其中,所述文件防护策略中至少包括各防护目录或具体的防护文件路径和对应的访问权限;
11.根据所述文件防护策略和所述文件路径,确定是否阻止所述进程对所述待修改文件进行修改。
12.可选的,获取进程发起的文件修改请求之前,进一步包括:
13.获取防护策略配置请求,其中,所述防护策略配置请求中至少包括配置服务进程
对应的名字空间信息,防护目录或具体的防护文件路径,以及所述各文件的访问权限;
14.根据所述配置服务进程对应的名字空间信息,计算所述配置服务进程所属的容器实例标识;
15.针对具体的容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,将当前容器实例标识及配置请求中携带的每个防护策略信息字段填充到该新分配的防护信息项对应的内容字段中。
16.可选的,若所述文件防护策略中至少包括待防护列表,则根据所述文件防护策略和所述文件路径,确定是否阻止所述进程对所述待修改文件进行修改,具体包括:
17.判断所述文件路径是否包含在所述待防护列表中,其中,所述待防护列表中至少包括容器实例中的防护目录或具体防护文件对应的路径,所述待防护列表用于确定待修改文件是否处于防护状态;
18.若确定所述文件路径包含在所述待防护列表中,则确定阻止所述进程对所述待修改文件进行修改;
19.若确定所述文件路径未包含在所述待防护列表中,则确定所述待修改文件未处于防护状态,允许所述进程对所述待修改文件进行修改。
20.可选的,若所述文件防护策略中还包括排除列表,则确定所述文件路径包含在所述待防护列表中之后,进一步包括:
21.判断所述文件路径是否包含在所述排除列表中,其中,所述排除列表中至少包括容器实例中排除防护的目录或具体文件对应的路径,所述排除列表用于确定待修改文件是否处于排除防护状态;
22.若确定所述文件路径包含在所述排除列表中,则确定所述待修改文件处于排除防护状态,允许所述进程对所述待修改文件进行修改;
23.若确定所述文件路径未包含在所述排除列表中,则确定阻止所述进程对所述待修改文件进行修改。
24.可选的,若所述文件防护策略中还包括进程信任列表,则确定所述文件路径未包含在所述排除列表中之后,进一步包括:
25.判断所述文件修改请求中携带的进程名称是否包含在所述进程信任列表中,其中,所述进程信任列表中至少包括容器实例中的处于可信任状态的各进程,所述进程信任列表用于确定进程是否处于可信任状态;
26.若确定所述进程名称包含在所述进程信任列表中,则确定允许所述进程对所述待修改文件进行修改;
27.若确定所述进程名称未包含在所述进程信任列表中,则确定阻止所述进程对所述待修改文件进行修改。
28.可选的,所述名字空间信息至少包括以下一种:进程间通信名字空间、网络名字空间、文件系统挂载名字空间、进程编号名字空间、用户名字空间、主机名名字空间。
29.一种容器环境下的文件防篡改装置,包括:
30.获取模块,用于获取进程发起的文件修改请求,其中,所述文件修改请求中至少包括所述进程的名字空间信息和待修改文件对应的文件名或文件路径信息;
31.处理模块,用于根据所述名字空间信息、预设的容器实例标识计算算法,以及各名
字空间信息与容器实例标识之间的对应关系,计算所述进程所属的容器实例对应的容器实例标识,其中,宿主机内核管理各容器实例标识,每一个容器实例标识对应于一种预先配置的文件防护策略;
32.查找模块,用于根据所述容器实例标识,查找到所述容器实例对应的文件防护策略,其中,所述文件防护策略中至少包括各防护目录或具体的防护文件路径和对应的访问权限;
33.检测模块,用于根据所述文件防护策略和所述文件路径,确定是否阻止所述进程对所述待修改文件进行修改。
34.可选的,获取进程发起的文件修改请求之前,进一步包括配置模块,配置模块具体用于:
35.获取防护策略配置请求,其中,所述防护策略配置请求中至少包括配置服务进程对应的名字空间信息,防护目录或具体的防护文件路径,以及所述各文件的访问权限;
36.根据所述配置服务进程对应的名字空间信息,计算所述配置服务进程所属的容器实例标识;
37.针对具体的容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,将当前容器实例标识及配置请求中携带的每个防护策略信息字段填充到该新分配的防护信息项对应的内容字段中。
38.可选的,若所述文件防护策略中至少包括待防护列表,则检测模块具体用于:
39.判断所述文件路径是否包含在所述待防护列表中,其中,所述待防护列表中至少包括容器实例中的防护目录或具体防护文件对应的路径,所述待防护列表用于确定待修改文件是否处于防护状态;
40.若确定所述文件路径包含在所述待防护列表中,则确定阻止所述进程对所述待修改文件进行修改;
41.若确定所述文件路径未包含在所述待防护列表中,则确定所述待修改文件未处于防护状态,允许所述进程对所述待修改文件进行修改。
42.可选的,若所述文件防护策略中还包括排除列表,则确定所述文件路径包含在所述待防护列表中之后,检测模块进一步用于:
43.判断所述文件路径是否包含在所述排除列表中,其中,所述排除列表中至少包括容器实例中排除防护的目录或具体文件对应的路径,所述排除列表用于确定待修改文件是否处于排除防护状态;
44.若确定所述文件路径包含在所述排除列表中,则确定所述待修改文件处于排除防护状态,允许所述进程对所述待修改文件进行修改;
45.若确定所述文件路径未包含在所述排除列表中,则确定阻止所述进程对所述待修改文件进行修改。
46.可选的,若所述文件防护策略中还包括进程信任列表,则确定所述文件路径未包含在所述排除列表中之后,检测模块进一步用于:
47.判断所述文件修改请求中携带的进程名称是否包含在所述进程信任列表中,其中,所述进程信任列表中至少包括容器实例中的处于可信任状态的各进程,所述进程信任列表用于确定进程是否处于可信任状态;
48.若确定所述进程名称包含在所述进程信任列表中,则确定允许所述进程对所述待修改文件进行修改;
49.若确定所述进程名称未包含在所述进程信任列表中,则确定阻止所述进程对所述待修改文件进行修改。
50.可选的,所述名字空间信息至少包括以下一种:进程间通信名字空间、网络名字空间、文件系统挂载名字空间、进程编号名字空间、用户名字空间、主机名名字空间。
51.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述容器环境下的文件防篡改方法的步骤。
52.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述容器环境下的文件防篡改方法的步骤。
53.本技术实施例中,获取进程发起的文件修改请求,根据文件修改请求中包含的名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算进程所属的容器实例对应的容器实例标识,根据容器实例标识,查找到容器实例对应的文件防护策略,根据文件防护策略和文件修改请求中包含的待修改文件对应的文件路径,确定是否阻止进程对待修改文件进行修改。这样,为每一个容器实例均配置一种文件防护策略,且在进行文件防篡改检测时,首先确定出进程所属的容器实例,并根据进程所属的容器实例对应的文件防护策略进行文件防篡改检测,使得在不同容器实例中存在相同文件路径的场景下,也能够实现对文件的防篡改检测,从而提高文件防篡改的准确度。
附图说明
54.图1为本技术实施例中一种容器环境下的文件防篡改方法的流程图;
55.图2为本技术实施例中linux内核名字空间机制与容器实例之间的关系示意图;
56.图3为本技术实施例中一种容器环境下的文件防篡改系统的结构示意图;
57.图4为本技术实施例中一种容器环境下的文件防篡改方法的另一流程图;
58.图5为本技术实施例中容器环境下的文件防篡改装置的结构示意图;
59.图6为本技术实施例中电子设备的结构示意图。
具体实施方式
60.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,并不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
61.目前,业务容器化技术可以应用于多种应用场景中,例如,可以应用于公有云、私有云等。随着业务容器化技术的发展,容器文件的安全行显得尤为重要,为了保证容器文件的安全性,相应地就需要防止容器文件被篡改。因此,如何能够实现对linux操作系统环境下的文件防篡改检测,成为了一个亟待解决的问题。
62.相关技术中,当需要在linux操作系统环境下对文件防篡改进行检测时,一般采用基于内核事件触发机制的驱动级文件系统防篡改方式,在检测到发起输入/输出(input/output,i/o)写操作请求时,使用文件系统调用钩子(hook)函数,对i/o写操作请求的合法
性进行检测,若确定i/o写操作请求合法,则确定能够对文件进行写操作。
63.然而,若将相关技术中的这种文件防篡改方法应用至容器环境中时,由于i/o写操作请求的文件系统调用函数无法有效地区分各容器实例,因此,无法判断发起i/o写操作请求的进程来源于哪一个容器实例,该i/o写操作请求是否应当被允许。例如,假设同一个宿主机环境下同时运行着两种不同应用服务的容器实例a和容器实例b,这两个容器实例中存在相同文件路径“/opt/nsfocus/hds/www/data/”和进程名称“/bin/app”,对于容器实例a来说,该容器实例下的文件被期望配置为禁止写修改操作,而对于容器实例b来说,该容器实例下的文件被期望配置为允许写修改操作。若使用相关技术中的这种方式,无法确定该i/o写操作请求是否应当被允许。从而会降低文件防篡改的准确度。
64.为了解决上述问题,本技术实施例中提供了一种容器环境下的文件防篡改方法,获取进程发起的文件修改请求,根据文件修改请求中包含的名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算进程所属的容器实例对应的容器实例标识,根据容器实例标识,查找到容器实例对应的文件防护策略,根据文件防护策略和文件修改请求中包含的待修改文件对应的文件路径,确定是否阻止进程对待修改文件进行修改。这样,为每一个容器实例预先配置一个文件防护策略,在接收到进程发起的文件修改请求时,根据进程所属的容器实例,确定该进程所应当使用的文件防护策略,再通过确定出的文件防护策略确定是否阻止进程对待修改文件进行修改,从而能够提高文件防篡改的准确度。
65.基于上述实施例,参阅图1所示,为本技术实施例中一种容器环境下的文件防篡改方法的流程图,具体包括:
66.步骤100:获取进程发起的文件修改请求。
67.其中,文件修改请求中至少包括进程的名字空间信息和待修改文件对应的文件名或文件路径信息。
68.本技术实施例中,当检测到容器实例中的其中一个进程发起对于某一文件的i/o写操作时,则获取该进程发起的文件修改请求。
69.需要说明的是,由于文件修改请求是由容器实例的其中一个进程发起的,因此,在进程生成的文件修改请求中至少包括进程的名字空间信息。并且,由于文件修改请求是进程对于某一文件进行i/o写操作的请求,因此,在文件修改请求中还包括进程需要进行修改的待修改文件对应的文件名或文件路径信息。
70.进程例如可以为“/sbin/app”,本技术实施例中对此并不进行限制。
71.其中,进程的名字空间信息可以包括以下一种或任意组合:进程间通信名字空间、网络名字空间、文件系统挂载名字空间、进程编号名字空间、用户名字空间、主机名名字空间。当然,并不仅限于上述几种名字空间信息,本技术实施例中对此并不进行限制。
72.另外,需要说明的是,本技术实施例中进程发起的文件修改请求可以为对文件数据的写操作请求,还可以为对文件元数据的写操作请求,本技术实施例中对此并不进行限制。
73.步骤110:根据名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算进程所属的容器实例对应的容器实例标识。
74.其中,宿主机内核管理各容器实例标识,每一个容器实例标识对应于一种预先配
置的文件防护策略。
75.本技术实施例中,由于每一容器实例对应一个容器实例标识,因此,可以根据进程的名字空间信息,预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,确定进程所属的容器实例对应的容器实例标识,并且,由于名字空间信息为发起文件修改请求的进程对应的名字空间信息,因此,计算出的容器实例标识为进程所属的容器实例对应的容器实例标识。
76.其中,预先存储的各名字空间信息与对应的容器实例标识之间的对应关系可以通过对应关系表的形式存储在宿主机的内核中,参阅表1所示,为本技术实施例中对应关系示意表。
77.表1.
78.名字空间信息a1

0名字空间信息b1

1名字空间信息c1
‑279.如表1所示,当确定进程的名字空间信息为名字空间信息a时,则确定该进程对应的容器实例标识为1

0,当确定进程的名字空间信息为名字空间信息b时,则确定该进程对应的容器实例标识为1

1,当确定进程的名字空间信息为名字空间信息c时,则确定该进程对应的容器实例标识为1

2。
80.另外需要说明的是,本技术实施例中对于名字空间信息的类型与数量并不进行限制,并且,对于容器实例标识的数量也不进行限制。
81.进一步地,本技术实施例中,在确定进程对应的容器实例标识时,还可以基于预设的容器实例标识计算算法,对进程的名字空间信息进行计算,从而确定进程对应的容器实例标识,下面对本技术实施例中基于预设的容器实例标识计算算法确定进程对应的容器实例标识的步骤进行详细阐述,具体包括:
82.对进程的名字空间信息进行特征提取,获得名字空间信息的特征值,并根据预设的容器实例标识计算算法对特征值进行计算,从而获得进程对应的容器实例标识。
83.其中,容器实例标识计算算法例如可以为哈希算法,本技术实施例中对此并不进行限制。
84.需要说明的是,宿主机的内核中管理有多个容器实例标识,并且,不同的名字空间信息对应不同的容器实例标识,名字空间信息相同的各进程属于同一容器实例,且对应于同一容器实例标识。
85.另外,需要说明的是,每一容器实例标识对应一种文件防护策略,不同的容器实例标识对应不同的文件防护策略。
86.下面对本技术实施例中预先配置文件防护策略的步骤进行详细阐述,具体包括:
87.s1:获取防护策略配置请求。
88.其中,防护策略配置请求中至少包括配置服务进程对应的名字空间信息,防护目录或具体的防护文件路径,以及各文件的访问权限。
89.本技术实施例中,每个容器实例中运行着一个配置服务进程,当宿主机中的内核过滤驱动初始化时,文件修改策略中包含的待防护列表、排除列表和进程信任列表为空表,进而用户可以通过在终端中生成防护策略配置请求,并将生成的防护策略配置请求发送至
对应的容器实例中的配置服务进程,容器实例中的配置服务进程将包含有防护策略配置的防护策略配置请求发送至宿主机内核进行统一配置。
90.需要说明的是,由于防护策略配置请求用于对文件修改策略进行配置,因此,在防护策略配置请求中包含有各信任进程信息、配置服务进程对应的名字空间信息、防护目录或具体的防护文件路径,以及各文件的访问权限。
91.s2:根据配置服务进程对应的名字空间信息,计算配置服务进程所属的容器实例标识。
92.具体地,首先,对各进程进行分类,确定各进程所属的容器实例。
93.本技术实施例中,分别根据各进程的名字空间信息,将名字空间信息相同的进程分为一类,获得多个类别。由于每一个类别对应一个容器实例,因此,从而能够确定各进程所属的容器实例。
94.例如,假设名字空间信息为主机名名字空间,此时共有三个进程,分别为进程a、进程b和进程c,进程a的主机名名字空间为hstnamespace01,进程b的主机名名字空间为hstnamespace02,进程c的主机名名字空间为hstnamespace01,此时进程a和进程c的主机名名字空间相同,由此可知,进程a和进程c属于同一个容器实例,而进程b则属于另一容器实例。因此,每一容器实例中的各进程的名字空间信息均是相同的。
95.然后,分别对各容器实例进行计算,计算配置服务进程所属的容器实例标识。
96.本技术实施例中,分别针对各容器实例,由于每一容器实例中的所有进程所对应的名字空间信息均是相同的,因此,对配置服务进程的名字空间信息进行特征提取,获得名字空间信息的特征值,通过预设的计算方式,对获得的特征值进行计算,得到容器实例标识,从而获得该容器实例对应的容器实例标识。
97.需要说明的是,本技术实施例中的宿主机和各容器实例之间是相互独立的。
98.s3:针对具体的容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,将当前容器实例标识及配置请求中携带的每个防护策略信息字段填充到该新分配的防护信息项对应的内容字段中。
99.本技术实施例中,分别针对具体的各容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,然后,将容器实例标识填充至空白防护信息项中,并将防护策略配置请求中的所携带的防护策略信息字段填充至新分配的防护信息项对应的内容字段中,从而生成文件防护策略。
100.需要说明的是,本技术实施例中的文件防护策略例如可以为待防护列表,参阅表2所示,为本技术实施例中待防护列表。
101.表2.
[0102][0103]
需要说明的是,待防护列表中至少包括容器实例中的各进程待访问的各文件对应的文件路径信息或各文件对应的文件名称,待防护列表用于确定待修改文件是否处于防护
状态。
[0104]
本技术实施例中的文件防护策略还可以包括排除列表,参阅表3所示,为本技术实施例中排除列表。
[0105]
表3.
[0106][0107]
需要说明的是,本技术实施例中的排除列表中至少包括容器实例中的各进程排除防护的各文件对应的文件路径,以及各文件对应的文件标识,排除列表用于确定待修改文件是否处于排除防护状态。
[0108]
本技术实施例中的文件防护策略还可以包括进程信任列表,参阅表4所示,为本技术实施例中的进程信任列表。
[0109]
表4.
[0110][0111]
需要说明的是,本技术实施例中的进程信任列表中至少包括容器实例中的处于可信任状态的各进程,以及各进程对应的进程标识,进程信任列表用于确定进程是否处于可信任状态。
[0112]
另外,需要说明的是,本技术实施例中的文件防篡改策略可以为以上三种表格中的任意一种或任意组合,本技术实施例中对此并不进行限制。
[0113]
步骤120:根据容器实例标识,查找到容器实例标识对应的文件防护策略。
[0114]
其中,文件防护策略中至少包括各防护目录或具体的防护文件路径和对应的访问权限。
[0115]
本技术实施例中,由于每一容器实例标识对应一种文件防护策略,也就是说,每一容器实例中的各进程对应一种文件防护策略。因此,可以根据容器实例标识,从各文件防护策略中,查找到与容器实例标识对应的文件防护策略,并基于查找到的文件防护策略进行文件防篡改检测。
[0116]
需要说明的是,本技术实施例中,linux操作系统提供了cgroups机制和namespace机制,通过这两种机制能够使得linux操作系统的资源和视图隔离。在名字空间出现之前,linux操作系统工作于一维模式,所有的进程均可自由访问linux操作系统的各种资源。
[0117]
而当名字空间机制和cgroups机制出现之后,linux操作系统由一维模式转变为多维模式,且名字空间视图彼此隔离。参阅图2所示,为本技术实施例中linux内核名字空间机制与容器实例之间的关系示意图。如图2所示,可将名字空间作为一棵名字空间树,当linux
操作系统启动时,通过内核定义一个名字空间树的根节点,也即图2中的名字空间0,此时,所有的进程均工作在该名字空间0中,且所有的属性信息,例如文件系统挂载信息、网络资源信息、主机名信息、域名信息、进程间通信信息等,也均属于该名字空间0。
[0118]
然后,进程通过调用克隆(clone)系统函数从名字空间0中克隆一个子进程,并通过clone_xxx标志位为该子进程创建一个子名字空间,也即名字空间1

0,并将名字空间1

0作为名字空间树的一个节点,新增至名字空间树的根节点下。实际上,linux容器(linux container,lxc)和docker容器实例均为上述的一个子进程。因此,通过上述方式,可以递归地创建出若干个子进程,从而形成一棵名字空间树。从这个角度来看,宿主机本质上是一个容器实例。
[0119]
通过本技术实施例中的名字空间的视图隔离机制,使得容器实例之间彼此不可见。每一名字空间内包含文件系统挂载信息、网络资源信息、主机名信息、域名信息、进程间通信信息等名字空间信息,分别从不同层面进行视图隔离。从进程所属的各类型名字空间的角度来看,任一名字空间树上的任一个节点或不同类型名字空间树上的节点组合可以唯一地标识一个容器实例。也即,名字空间对应的名字空间信息可以包括至少一个或任意组合的名字空间,每一容器实例对应一个名字空间,每一个名字空间管理着至少一个具有相同属性信息且相同名字空间信息的进程,该进程为运行在同一容器实例中未使用clone_xxx标志位克隆的子进程。因此,同一容器实例下的所有进程属于相同的名字空间,不同容器实例下的进程则属于不同的名字空间。
[0120]
因此,容器实例中的进程工作在所属容器实例对应的名字空间中,该进程在内核中维护着指向所属容器实例的名字空间对应的名字空间信息,通过该信息可递归地获得进程名字空间树上所有节点的名字空间信息,例如可以获得进程所属容器实例、进程所属父容器实例,以及所有祖先容器实例的名字空间信息。因此,本技术实施例中的过滤驱动可获得任意容器实例中任意进程所属的、包括进程名字空间在内的所有名字空间信息,并以名字空间信息为基准信息,生成容器实例的全局唯一标识,从而获得容器实例对应的容器实例标识。
[0121]
步骤130:根据文件防护策略和文件路径,确定是否阻止进程对待修改文件进行修改。
[0122]
本技术实施例中,在确定出文件防护策略之后,就可以根据文件防护策略和文件路径,确定是否阻止进程对待修改文件进行修改。
[0123]
下面对本技术实施例中的步骤130进行详细阐述,具体包括:
[0124]
s1:判断文件路径是否包含在待防护列表中。
[0125]
其中,防护列表中至少包括容器实例中的防护目录或具体防护文件对应的路径,待防护列表用于确定待修改文件是否处于防护状态。
[0126]
本技术实施例中,从名字空间中获取待防护列表,并根据待修改文件对应的文件路径,从待防护列表中查找是否包含有该文件路径,从而判断待修改文件对应的文件路径是否包含在待防护列表中。
[0127]
需要说明的是,本技术实施例中的待防护列表中至少包括该容器实例中的防护目录或具体防护文件对应的路径,待防护列表用于确定待修改文件是否处于防护状态。
[0128]
s2:若确定文件路径包含在待防护列表中,则确定阻止进程对待修改文件进行修
改。
[0129]
本技术实施例中,若确定文件路径包含在待防护列表中,则确定该文件此时处于防护状态,容器实例内的进程在对该文件执行修改操作时,受到防护服务的限制,因此,确定阻止进程对该待修改文件进行修改。
[0130]
例如,假设进程所要修改的文件对应的文件路径为/opt/nsfocus/www/html,以文件路径/opt/nsfocus/www/html为关键字,遍历匹配如表2所示的待防护列表,由于表2中包含有/opt/nsfocus/www/html的文件路径,因此,确定进程所要修改的待修改文件对应的文件路径包含在待防护列表中,此时待修改文件处于防护状态,确定阻止进程对该待修改文件进行修改。
[0131]
s3:若确定文件路径未包含在待防护列表中,则确定待修改文件未处于防护状态,允许进程对待修改文件进行修改。
[0132]
本技术实施例中,若确定文件路径未包含在待防护列表中,则确定该文件未处于防护状态,则该容器实例中的任何进程在对该文件执行写操作时,均不受防护服务的限制,因此,确定允许进程对该待修改文件进行修改。
[0133]
例如,假设进程所要修改的文件对应的文件路径为/opt/nsfocus/www/word,则以文件路径/opt/nsfocus/www/word为关键字,遍历匹配如表2所示的待防护列表,由于表2中未包含有/opt/nsfocus/www/word的文件路径,因此,确定进程所要修改的待修改文件对应的文件路径未包含在待防护列表中,此时待修改文件未处于防护状态,允许该进程对该待修改文件进行修改。
[0134]
进一步地,本技术实施例中,虽然待修改文件处于防护状态,但是,在一些应用场景下,仍然需要对待修改文件进行修改,因此,确定待修改文件对应的文件路径包含在待防护列表中时,通过预先配置排除列表,并根据排除列表判断待修改文件是否处于防护状态。下面对本技术实施例中确定待修改文件对应的文件路径是否包含在排除列表中的步骤进行详细阐述,具体包括:
[0135]
a1:判断文件路径是否包含在排除列表中。
[0136]
其中,排除列表中至少包括容器实例中排除防护的目录或具体文件对应的路径,排除列表用于确定待修改文件是否处于排除防护状态。
[0137]
本技术实施例中,从名字空间中获取排除列表,并根据待修改文件对应的文件路径,从排除列表中查找是否包含有该文件路径,从而判断待修改文件对应的文件路径是否包含在排除列表中,具体可以分为文件路径包含在排除列表中,和文件路径未包含在排除列表中,具体过程在步骤a2和步骤a3中进行详细说明。
[0138]
a2:若确定文件路径包含在排除列表中,则确定待修改文件处于排除防护状态,允许进程对待修改文件进行修改。
[0139]
本技术实施例中,若确定文件路径包含在排除列表中,则确定该待修改文件未处于防护状态,容器实例内的任何进程在修改该文件时,不受到防护服务的限制,允许进程对该待修改文件进行修改。
[0140]
例如,假设进程所要修改的待修改文件对应的文件路径为/opt/nsfocus/www/html,以文件路径/opt/nsfocus/www/html为关键字,遍历匹配如表3所示的排除列表,由于表3中包含有/opt/nsfocus/www/html的文件路径,因此,确定进程所需要修改的待修改文
件对应的文件路径包含在了排除列表中,此时待修改文件未处于防护状态,容器实例内的任何进程在修改该待修改文件时,不受防护服务的限制。
[0141]
a3:若确定文件路径未包含在排除列表中,则确定阻止进程对待修改文件进行修改。
[0142]
本技术实施例中,若确定文件路径未包含在排除列表中,则确定该待修改文件处于防护状态,因此,容器实例内的任何进程在修改文件时,受到防护服务的限制,无法对该文件进行修改。
[0143]
例如,假设进程所要修改的文件对应的文件路径为/opt/nsfocus/www/word,则以文件路径/opt/nsfocus/www/word为关键字,遍历匹配如表3所示的排除列表,由于表3中未包含有/opt/nsfocus/www/word的文件路径,因此,确定进程所要修改的待修改文件对应的文件路径未包含在排除列表中,此时待修改文件处于防护状态,阻止该进程对该待修改文件进行修改。
[0144]
进一步地,本技术实施例中,当确定文件路径未包含在排除列表中时,还可以判断进程是否为能够被信任的进程,从而再次确定是否可以对待修改文件进行修改,下面对本技术实施例中判断发起文件修改请求的进程是否为能够被信任的进程的步骤进行详细阐述,具体包括:
[0145]
n1:判断进程名称是否包含在进程信任列表中。
[0146]
其中,进程信任列表中至少包括容器实例中的处于可信任状态的各进程,进程信任列表用于确定进程是否处于可信任状态。
[0147]
本技术实施例中,若确定待修改文件处于防护状态时,则进一步需要对判断进程是否处于可信任状态,因此,从名字空间中获取进程信任列表,并根据进程对应的进程名称,从进程信任列表中查找是否包含有该进程名称,从而判断该进程对应的进程名称是否包含在进程信任列表中。
[0148]
n2:若确定进程名称包含在进程信任列表中,则确定允许进程对待修改文件进行修改。
[0149]
本技术实施例中,若确定进程对应的进程名称包含在进程信任列表中,则确定该进程处于可信任状态,因此,该进程在对待修改文件进行修改时,不受到防护服务的限制,允许进程对该待修改文件进行修改。
[0150]
例如,假设进程对应的进程名称为/sbin/vim,则以进程名称/sbin/vim为关键字,遍历如表4所示的进程信任列表,由于表4中包含有/sbin/vim的进程名称,因此,确定该进程对应的进程名称包含在进程信任列表中,此时进程处于可信任状态,确定允许该进程对该待修改文件进行修改。
[0151]
n3:若确定进程名称未包含在进程信任列表中,则确定阻止进程对待修改文件进行修改。
[0152]
本技术实施例中,若确定进程对应的进程名称未包含在进程信任列表中,则确定该进程在对该文件进行修改时,受到防护服务的限制,无法对该文件进行修改。
[0153]
例如,假设进程对应的进程名称为/sbin/vim,则以进程名称/sbin/vim为关键字,遍历如表4所示的进程信任列表,由于表4中未包含有/sbin/vim的进程名称,因此,确定该进程未包含在进程信任列表中,此时进程处于不可信任状态,确定阻止该进程对该待修改
文件进行修改。
[0154]
本技术实施例中,获取进程发起的文件修改请求,根据文件修改请求中包含的进程的名字空间信息,以及各名字空间信息与容器实例标识之间的对应关系,确定进程所属的容器实例对应的容器实例标识,根据容器实例标识,查找到容器实例对应的文件防护策略,根据文件防护策略和文件修改请求中包含的待修改文件对应的文件路径,确定是否阻止进程对待修改文件进行修改。这样,通过本技术实施例中的方法,不依赖于任何容器关于文件系统相关的特殊技术,直接从驱动层面进行控制,可解决相关技术中对于docker容器技术的强依赖和应用场景限制,对于lxc或以cgroups和名字空间为基础的虚拟化技术同样适用,扩大了本技术实施例中的方法的应用场景。
[0155]
参阅图3所示,为本技术实施例中一种容器环境下的文件防篡改系统的结构示意图,具体包括:
[0156]
1、宿主机。
[0157]
2、容器实例

0。
[0158]
本技术实施例中,容器实例

0中包含有各进程。
[0159]
容器实例

0中配置有篡改日志管理模块,篡改日志管理模块用于归并篡改日志并向用户提供日志展示的窗口,并且,还配置有防护配置服务模块,防护配置服务模块用于接收用户下发的防护配置规则,并将接收到的防护配置规则转发至内核过滤驱动。
[0160]
3、容器实例

1。
[0161]
本技术实施例中,容器实例

1中包含有各进程。
[0162]
容器实例

1中配置有篡改日志管理模块,篡改日志管理模块用于归并篡改日志并向用户提供日志展示的窗口,并且,还配置有防护配置服务模块,防护配置服务模块用于接收用户下发的防护配置规则,并将接收到的防护配置规则转发至内核过滤驱动。
[0163]
4、内核过滤驱动。
[0164]
(1)特征信息管理模块。
[0165]
本技术实施例中,特征信息管理模块用于对进程的名字空间信息进行管理。
[0166]
其中,名字空间信息例如可以为进程间通信名字空间、网络名字空间、文件系统挂载名字空间、进程编号名字空间、用户名名字空间、主机名名字空间。
[0167]
(2)篡改过滤模块。
[0168]
本技术实施例中,篡改过滤模块用于对容器实例

0和容器实例

1内的进程发起的i/o写请求进行过滤。
[0169]
(3)文件防护规则配置模块。
[0170]
本技术实施例中,文件防护规则配置模块用于以容器实例为单位,管理用户配置的防护配置规则。
[0171]
(4)进程名字空间

0。
[0172]
本技术实施例中,进程命名空间

0中包含有待防护列表、进程信任列表和排除列表。
[0173]
(5)进程命名空间

1。
[0174]
本技术实施例中,进程命名空间

1中包含有待防护列表、进程信任列表和排除列表。
[0175]
本技术实施例中,从进程所属的多种类型的名字空间信息中提取出特征值生成全局唯一特征值来标识一个容器实例,从而确定出容器实例标识,容器实例将文件防护策略下发到内核i/o过滤驱动时以该特征值为关键字进行分类存储,当过滤驱动检测到文件修改请求时,提取出发起文件修改请求的进程所属的包括进程名字空间在内的多种类型名字空间的关键信息、待修改文件对应的文件路径及进程等信息,并以此为关键信息匹配对应容器实例的文件防护策略,实现对不同容器实例下的待修改文件进行精确地篡改保护操作。这样,本技术实施例中的方法能够以安装软件的形式可以独立部署在宿主机或任意一个容器实例中,也可以同时部署在宿主机及其中的若干容器实例中,可以克服相关技术中只能部署在宿主机或一个容器实例中,实现应用场景的兼容扩大。并且,本技术实施例中的方法能够在内核过滤驱动层面将文件防护策略从一维模式扩展到多维,完美地解决了相关技术中关于宿主机及不同容器实例中存在相同防护目录场景时不能精确防护的问题。
[0176]
基于上述实施例,参阅图4所示,为本技术实施例中一种容器环境下的文件防篡改方法的另一流程图,具体包括:
[0177]
步骤400:启动容器实例。
[0178]
步骤401:若确定容器实例开始运行,则以开机服务的形式自动开启文件防篡改服务。
[0179]
本技术实施例中,在开启文件防篡改服务时,包括开启内核过滤驱动的加载、防护配置服务以及篡改日志管理服务。
[0180]
需要说明的是,内核过滤驱动属于宿主机全局资源只需要加载一次,如果已经有其他运行文件防篡改服务的容器实例处于工作状态,则本容器实例加载内核过滤驱动前会检测到驱动已加载而跳过该加载过程。
[0181]
步骤402:将内核过滤驱动进行初始化,使得容器实例的文件防护策略中的防护配置表为空。
[0182]
本技术实施例中,该防护配置表的每一项记录容器实例的属性信息及其对应的文件防护策略,包括待防护列表、排除列表、进程信任列表及防护状态等信息,针对具体的容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,将当前容器实例标识及配置请求中携带的每个防护策略信息字段填充到该新分配的防护信息项对应的内容字段中。
[0183]
需要说明的是,在具体实现过程中可将这些信息进行整合以提高性能。
[0184]
步骤403:用户通过容器实例中的防护配置服务对该容器实例下发文件防护策略。
[0185]
需要说明的是,本技术实施例中的文件防护策略例如可以是待防护策略、排除防护策略和进程信任策略之一或全部。
[0186]
步骤404:获取防护策略配置请求,分别根据各进程对应的名字空间信息,确定各进程所属的容器实例,并计算出容器实例对应的容器实例标识。
[0187]
本技术实施例中,内核过滤驱动收到容器实例的防护策略配置请求,提取防护配置服务进程的包括进程名字空间在内的多种名字空间信息并生成宿主机全局资源唯一的特征值信息,也即容器实例标识,并以此特征值为关键字,将该容器实例对应的防护配置规则新增或更新到文件防护策略中。
[0188]
步骤405:容器实例中的某进程发起文件修改请求。
[0189]
步骤406:根据名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算进程所属的容器实例对应的容器实例标识。
[0190]
本技术实施例中,内核过滤驱动收到容器实例中进程发起的文件修改请求,提取该进程的包括进程名字空间在内的多种名字空间信息并生成宿主机全局资源唯一的特征值,该特征值就是该进程所属的容器实例标识,同时,提取出该进程的映像文件名称及其待修改文件的文件路径。
[0191]
步骤407:判断容器实例的文件防护服务状态是否为开启,若是,则执行步骤408,若否,则执行步骤413。
[0192]
本技术实施例中,检查容器实例的文件防护服务状态,如果状态为关闭则表明服务未处于激活状态,容器实例内的任何应用写该文件时不受本防护服务的限制;如果状态为开启则需要继续判断待修改文件是否处于防护状态。
[0193]
步骤408:判断容器实例标识是否包含在文件防护配置列表中,若是,则执行步骤409,若否,则执行步骤413。
[0194]
本技术实施例中,根据容器实例标识查询文件防护配置列表,若确定查找不存在,则确定该容器实例未运行文件防篡改服务或未配置任何防护配置信息,即:该文件未处于防护状态,容器内的任何应用写该文件时不受本防护服务的限制。若确定查找存在,则确定该容器实例存在防护配置信息,则需要进一步判断待修改文件是否处于待防护列表中。
[0195]
步骤409:判断待修改文件的文件路径是否包含在待防护列表中,若是,则执行步骤410,若否,则执行步骤413。
[0196]
本技术实施例中,以待修改文件对应的文件路径为关键字,遍历待防护列表,匹配文件路径及所属祖先目录,若确定待修改文件对应的文件路径匹配失败,则确定该待修改文件不处于防护状态,容器实例内的任何进程在修改该待修改文件时不受本防护服务的限制,若确定待修改文件对应的文件路径能够匹配成功,则需要进一步判断文件路径是否包含在排除列表中。
[0197]
步骤410:判断文件路径是否包含在排除列表中,若是,则执行步骤413,若否,则执行步骤411。
[0198]
本技术实施例中,以待修改文件对应的文件路径为关键字,遍历匹配排除列表,若确定待修改文件对应的文件路径能够匹配成功,则确定该待修改文件不处于防护状态,容器实例内的任何进程在修改该待修改文件时不受本防护服务的限制,若确定待修改文件对应的文件路径未能匹配成功,则需要继续判断进程是否包含在进程信任列表中。
[0199]
步骤411:判断进程名称是否包含在进程信任列表中,若是,则执行步骤413,若否,则执行步骤412。
[0200]
本技术实施例中,以进程的映像文件对应的文件路径为关键字,遍历进程信任列表,若确定进程名称能够匹配成功,则确定该进程在修改该待修改文件时不受本防护服务的限制,若确定进程名称未能匹配成功,则文件防护服务禁止该进程当前的文件修改请求,同时,向告警日志管理服务输出篡改日志。
[0201]
需要说明的是,由于容器视图是彼此隔离的,此处产生的篡改日志为发送到该进程对应容器实例中的篡改日志管理进程。
[0202]
另外,需要说明的是,容器与内核驱动之间的通信可以通过内存文件系统或字符
设备驱动实现,通过自定义的驱动函数可以实现容器视图内防护服务相关资源的隔离。
[0203]
步骤412:阻止进程对待修改文件进行修改。
[0204]
步骤413:允许进程对待修改文件进行修改。
[0205]
本技术实施例中,通过该方法能够可有效避免共享pid进程名字空间的场景下不能有效区分不同容器实例的场景,并且,本技术实施例中的这种方法安装软件的形式进行部署,将宿主机和容器实例进行同等条件授权,将原来以宿主机为授权单元改变为容器实例为授权单元,大大提高了经济效益。
[0206]
基于同一发明构思,本技术实施例中还提供了一种容器环境下的文件防篡改装置,该容器环境下的文件防篡改装置可以是硬件结构、软件模块、或硬件结构加软件模块。基于上述实施例,参阅图5所示为本技术实施例中容器环境下的文件防篡改装置的结构示意图,具体包括:
[0207]
获取模块500,用于获取进程发起的文件修改请求,其中,所述文件修改请求中至少包括所述进程的名字空间信息和待修改文件对应的文件名或文件路径信息;
[0208]
处理模块510,用于根据所述名字空间信息、预设的容器实例标识计算算法,以及各名字空间信息与容器实例标识之间的对应关系,计算所述进程所属的容器实例对应的容器实例标识,其中,宿主机内核管理各容器实例标识,每一个容器实例标识对应于一种预先配置的文件防护策略;
[0209]
查找模块520,用于根据所述容器实例标识,查找到所述容器实例对应的文件防护策略,其中,所述文件防护策略中至少包括各防护目录或具体的防护文件路径和对应的访问权限;
[0210]
检测模块530,用于根据所述文件防护策略和所述文件路径,确定是否阻止所述进程对所述待修改文件进行修改。
[0211]
可选的,获取进程发起的文件修改请求之前,进一步包括配置模块540,配置模块540具体用于:
[0212]
获取防护策略配置请求,其中,所述防护策略配置请求中至少包括配置服务进程对应的名字空间信息,防护目录或具体的防护文件路径,以及所述各文件的访问权限;
[0213]
根据所述配置服务进程对应的名字空间信息,计算所述配置服务进程所属的容器实例标识;
[0214]
针对具体的容器实例,从宿主机内核管理的容器实例防护信息表中分配一个空白防护信息项,将当前容器实例标识及配置请求中携带的每个防护策略信息字段填充到该新分配的防护信息项对应的内容字段中。
[0215]
可选的,若所述文件防护策略中至少包括待防护列表,则确定是否阻止所述进程对所述待修改文件进行修改时,检测模块530具体用于:
[0216]
判断所述文件路径是否包含在所述待防护列表中,其中,所述待防护列表中至少包括容器实例中的防护目录或具体防护文件对应的路径,所述待防护列表用于确定待修改文件是否处于防护状态;
[0217]
若确定所述文件路径包含在所述待防护列表中,则确定阻止所述进程对所述待修改文件进行修改;
[0218]
若确定所述文件路径未包含在所述待防护列表中,则确定所述待修改文件未处于
防护状态,允许所述进程对所述待修改文件进行修改。
[0219]
可选的,若所述文件防护策略中还包括排除列表,则确定所述文件路径包含在所述待防护列表中之后,检测模块530进一步用于:
[0220]
判断所述文件路径是否包含在所述排除列表中,其中,所述排除列表中至少包括容器实例中排除防护的目录或具体文件对应的路径,所述排除列表用于确定待修改文件是否处于排除防护状态;
[0221]
若确定所述文件路径包含在所述排除列表中,则确定所述待修改文件处于排除防护状态,允许所述进程对所述待修改文件进行修改;
[0222]
若确定所述文件路径未包含在所述排除列表中,则确定阻止所述进程对所述待修改文件进行修改。
[0223]
可选的,若所述文件防护策略中还包括进程信任列表,则确定所述文件路径未包含在所述排除列表中之后,检测模块530进一步用于:
[0224]
判断所述文件修改请求中携带的进程名称是否包含在所述进程信任列表中,其中,所述进程信任列表中至少包括容器实例中的处于可信任状态的各进程,所述进程信任列表用于确定进程是否处于可信任状态;
[0225]
若确定所述进程名称包含在所述进程信任列表中,则确定允许所述进程对所述待修改文件进行修改;
[0226]
若确定所述进程名称未包含在所述进程信任列表中,则确定阻止所述进程对所述待修改文件进行修改。
[0227]
可选的,所述名字空间信息至少包括以下一种:进程间通信名字空间、网络名字空间、文件系统挂载名字空间、进程编号名字空间、用户名字空间、主机名名字空间。
[0228]
基于上述实施例,参阅图6所示为本技术实施例中电子设备的结构示意图。
[0229]
本技术实施例提供了一种电子设备,该电子设备可以包括处理器610(center processing unit,cpu)、存储器620、输入设备630和输出设备640等,输入设备630可以包括键盘、鼠标、触摸屏等,输出设备640可以包括显示设备,如液晶显示器(liquid crystal display,lcd)、阴极射线管(cathode ray tube,crt)等。
[0230]
存储器620可以包括只读存储器(rom)和随机存取存储器(ram),并向处理器610提供存储器620中存储的程序指令和数据。在本技术实施例中,存储器620可以用于存储本技术实施例中任一种容器环境下的文件防篡改方法的程序。
[0231]
处理器610通过调用存储器620存储的程序指令,处理器610用于按照获得的程序指令执行本技术实施例中任一种容器环境下的文件防篡改方法。
[0232]
基于上述实施例,本技术实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意方法实施例中的容器环境下的文件防篡改方法。
[0233]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产品的形式。
[0234]
本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0235]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0236]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0237]
显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献