一种基于软件包命名矩阵的软件漏洞识别方法与系统与流程

文档序号:29317070发布日期:2022-03-19 22:00阅读:156来源:国知局
一种基于软件包命名矩阵的软件漏洞识别方法与系统与流程

1.本发明涉及设备和网络运行安全技术领域,尤其涉及一种基于软件包命名矩阵的软件漏洞识别方法和系统、信息存储介质。


背景技术:

2.如何依据已知漏洞库、漏洞公开信息进行目标软件的安全性检测是业内一直以来努力的一个方面。google为了提升搜索引擎返回的答案质量和用户查询的效率,于2012年提出了知识图谱的概念。知识图谱是以数据集为基础,通过分析处理形成数据间的关系网络并通过可视化进行展示,其本质上是一种结构化的、具有丰富的语义关系的网络。近几年来,随着人工智能的快速发展,知识图谱也获得了长足的发展,并且产生了许多优秀的成果。目前,minzhe guo 等提出了一种基于本体的方法来对cve安全漏洞库进行本体建模(guo m,wangj a.an ontology-based approach to model common vulnerabilitiesand exposures ininformation security[c]//asee southest sectionconference.2009.),借助本体中的概念,公理和基本属性,来发现个体之间、个体与概念之间以及概念之间的复杂关系,该方案目前主要是用于漏洞信息的展示,而且存在可视化效果不足以及查询便利性不足的问题。陶耀东等人提出对工业互联网安全漏洞知识库进行了深入的研究(陶耀东,贾新桐,吴云坤.一种基于知识图谱的工业互联网安全漏洞研究方法[j].信息技术与网络安全,2020,39(01):6-13+18.),其挖掘出了漏洞-产品、事件-漏洞和事件-产品的关联关系,并进行了分析,取得了一定的成果,但该方案主要缺点在于其仅仅针对工业互联网漏洞,不具备通用性。


技术实现要素:

[0003]
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的技术方案。因此,本发明的一个方面,提供了一种基于软件包命名矩阵的软件漏洞识别方法,该方法包括:提取漏洞数据的cpe信息;将待检测软件的原始包名与所述cpe信息中的包名进行匹配;如果原始包名匹配成功,则将待测软件的版本号与所述cpe信息中的版本号进行匹配;如果原始包名匹配失败,则基于所述原始包名查询软件包命名矩阵,以获取所述原始包名的别名,并将获取的别名与所述cpe信息中的包名进行匹配;如果别名匹配成功,则将待测软件的版本号与所述cpe信息中的版本号进行匹配;如果版本号匹配成功,则过滤出该漏洞数据,作为第一优先漏洞数据;如果版本号匹配失败,则过滤出该漏洞数据,作为第二优先漏洞数据;如果别名匹配失败,则判断该漏洞数据不影响待测软件。
[0004]
可选的,该方法还包括:判断所述cpe信息是否包含漏洞数据运行环境信息;如果不包含运行环境信息,则不需要进行运行环境信息的匹配;如果包含运行环境信息,则还需要进行运行环境信息的匹配;如果运行环境信息不匹配,则确定该漏洞数据不影响待测软件。
[0005]
可选的,该方法还包括:所述运行环境信息为包含running with或者runningon
的字段。
[0006]
可选的,则将待测软件的版本号与所述cpe信息中的版本号进行匹配,包括:输入待测软件的版本号与所述cpe信息中的版本号;判断版本号数据是否存在“.”以外的字符,如果存在,则将其他字符替换为“.”;利用“.”分割版本号;从最前面位起按照位比较版本号。
[0007]
可选的,从最前面位起按照位比较版本号,包括:判断是否存在字母,如果存在,将当前位的数字与字母分割,并将字母转换为整数类型,再比较大小,数字则直接比较大小,将数值较大的确定为较新版本。
[0008]
如果待测软件的版本为较新版本,则判断为模糊漏洞;如果漏洞数据的版本为较新版本,则判断为存在漏洞。
[0009]
本发明还提供一种基于软件包命名矩阵的软件漏洞识别系统,该系统包括: cpe信息提取模块,用于提取漏洞数据的cpe信息;包名匹配模块,用于将待检测软件的原始包名与所述cpe信息中的包名进行匹配;版本号匹配模块,如果原始包名匹配成功,则将待测软件的版本号与所述cpe信息中的版本号进行匹配;软件包命名矩阵查询模块,如果原始包名匹配失败,则基于所述原始包名查询软件包命名矩阵,以获取所述原始包名的别名;所述包名匹配模块还用于将所述别名与所述cpe信息中的包名进行匹配;如果别名匹配成功,则版本号匹配模块,将待测软件的版本号与所述cpe信息中的版本号进行匹配;漏洞数据过滤模块,如果版本号匹配成功,则过滤出该漏洞数据,作为第一优先漏洞数据;如果版本号匹配失败,则过滤出该漏洞数据,作为第二优先漏洞数据;如果别名匹配失败,则判断该漏洞数据不影响待测软件。
[0010]
可选的,该系统还包括:运行环境判断模块,用于判断所述cpe信息是否包含漏洞数据运行环境信息;如果不包含运行环境信息,则不需要进行运行环境信息的匹配;环境信息匹配模块,如果包含运行环境信息,用于进行运行环境信息的匹配,如果运行环境信息不匹配,则确定该漏洞数据不影响待测软件。
[0011]
可选的,所述版本号匹配模块包括:版本号获取子模块,用于输入待测软件的版本号与所述cpe信息中的版本号;信息处理子模块,用于判断版本号数据是否存在“.”以外的字符,如果存在,则将其他字符替换为“.”;利用“.”分割版本号;比较子模块,用于从最前面位起按照位比较版本号。
[0012]
可选的,所述比较子模块执行下述步骤:判断是否版本信息中是否存在字母;如果存在,将当前位的数字与字母分割,并将字母转换为整数类型,再比较大小,数字则直接比较大小,将数值较大的确定为较新版本;
[0013]
本发明还提供一种信息存储介质,该信息存储介质存储有计算机程序,所述计算机程序用于执行前面所述的基于软件包命名矩阵的软件漏洞识别方法。
[0014]
本技术提供的技术方案,至少具有如下技术效果或优点:本发明提供一种解决方案,使得能够根据目标软件包及版本号列表,对多个来源的漏洞数据进行过滤,以过滤出与目标软件相关的漏洞,其中包含通过软件包名矩阵来进行包名的匹配,从而提高过滤器的覆盖率,该技术方案为目标软件的最终安全漏洞分析结果提供了全面的数据基础。
[0015]
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述技术方案和其目的、特征和优
点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
[0016]
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0017]
图1示出了本发明提出的一种基于软件包命名矩阵的软件漏洞识别方法的流程图;
[0018]
图2示出了基于软件包命名矩阵的软件漏洞识别方法中对运行环境信息进行匹配的流程图;
[0019]
图3示出了进行版本信息匹配的具体过程;
[0020]
图4示出了本发明提供的基于置信度标识的软件漏洞识别方法的流程图;
[0021]
图5示出了本发明提出的软件漏洞识别方法中所设置的置信度的层级。
具体实施方式
[0022]
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
[0023]
本领域安全专家一般会通过漏洞库平台了解最新发现的漏洞信息,目前国内外常用的漏洞平台有:美国国家信息安全漏洞库nvd、全球信息安全漏洞指纹库与文件检测服务cvescan、cve平台、securityfocus平台、cnvd 平台、cnnvd平台,还有绿盟科技的nsfocus平台,这些平台会按期公布发现的软件漏洞。前面已经详细说明,在此不再赘述。另外,各软件厂商、网络公司也会公布发现的软件漏洞;商业软件在软件版本升级时一般会公布软件升级所修复的之前版本出现存在的漏洞。通过上述说明可发现,漏洞公开信息来源广泛。利用已知的漏洞进行预定软件的安全性检测工作时,首先需要在多源的漏洞数据中过滤出与预定软件相关的漏洞数据,再根据这些相关的漏洞数据解析、判断预定软件存在什么漏洞。
[0024]
cve为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出的一个公共的名称。使用一个共同的名称可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据。具体地,cve官网中具有漏洞的详细信息,其中包括漏洞的cpe信息,一个cve漏洞可能包括多个cpe信息,而一个cpe信息也可能存在于多个cve漏洞之中,因此cpe信息和cve漏洞存在对应关系,能够通过cpe信息匹配其对应的cve漏洞,而cpe信息中存在有对应开源组件的名称及版本信息,可使开源组件与cve漏洞之间相匹配。
[0025]
cpe的格式如下:
[0026]
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_s w:target_hw:other其中,part表示目标类型,part可以是a、h、o中的任意一种, a表示应用程序,h表示硬件平台,o表示操作系统;vendor表示厂商;product 表示产品名称;version表示版本号;update表示更新包;edition表示版本;language 表示语言项。下面给出了一示例cpe信息。其中,cpe开头是格式,2.3表示的采用2.3版本协议的cpe,o
表示os操作系统,redhat表示的某一个厂商, enterprise_linux表示该厂商的某一产品,6.0表示的是该产品的版本号。
[0027]
nvd官网提供的cve漏洞的详细描述中就包括有cpe信息(officialcommon platform enumeration(cpe)dictionary),如: cpe:2.3:a:fasterxml:jackson-databind:2.7.8:*:*:*:*:*:*:*;可通过匹配cpe信息和开源组件信息来获得开源组件的cve漏洞。cpe信息的标准格式大致为: cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:tar get_hw:other,其中,cpe开头是格式;2.3表示采用2.3版本协议的cpe(现在基本都是采用2.3版本协议);part表示目标类型,允许的值有a(应用程序)、h (硬件平台)、o(操作装置),本发明中所分析的是开源组件,属于应用程序,也即part为a;vendor表示厂商;product表示厂商的产品名称;version表示产品的版本号;update表示更新包;edition表示版本;language表示语言项。再例如,cpe:2.3:o:redhat:enterprise_linux:6.0:*:*:*:*:*:*:*,cpe开头是格式,2.3表示的采用2.3版本协议的cpe,o表示os操作装置,redhat表示厂商,enterprise_linux 表示这个厂商的这个产品,6.0表示这个产品的版本号。
[0028]
本发明的一个方面,提供了一种基于软件包命名矩阵的软件漏洞识别方法,如图1所示,该方法包括:
[0029]
a)提取漏洞数据的cpe信息;将待检测软件的原始包名与所述cpe信息中的包名进行匹配;
[0030]
b)如果原始包名匹配失败,则基于所述原始包名查询软件包命名矩阵,以获取所述原始包名的别名;
[0031]
c)将所述别名与所述cpe信息中的包名进行匹配;
[0032]
d)如果原始包名匹配成功或者别名匹配成功,则将待测软件的版本号与所述cpe信息中的版本号进行匹配;
[0033]
e)如果版本号匹配成功,则过滤出该漏洞数据,作为第一优先漏洞数据;
[0034]
f)如果版本号匹配失败,则过滤出该漏洞数据,作为第二优先漏洞数据;
[0035]
g)如果别名匹配失败,则判断该漏洞数据不影响待测软件。
[0036]
该方法能够根据目标软件包及版本号列表,对多个来源的漏洞数据进行过滤,以过滤出与目标软件相关的漏洞,其中包含通过软件包名矩阵来进行包名的匹配,从而提高过滤器的覆盖率,该技术方案为目标软件的最终安全漏洞分析结果提供了全面的数据基础。
[0037]
由于有的软件限制有运行环境,比如运行在windows操作系统、android 安卓系统、或者ios系统,那就只能运行在这些操作系统,比如说;表明运行在 windows操作系统的软件不大可能能够运行在android操作系统或者ios系统,那么运行在windows操作系统的软件,即使与运行在android操作系统或者ios 系统的软件包名称相同,也不大可能存在相同的漏洞。有的软件不限制运行环境,那么有可能在不同的操作系统上运行,或者不确定在哪个操作系统上运行。这种情况下,只要软件包名称以及版本信息能够匹配上,就有可能存在同样的漏洞。因此该方法还包括:判断所述cpe信息是否包含漏洞数据运行环境信息;如果不包含运行环境信息,则不需要进行运行环境信息的匹配;如果包含运行环境信息,则还需要进行运行环境信息的匹配;如果运行环境信息不匹配,则确定该漏洞数据不影响待测
软件。所述运行环境信息为包含running with或者 running on的字段。
[0038]
则将待测软件的版本号与所述cpe信息中的版本号进行匹配,包括:输入待测软件的版本号与所述cpe信息中的版本号;判断版本号数据是否存在“.”以外的字符,如果存在,则将其他字符替换为“.”;利用“.”分割版本号;从最前面位起按照位比较版本号。
[0039]
从最前面位起按照位比较版本号,包括:判断是否存在字母;如果存在,将当前位的数字与字母分割,并将字母转换为整数类型,再比较大小,数字则直接比较大小,将数值较大的确定为较新版本;如果待测软件的版本为较新版本,则判断为模糊漏洞;如果漏洞数据的版本为较新版本,则判断为存在漏洞。
[0040]
本发明还提供一种基于软件包命名矩阵的软件漏洞识别系统,该系统包括: cpe信息提取模块,用于提取漏洞数据的cpe信息;包名匹配模块,用于将待检测软件的包名与所述cpe信息中的原始包名进行匹配;版本号匹配模块,如果原始包名匹配成功,则将待测软件的版本号与所述cpe信息中的版本号进行匹配;软件包命名矩阵查询模块,如果原始包名匹配失败,则基于所述原始包名查询软件包命名矩阵,以获取所述原始包名的别名;所述包名匹配模块还用于将待检测软件的包名与所述cpe信息中的别名进行匹配;如果别名匹配成功,则版本号匹配模块,将待测软件的版本号与所述cpe信息中的版本号进行匹配;漏洞数据过滤模块,如果版本号匹配成功,则过滤出该漏洞数据,作为第一优先漏洞数据;如果版本号匹配失败,则过滤出该漏洞数据,作为第二优先漏洞数据;如果别名匹配失败,则判断该漏洞数据不影响待测软件。
[0041]
该系统还包括:运行环境判断模块,用于判断所述cpe信息是否包含漏洞数据运行环境信息;如果不包含运行环境信息,则不需要进行运行环境信息的匹配;环境信息匹配模块,如果包含运行环境信息,用于进行运行环境信息的匹配,如果运行环境信息不匹配,则确定该漏洞数据不影响待测软件。
[0042]
所述版本号匹配模块包括:版本号获取子模块,用于输入待测软件的版本号与所述cpe信息中的版本号;信息处理子模块,用于判断版本号数据是否存在“.”以外的字符,如果存在,则将其他字符替换为“.”;利用“.”分割版本号;比较子模块,用于从最前面位起按照位比较版本号。
[0043]
所述比较子模块执行下述步骤:判断是否版本信息中是否存在字母;如果存在,将当前位的数字与字母分割,并将字母转换为整数类型,再比较大小,数字则直接比较大小,将数值较大的确定为较新版本。
[0044]
本发明还提供一种信息存储介质,该信息存储介质存储有计算机程序,所述计算机程序用于执行前面所述的基于软件包命名矩阵的软件漏洞识别方法。
[0045]
通过上面说明,本发明提供一种解决方案,使得能够根据目标软件包及版本号列表,对多个来源的漏洞数据进行过滤,以过滤出与目标软件相关的漏洞,其中包含通过软件包名矩阵来进行包名的匹配,从而提高过滤器的覆盖率,该技术方案为目标软件的最终安全漏洞分析结果提供了全面的数据基础。
[0046]
上述第二优先漏洞数据可作为模糊匹配的漏洞数据进行推送。对于包名或者别名、版本号均能匹配的漏洞数据,认为是与待检测软件非常相关的漏洞数据。
[0047]
虽然过滤出与待检测软件非常相关的漏洞数据,如果直接依据这些漏洞数据进行漏洞检测的分析,经常会出现识别错误或者漏洞检测遗漏的情况。而且由于漏洞数据的多
来源性,对软件漏洞检测结果的准确性有待于进一步提供,同时又能够兼顾全面性。
[0048]
本发明的另一个方面,提供了一种对上述过滤出的漏洞数据进行置信度标识的方法,如图4所示,该方法包括:从多种预定链路收集已知软件漏洞信息,所述已知软件漏洞信息包括cpe信息、漏洞描述信息、开源软件发行信息;提取待测软件的包名、版本信息;将所述包名、版本信息分别与cpe信息进行匹配;如果与cpe信息匹配成功,则标识所述cpe信息对应的漏洞数据来源为第一置信度,并确定待测软件存在所述cpe信息对应的漏洞;如果与cpe信息匹配不成功,则将包名、版本信息分别与漏洞描述数据进行匹配;如果与漏洞描述数据进行匹配成功,则标识与漏洞描述数据对应的漏洞数据来源为第二置信度,并确定待测软件存在所述漏洞描述数据对应的漏洞;如果与漏洞描述数据匹配不成功,则将包名、版本信息分别与开源软件发行信息进行匹配;如果包名与开源软件发行信息进行匹配成功,且版本号小于修复版本号,则标识与开源软件发行信息对应的漏洞数据来源为第三置信度,并判断待测软件有存在开源软件发行信息对应的漏洞的第一可能性;如果所述包名与cpe信息、漏洞描述数据匹配成功,但版本号匹配不成功,则标识与cpe信息、漏洞描述数据对应的漏洞数据来源为第四置信度,并判断待测软件存在与cpe信息、漏洞描述数据对应的漏洞的第二可能性。
[0049]
该方法通过漏洞信息来源、包名匹配方式,对过滤出的漏洞数据添加置信字段,从而判断该条漏洞数据是准确匹配还是模糊匹配。所述第一置信度、第置信度可属于精确匹配,而第三置信度、第四置信度可属于模糊匹配。
[0050]
然而,在进行漏洞数据的信息收集时,需要实时提取很多不同的操作系统中的软件包信息,包括软件包的名称,但是不同的操作系统中对软件包的命名方式不同,从而导致名称不同。在漏洞识别时,如果仅仅根据已知漏洞的软件包名称进行收集、识别,很容易就将名称不同但实质上相同的软件遗漏,从对漏洞的识别产生影响。
[0051]
本技术通过抽取所有操作系统的软件包的spec文件的上游源的信息,如果上游源相同,说明这两个软件包实质上是同一个软件包。基于所述上游源的信息确定基于相同上游源的软件包,这些软件包的包名称之间建立映射关系,互为别名,基于这些包名称构建软件包命名矩阵。举例来说,openeuler操作系统的软件包的名称是“python-memcached”,而opensuse操作系统的软件包的名称却是“memcached”,两个软件包名称不同,但是由相同的上游源文件编译的,但其实是同一个软件包。
[0052]
本发明的一个方面,提供了一种基于软件包命名矩阵的漏洞识别方法,如图4所示,该方法包括:
[0053]
s1.获取各操作系统的已知漏洞软件的开源文件信息;
[0054]
s2.根据所述开源文件信息解析出漏洞受影响的上游开源组件信息;
[0055]
s3.对各已知漏洞软件的上述上游开源组件信息进行匹配,如果匹配成功,则建立所述上游组件名称、漏洞软件包名称的映射关系;
[0056]
s4.基于所述映射关系形成软件包命名矩阵;
[0057]
s5.基于所述软件包命名矩阵进行待测软件的安全性识别,以识别软件是否存在漏洞。
[0058]
作为另一种实施过程,本发明提出的基于软件包命名矩阵的漏洞识别方法,如图5所示,该方法可包括:
[0059]
s1’.根据已知漏洞软件的cpe信息,获取到该漏洞对应软件包中的上游开源组件名称;
[0060]
s2’.实时根据上游开源组件名称获取基于该上游开源组件开发的其他软件包名称,并建立所述上游组件名称、所述对应软件包名称、其他软件包名称之间的映射关系;
[0061]
s3’.基于所述映射关系形成软件包命名矩阵;
[0062]
s4’.基于所述软件包命名矩阵进行对待检测的软件进行软件名称的匹配,以进行漏洞识别。
[0063]
上述方法主要用于lunix开源工程,通过解析软件包中的spec文件、control 文件等配置文件,这些配置文件记录了软件是由上游的哪些开源组件编译来的,基于同样的上游开源组件编译的软件,被认为实质上是同一软件,可能存在同样的漏洞。
[0064]
本技术不仅利用待测软件的包名进行匹配,还通过待测软件的别名、构建的已知漏洞软件的别名进行匹配,以全面检测待测软件可能存在的漏洞,从而保证漏洞检测的全面性。
[0065]
如果包名与所述cpe信息匹配不成功,则将包名通过软件包命名矩阵进行检索,获取到与该包名对应的别名;将所述别名与cpe信息进行匹配,如果匹配成功,将所述版本信息与所述cpe信息进行匹配,如果版本信息匹配成功,则将所述cpe信息对应的数据源标识为第五置信度,并确定待测软件存在所述 cpe信息对应的漏洞,所述第五置信度低于第一置信度。第五置信度略低于第一置信度,可属于精确匹配范畴。
[0066]
如果包名与漏洞描述数据匹配不成功,则将包名通过软件包命名矩阵进行检索,获取到与该包名对应的别名;将所述别名与漏洞描述数据进行匹配,如果匹配成功,将所述版本信息与所述漏洞描述数据进行匹配,如果版本信息匹配成功,则将所述漏洞描述数据对应的数据源标识为第六置信度,并确定待测软件存在所述漏洞描述数据对应的漏洞,所述第六置信度低于第二置信度。第六置信度略低于第二置信度,可属于精确匹配范畴。
[0067]
如果包名与开源软件发行信息匹配不成功,则将包名通过软件包命名矩阵进行检索,获取到与该包名对应的别名;将所述别名与开源软件发行信息进行匹配,如果匹配成功,将所述版本信息与开源软件发行信息进行匹配,如果版本信息匹配成功,则将开源软件发行信息对应的数据源标识为第七置信度,并判断待测软件存在与开源软件发行信息对应的漏洞的第三可能性,所述第七置信度低于第三置信度,所述第三可能性小于第二可能性。
[0068]
作为一种具体实施方式,如图5所示,将所述包名、版本信息分别与cpe 信息、漏洞描述数据、开源软件发行信息进行匹配,包括:先将包名与cpe信息、漏洞描述数据、开源软件发行信息进行匹配,匹配成功后,再将版本信息与cpe信息、漏洞描述数据、开源软件发行信息进行匹配。
[0069]
本发明通过包名匹配到的数据,为不同的漏洞数据源设置置信度,从而判断漏洞检测结果的准确度以及达到漏洞检测的全面性,同时为后续漏洞修复的策略提供依据。
[0070]
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0071]
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施
例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0072]
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1