基于启发式规则的主机软件发现方法及装置
未命名
08-07
阅读:132
评论:0

1.本发明涉及计算机软件管理领域,具体为一种基于启发式规则的主机软件发现方法及装置。
背景技术:
2.随着对开发速度的要求越来越高,企业在开发中引入第三方的软件产品成为主流开发模式,同时随着开源社区的繁荣和发展,软件引入变得越来越方便快捷,也使得软件系统越来越复杂,这种变化加快开发速度的同时也给系统带来潜在的风险和隐患,每一个引入的软件都可能存在不在掌控内的漏洞,且漏洞增加速度快、漏洞库更新慢,传统的等待漏洞公布后再扫描修补的模式费时、滞后,已不再适应如今快速的开发周期,及时全面地掌握主机内存在的软件是提前预防风险的重要手段。
3.工业界应用最为广泛的方法是操作系统提供的官方软件包管理器,比如linux操作系统下的apt、yum等工具,其服务器端维护一个软件仓库,客户端连接服务器端获取软件包,自动化安装时将该软件信息写入本地数据库表,用户后续通过直接读取数据库表获得本地存在的软件列表。windows系统下的控制面板所列软件也是按照规范安装,在注册表中进行注册了的软件。操作系统原生工具运行快速,缺点是只能发现通过官方途径安装的、符合规范流程的软件,不能发现用户自行编译安装、直接解压缩二进制文件等非官方途径安装的软件。
4.学术界传统的基于规则匹配的软件发现方法依赖专业人员制定匹配规则,匹配规则可以是扫描一个特定文件的存在或者是系统配置信息等。该方法简单、直接、速度快,但规则的可用性高度依赖专业人员的专业性,容易被绕过,同时目前软件更新周期短,规则需要频繁更新,这在目前的软件数量和更新速度下成本高昂。
5.另外有基于机器学习的方法,这类方法能够发现通过各种途径安装的软件,但是应用前提较为严格,需要持续监控目标主机的文件系统更改记录并从主机的文件系统中分离出单独软件包,实际场景下难以提供单独、准确的软件包供分类,需要持续监控系统文件更改记录的方法也无法发现系统早已存在的软件。同时这类方法可以看作是通用的基于规则的方法,因为应用效果依然受样本全面性限制。
技术实现要素:
6.针对上述问题,本发明公开了一种基于启发式规则的主机软件发现方法及装置,用户在使用本发明部署提供的方法时,能够自动化发现目标主机内存在的软件列表,结果涵盖通过各种途径安装的软件,且不需要事先训练模型。
7.为解决上述问题,本发明的技术方案包括:
8.一种基于启发式规则的主机软件发现方法,所述方法包括:
9.获取目标主机中所有文件目录节点的属性;其中,所述属性包括:文件属主、文件属组、状态时间和绝对路径;
10.基于该属性对所述文件目录节点聚类,得到若干个软件簇;
11.针对每一个软件簇,基于所有文件的绝对路径构建前缀树,并基于前缀树,获取该软件簇中频次最高的k个最长公共前缀;
12.将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果。
13.进一步地,所述基于该属性对所述文件目录节点聚类,得到若干个软件簇,包括:
14.获取该属性的属性特征;
15.对所述属性特征向量化;
16.对所述特征向量应用密度聚类算法,得到软件簇。
17.进一步地,所述获取该属性的属性特征,包括:
18.对文件属主的特征进行onehot编码,以得到文件属主对应的特征向量;
19.和,
20.对文件属组的特征进行onehot编码,以得到文件属组对应的特征向量;
21.和,
22.基于状态时间对应的毫秒级时间戳,得到状态时间对应的特征向量;
23.和,
24.获取绝对路径中后n级的文件名;
25.使用哈希映射对后n级的文件名中的每一文件名进行哈希映射,得到该文件名对应的ascii码;
26.将所有ascii码累加,得到绝对路径对应的特征向量。
27.进一步地,所述针对每一个软件簇,基于所有文件的绝对路径构建前缀树,包括:
28.按系统文件分隔符切割文件路径,得到每个文件的绝对路径命名列表;
29.根据系统常见命名进行绝对路径命名列表中绝对路径命名的过滤,得到过滤后的绝对路径命名列表;
30.基于分隔符进行过滤后的绝对路径命名列表中绝对路径命名的字符串切分,得到预处理后的绝对路径命名列表;
31.从前缀树的根节点开始,将预处理后的绝对路径命名列表中绝对路径命名的字符串,按字符插入前缀树中的节点,以使根节点到任一节点的路径上所经过的字符连接起来就是该节点代表的字符串;其中,所述根节点中的数据为空。
32.进一步地,所述将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果,包括:
33.基于字符串长度,计算最长公共前缀与软件名之间的匹配度score;
34.根据所述匹配度score,判定该软件簇对应的软件名;
35.依据所有软件簇对应的软件名,得到目标主机的软件发现结果。
36.进一步地,所述匹配度其中,tag表示最长公共前缀,app表示软件名单中的软件名,len(
·
)表示计算字符串长度,lcs
tag,app
表示字符串tag和字符串app的最长公共子串。
37.一种基于启发式规则的主机软件发现装置,所述装置包括:
38.获取模块,用于获取目标主机中所有文件目录节点的属性;其中,所述属性包括:文件属主、文件属组、状态时间和绝对路径;
39.聚类模块,用于基于该属性对所述文件目录节点聚类,得到若干个软件簇;
40.计算模块,用于针对每一个软件簇,基于所有文件的绝对路径构建前缀树,并基于前缀树,获取该软件簇中频次最高的k个最长公共前缀;
41.匹配模块,用于将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果。
42.一种电子设备,其特征在于,包括:处理器,以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现上述任一所述方法。
43.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现上述任一所述方法。
44.与现有技术相比,本发明的积极效果为:
45.1.本发明能够提取出软件的文件集合,利用软件的共有特征使得同一软件的文件集合聚类在一起。
46.2.本发明能够自动化发现通过各种途径安装的软件,包括通过官方软件管理工具(apt,yum
47.等)安装的软件,人工参与(源代码编译,二进制代码解压缩等)安装的软件。
48.3.本发明几乎不依赖先验知识,只需要维护一个软件名列表,克服了现有技术需要事先训练模型或人为参与的缺点。
附图说明
49.图1是本发明的工作流程图。
50.图2是本发明的构建前缀树流程示例。
具体实施方式
51.下面将结合附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明特定实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
52.本发明的主机软件发现方法,可运行于任何拥有目标主机文件系统访问权限的主机上,通过获取目标主机文件系统相关属性实现对目标主机上的软件发现。
53.如图1所示,本发明的主机软件发现方法包括目标主机文件目录信息获取、软件空间聚类、文件命名最长公共前缀获取、和软件名模糊匹配四个步骤。下面以在linux操作系统下运行为例展示本方法的运行流程。
54.步骤1:获取目标主机文件目录信息。
55.软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文档一般也被认为是软件的一部分。表现在文件系统上,软件是一个文件集合,包含可执行程序、数据、文档等相关文件,与非软件文件并无本质区别。但是一个软件的文件集合的状态时间(last change time,简称ctime)总是十分相近。理由如下:状态时间,即文件最近一次元数据修改
的时间,这里修改有两层意思:1)修改文件/文件夹的属主、属组及访问权限等。2)修改文件内容。表现在软件文件上即为软件的安装时间,因为在软件安装过程中即确定这些文件的属主、属组和访问权限等,修改软件文件内容的机会可少量发生在修改配置文件等文档文件上,用户一般不会对大量软件文件进行内容上的修改。另一方面一个软件的文件集合总是同属于一个属主、属组。最后一个软件的文件集合在其路径的命名空间上也会有较高的相似度。
56.在一个实施例中,本发明要求操作者拥有目标主机的文件系统访问权限,利用工具获取目标主机文件目录信息,内容包括每个文件的文件属主,文件属组,状态时间,绝对路径。
57.a)文件属主:该文件的所有者。
58.b)文件属组:在linux操作系统中,用户是按组分类的,一个用户属于一个或多个组。该属性指该文件属主所属组。
59.c)状态时间:文件最近一次元数据修改的时间,这里修改有两层意思:1)修改文件
60./文件夹的属主、属组及访问权限等。2)修改文件内容。
61.d)绝对路径:完整的描述文件位置的路径。
62.此外,由于特殊目录在系统运行时会根据系统状态产生大量临时文件,会对下一步的软件空间聚类造成干扰,因此需要同时过滤掉特殊目录下的文件,如/sys/,/proc/。
63.a)/sys/:设备信息,内核数据
64.b)/proc/:内核运行状态
65.步骤2:量化文件属性应用机器学习聚类算法。
66.本发明通过提取文件属性特征并量化,结合密度聚类算法将文件节点聚类,分离出软件簇。
67.在一个实施例中,本发明采取利用同属于一个软件的文件集合属性相近的特点,选择特征,量化特征,应用机器学习密度聚类模型。选择的特征有每个文件的文件属主,文件属组,状态时间,绝对路径的后三级文件名,如文件/etc/mysql/conf.d/mysql.cnf,则取特征mysql/conf.d/mysql.cnf。
68.量化方法如下:
69.文件属主:onehot编码。
70.文件属组:onehot编码。
71.状态时间:毫秒级时间戳。
72.绝对路径的后三级文件名:哈希映射,取文件名的ascii码和,如mysql/conf.d/mysql.cnf的量化结果为566+568+923=2057。
73.最后,将特征向量输入密度聚类模型dbscan,调参,抛弃离群点,获得软件簇。
74.步骤3:最长公共前缀发现。
75.一个软件的文件集合在命名时总是会带有软件名信息,表现为开辟一个目录空间存放相关文件,目录名为软件名,或者将软件名嵌入到文件名中,一般以软件名为开头。因此提取软件文件的命名空间(目录名、文件名)构建前缀树,进一步获得最长公共前缀列表,该列表极大概率含有软件名信息。
76.在一个实施例中,本发明以簇为单位,在该文件簇的命名空间上构建前缀树,然后
获取最长公共前缀,具体步骤如下:
77.以簇为单位,获取该文件簇里的文件的绝对路径。
78.如现有一文件簇内容如下:
79.a)/etc/mysql
80.b)/etc/mysql/debian-start
81.c)/etc/mysql/mysql.cnf
82.首先按系统文件分隔符切割文件路径,由每个文件的绝对路径得到命名列表:
83.a)[etc,mysql]
[0084]
b)[etc,mysql,debian-start]
[0085]
c)[etc,mysql,mysql.cnf]
[0086]
进一步地,过滤系统常见命名,如
‘
etc’,'usr','bin','proc','sys'等:
[0087]
a)[mysql]
[0088]
b)[mysql,debian-start]
[0089]
c)[mysql,mysql.cnf]
[0090]
进一步地,以(;,-)为分隔符进一步切分字符串,得到tokenlist:
[0091]
a)[mysql]
[0092]
b)[mysql,debian,start]
[0093]
c)[mysql,mysql.cnf]
[0094]
进一步地,依次将字符串插入前缀树,前缀树是一颗有根树,根节点为空,在本方法中的前缀树每个节点包含以下字段:
[0095]
typedef struct trienode
[0096]
{
[0097]
char character;
[0098]
int freqnode;//记录频次
[0099]
node*children[size];//孩子节点
[0100]
}node
[0101]
·
当前节点字符character
[0102]
·
当前节点出现频次freqnode
[0103]
·
指向子节点的指针数组children
[0104]
字符串插入前缀树的步骤为从前缀树的根开始,从左到右遍历字符串,如当前节点的子节点为当前字符,则沿指针移动到下一节点,处理下一个字符;如当前节点的子节点不是当前字符,则在当前节点创建当前字符的子节点,并沿着指针移动到该子节点,处理下一个字符,重复上述步骤。
[0105]
如图2所示,插入第一个字符串“mysql”后,得到(a),“m”“y”“s”“q”“l”五个节点,频次均为1;插入[mysql,debian,start]得到(b),“m”“y”“s”“q”“l”节点频次增1;插入[mysql,mysql.cnf]得到最终前缀树,即(c)。
[0106]
进一步地,遍历前缀树的每一支路,若某一节点的子节点的频次小于当前节点的频次,则从根节点到当前节点连接成的字符串为这颗树的最长公共前缀之一,频次为当前节点的频次。图2构建的前缀树最终获得最长公共前缀“mysql”。
[0107]
步骤4:取每簇的top k前缀与软件名库模块匹配。
[0108]
软件的命名空间的最长公共前缀列表内包含软件名信息,但是由于获得的是字符串的最长公共前缀,其格式不规范,软件名可能恰好完整的作为前缀被发现,也可能不完整,或者嵌于前缀中间或结尾。因此精确匹配软件名的效果差,设计模糊匹配方法,设置匹配度阈值以优化匹配效果。
[0109]
经过步骤3的工作,存在公共前缀的文件簇分别产出最长公共前缀列表,每个列表的top k项前缀包含该文件簇所归属的软件名。理想情况下,软件名完整地作为最长公共前缀被发现,实际上,嵌入的软件名信息并不规则,表1是在实验中得到的频次较高的部分前缀:
[0110][0111]
表1部分公共前缀及其软件标签示例
[0112]
由于字符串的最长公共前缀格式不规范,理想情况下,软件名完整地作为最长公共前缀被发现,实际上软件名也可能不完整,或者嵌于前缀中间或结尾。表1可以看到公共前缀中可能包含完整软件名如mysql,带版本信息的软件名如kafka_2.11-1.0.0,或者部分软件名如rabbitmq_。其次软件名嵌入的位置也不规则,一般情况下,软件名会嵌入在公共前缀开头,但也不排除嵌入在公共前缀的其他位置如libthrift。因此如果采取精确匹配会遗漏部分软件,本方法将前缀树输出的前缀列表与软件名库中的软件名进行模糊匹配,匹配度计算方式为:
[0113][0114]
其中score是匹配度,tag是本方法经过以上步骤得到的最长公共前缀,app是维护的软件名库中的软件名。lcs
tag,app
是字符串tag和字符串app的最长公共子串。len()计算字符串长度。两字符串的最长公共子串是指两个字符串中的最长的公共连续子串,如字符串”acdddf”和字符串“addfy”的最长公共子串为“ddf”。设置合适的匹配阈值,计算公共前缀与软件名库中的软件名的匹配度,若匹配度超过阈值,则命中,至此成功发现目标主机上的软件。
[0115]
实验数据。
[0116]
数据集是在基于ubuntu18.04操作系统的docker镜像上,安装多个领域的20个软件,安装方式包括官方软件库和人工安装,为了避免自动安装的依赖软件的影响评估效果,事先安装一边后卸载再次安装,并获取状态时间在首次次安装结束后的所有文件目录信息。本发明在设置dbscan的领域半径eps为2200,成为核心对象的在领域半径内的最少点数minpts为2时,得到20个前缀列表,取每个列表的top1前缀进行模糊匹配,匹配度阈值设置为0.8时,recall@20=0.9,说明本发明能有效发现主机上的软件。
[0117]
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术
人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
技术特征:
1.一种基于启发式规则的主机软件发现方法,其特征在于,所述方法包括:获取目标主机中所有文件目录节点的属性;其中,所述属性包括:文件属主、文件属组、状态时间和绝对路径;基于该属性对所述文件目录节点聚类,得到若干个软件簇;针对每一个软件簇,基于所有文件的绝对路径构建前缀树,并基于前缀树,获取该软件簇中频次最高的k个最长公共前缀;将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果。2.如权利要求1所述的方法,其特征在于,所述基于该属性对所述文件目录节点聚类,得到若干个软件簇,包括:获取该属性的属性特征;对所述属性特征向量化;对所述特征向量应用密度聚类算法,得到软件簇。3.如权利要求2所述的方法,其特征在于,所述获取该属性的属性特征,包括:对文件属主的特征进行onehot编码,以得到文件属主对应的特征向量;和,对文件属组的特征进行onehot编码,以得到文件属组对应的特征向量;和,基于状态时间对应的毫秒级时间戳,得到状态时间对应的特征向量;和,获取绝对路径中后n级的文件名;使用哈希映射对后n级的文件名中的每一文件名进行哈希映射,得到该文件名对应的ascii码;将所有ascii码累加,得到绝对路径对应的特征向量。4.如权利要求1所述的方法,其特征在于,所述针对每一个软件簇,基于所有文件的绝对路径构建前缀树,包括:按系统文件分隔符切割文件路径,得到每个文件的绝对路径命名列表;根据系统常见命名进行绝对路径命名列表中绝对路径命名的过滤,得到过滤后的绝对路径命名列表;基于分隔符进行过滤后的绝对路径命名列表中绝对路径命名的字符串切分,得到预处理后的绝对路径命名列表;从前缀树的根节点开始,将预处理后的绝对路径命名列表中绝对路径命名的字符串,按字符插入前缀树中的节点,以使根节点到任一节点的路径上所经过的字符连接起来就是该节点代表的字符串;其中,所述根节点中的数据为空。5.如权利要求1所述的方法,其特征在于,所述将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果,包括:基于字符串长度,计算最长公共前缀与软件名之间的匹配度score;根据所述匹配度score,判定该软件簇对应的软件名;依据所有软件簇对应的软件名,得到目标主机的软件发现结果。
6.如权利要求1所述的方法,其特征在于,所述匹配度其中,tag表示最长公共前缀,app表示软件名单中的软件名,len(
·
)表示计算字符串长度,lcs
tag,app
表示字符串tag和字符串app的最长公共子串。7.一种基于启发式规则的主机软件发现装置,其特征在于,所述装置包括:获取模块,用于获取目标主机中所有文件目录节点的属性;其中,所述属性包括:文件属主、文件属组、状态时间和绝对路径;聚类模块,用于基于该属性对所述文件目录节点聚类,得到若干个软件簇;计算模块,用于针对每一个软件簇,基于所有文件的绝对路径构建前缀树,并基于前缀树,获取该软件簇中频次最高的k个最长公共前缀;匹配模块,用于将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果。8.一种电子设备,其特征在于,包括:处理器,以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现所述权利要求1-6任一所述方法。9.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现所述权利要求1-6任一所述方法。
技术总结
本发明公开一种基于启发式规则的主机软件发现方法及装置。所述方法包括:获取目标主机中所有文件目录节点的属性;基于该属性对所述文件目录节点聚类,得到若干个软件簇;针对每一个软件簇,基于所有文件的绝对路径构建前缀树,并基于前缀树,获取该软件簇中频次最高的k个最长公共前缀;将每一个软件簇的k个最长公共前缀与软件名单中的软件名进行模糊匹配,以得到目标主机的软件发现结果。本发明可以在保持很小的性能损失的同时提升模型的推理速度。能够自动化发现目标主机内通过各种途径安装的软件,且不需要事先训练模型。且不需要事先训练模型。且不需要事先训练模型。
技术研发人员:喻灵婧 李丽青 王勇 杨嵘 刘庆云
受保护的技术使用者:中国科学院信息工程研究所
技术研发日:2023.04.14
技术公布日:2023/8/5
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/