JS脚本文件漏洞检测方法及系统与流程

文档序号:22834189发布日期:2020-11-06 16:25阅读:550来源:国知局
JS脚本文件漏洞检测方法及系统与流程

本发明涉及一种漏洞检测技术,尤其是指一种js脚本文件漏洞检测方法及系统。



背景技术:

如今开发人员广泛使用开源组件,据估计,每个应用程序的80%-90%都由开源组件组成。有研究显示,软件应用程序中使用的第三方组件中有一半已经过时,可能不安全。而且使用开源组件的所有应用程序中,超过60%包含已知的软件漏洞。那么分析每个开源组件的cve,将会给项目的组成分析(sca)提供有效的信息支持。而目前市场上还没有相关成熟的技术和产品。因此为解决这一问题,一般都会采用人工的方式寻找一个个漏洞,再根据漏洞的描述去相关的产品官网来找寻相关的信息,然后确定该js开源组件的漏洞。然而,应用人工的方式审查漏洞,工作量大,效率低下。



技术实现要素:

本发明所要解决的技术问题是:提供一种js脚本文件漏洞检测方法及系统,以此快速、高效的检测js脚本文件的漏洞。

为了解决上述技术问题,本发明采用的技术方案为:一种js脚本文件漏洞检测方法,包括如下步骤:

应用jsrepository.json文件建立第一漏洞库,其中,所述第一漏洞库包括sha1编码哈希值及统一资源标识符信息;

扫描并解析js脚本文件,获取漏洞匹配信息;

根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库;

计算所述js脚本文件的sha1编码哈希值;

应用所述js脚本文件的sha1编码哈希值与所述第二漏洞库进行匹配,生成第三漏洞库;

其中,所述根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库的步骤中,还包括:

获取所述js脚本文件的路径;

调用所述js脚本文件的路径与所述统一资源标识符信息进行匹配;

确认所述js脚本文件的路径与所述统一资源标识符信息匹配成功;

将所述sha1编码哈希值添加至所述第二漏洞库,生成更新后的第二漏洞库;

其中,所述sha1编码哈希值是所述js脚本文件通过哈希算法算出的。

进一步地,所述第一漏洞库包括文件名信息,当所述js脚本文件的路径与所述统一资源标识符信息匹配失败后,所述方法还包括如下步骤:

获取所述js脚本文件名;

调用所述js脚本文件名与所述文件名信息进行匹配;

确认所述js脚本文件名与所述文件名信息匹配成功。

具体的,所述第一漏洞库包括hashes信息,所述js脚本文件名与所述文件名信息匹配失败后,还包括如下步骤:

获取js脚本文件的sha1编码哈希值;

调用所述js脚本文件的sha1编码哈希值与所述hashes信息进行匹配;

确认所述js脚本文件的sha1编码哈希值与所述hashes信息相匹配。

进一步地,第一漏洞库包括漏洞库内容信息,所述js脚本文件名与所述文件名信息匹配失败后,还包括如下步骤:

获取所述js脚本文件的内容;

调用所述js脚本文件的内容与所述漏洞库内容信息进行匹配;

确认所述js脚本文件的内容与所述漏洞库内容信息相匹配;

其中,所述js脚本文件的内容为所述js脚本文件的内容的前50个字段。

进一步地,所述应用所述根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库的步骤之后,包括如下步骤:

获取js脚本文件版本信息;

获取cve信息,以搜集cpe信息;

针对所述js脚本文件版本信息与cpe信息进行匹配,生成匹配数据;

添加所述匹配数据至所述第二漏洞库,生成第四漏洞库。

进一步地,所述添加所述匹配数据至所述第二漏洞库,生成第四漏洞库的步骤之后,还包括如下步骤:

从所述js脚本文件版本信息中,提取js脚本文件名;

确认所述js脚本文件名与所述cpe信息在所述第四漏洞库内一一对应。

进一步地,所述js脚本文件版本信息包括js脚本文件名及第一版本信息,所述cpe信息包括项目名及第二版本信息,所述针对所述js脚本文件版本信息与cpe信息进行匹配,生成第一匹配数据的步骤中,具体包括如下步骤:

确认所述js脚本文件名与所述项目名匹配成功;

确认所述第一版本信息与所述第二版本信息匹配成功;

生成所述第一匹配数据;

其中,所述第一匹配数据包括组件名、sha1编码哈希值、cve编号、cpe编号、第一版本信息、第二版本信息中的至少一项。

本申请第二方面提供一种js脚本文件漏洞检测系统,包括如下模块:

获取模块,用于应用jsrepository.json文件建立第一漏洞库;

解析模块,用于扫描并解析js脚本文件,获取漏洞匹配信息;

检测生成模块,用于根据漏洞匹配信息,从所述第一漏洞库中抽取漏洞匹配信息,生成第二漏洞库;还用于获取所述js脚本文件的路径;调用所述js脚本文件的路径与所述统一资源标识符信息进行匹配;确认所述js脚本文件的路径与所述统一资源标识符信息匹配成功;将所述sha1编码哈希值添加至所述第二漏洞库,生成更新后的第二漏洞库;还用于计算所述js脚本文件的sha1编码哈希值;应用所述js脚本文件的sha1编码哈希值与所述第二漏洞库进行匹配,生成第三漏洞库。

本发明的有益效果在于:应用jsrepository.json文件建立第一漏洞库,其包括常用的js脚本文件的漏洞信息及漏洞匹配信息。扫描并解析js脚本文件,可以获得针对js脚本文件的漏洞匹配信息,根据该漏洞匹配信息来对第一漏洞库内的漏洞信息进行匹配,并以此生成第二漏洞库。由此,可以较为准确地直接获取js脚本文件的漏洞信息,保障漏洞审核的效率及效果。由于js脚本文件的路径所含信息较多,应用路径来确定js脚本文件的具体身份较为准确,且速度较快。

附图说明

下面结合附图详述本发明的具体结构

图1为本发明第一实施例中js脚本文件漏洞检测方法的步骤流程图;

图2为本发明第二实施例中获取漏洞匹配信息的步骤流程示意图;

图3为本发明第二实施例中应用js脚本文件名与文件名信息匹配的步骤流程示意图;

图4为本发明第三实施例中应用js脚本文件的sha1编码哈希值与hashes信息相匹配匹配的步骤流程示意图;

图5为本发明第四实施例中应用js脚本文件的内容与漏洞库内容信息相匹配匹配的步骤流程示意图;

图6为本发明第五实施例中生成第三漏洞库的流程图;

图7为本发明第六实施例中生成第四漏洞库的流程图;

图8为本发明第四实施例中的组件版本库的示意图;

图9为本发明第四实施例中的cve信息的示意图;

图10为本发明第四实施例中的cpe信息的示意图;

图11为本发明第七实施例中的针对js脚本文件版本信息与cpe信息进行匹配,生成匹配数据的流程图;

图12为本发明第八实施例中的去除重复漏洞的流程图;

图13为本发明第八实施例中被审核的漏洞表格;

图14为本发明第一实施例中js脚本文件漏洞检测系统的结构图。

具体实施方式

为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。

请参阅图1,图1为本发明第一实施例中js脚本文件漏洞检测方法的步骤流程图。一种js脚本文件漏洞检测方法,包括如下步骤:

步骤s100、应用jsrepository.json文件建立第一漏洞库。

步骤s200、扫描并解析js脚本文件,获取漏洞匹配信息。

步骤s300、根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库。

应用了本发明提供的js脚本文件漏洞检测方法,可以实现的功能如下:应用jsrepository.json文件建立第一漏洞库,其包括常用的js脚本文件的漏洞信息及漏洞匹配信息。扫描并解析js脚本文件,可以获得针对js脚本文件的漏洞匹配信息,根据该漏洞匹配信息来对第一漏洞库内的漏洞信息进行匹配,并以此生成第二漏洞库。由此,可以较为准确地直接获取js脚本文件的漏洞信息,保障漏洞审核的效率及效果。

上述中的jsrepository.json文件可以从开源项目retirejs获得,其中的漏洞信息,用vulnerabilities表示,而漏洞匹配信息用extractors表示。

其中,漏洞匹配信息含有一些匹配的正则表达式,本实施例中称之为匹配规则,抽取并应用这些正则表达式来解析js脚本文件,以此建立第二漏洞库。

需要了解的是,本实施例中,js脚本文件也可以称为js组件,且主要是针对前端脚本文件,可以是一个或多个js后缀的文件组成的组件。而很多项目中,广泛应用上述组件,其可形式可以是在对应的js脚本文件中,应用import来引用。

其中,js的全称是javascript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。正则表达式是用来描述、匹配一系列符合某个句法规则的字符串,其可用于文本搜索和替换。正则表达式可以是一个简单的字符,或一个更复杂的模式。

具体的,请参阅图2,图2为本发明第二实施例中获取漏洞匹配信息的步骤流程示意图。

第一漏洞库包括sha1编码哈希值及统一资源标识符信息,步骤s300、根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库的步骤中,包括:

步骤s310、获取js脚本文件的路径。

其中,js脚本文件的路径可以是相对路径,也可以是绝对路径,针对不同的路径,可以采用相近的方式进行匹配。可以理解的是,不论是相对路径还是绝对路径,都应当是完整的。其中,js脚本文件的绝对路径可以方便用户上传下载文件,在一实施例中是d:\script\jquery.min.js;而js脚本文件的相对路径是以导入此js的宿主文件所在的位置为基准的。

步骤s320、调用js脚本文件的路径与统一资源标识符信息进行匹配。

本实施例中,统一资源标识符信息称为uri,是用于标识某一互联网资源名称的字符串。该种标识允许用户对任何的资源通过特定的协议进行交互操作。需要了解的是,uri包括url及urn。urn表示某一对象的身份,urn仅用于命名,而不指定地址。而url提供查找该对象的方法,主要表示路径。本实施例中,主要对url进行确定。

步骤s330、确认js脚本文件的路径与统一资源标识符信息匹配成功。

需要了解的是,由于js脚本文件的路径所含信息较多,应用路径来确定js脚本文件的具体身份较为准确,且速度较快。

在一具体实施例中,统一资源标识符信息用如下语句表示:

″uri″:[″/(§§version§§)/jquery(\\.min)?\\.js″]。

步骤s340、将sha1编码哈希值添加至第二漏洞库,生成更新后的第二漏洞库;

其中,sha1编码哈希值是由js脚本文件通过哈希算法算出的。应用哈希算法,可以将任意长度的二进制转化为固定长度的哈希值,应用哈希值,可以便捷快速地找出对应的文件。

可以理解的是,在实际应用中,有时会更改路径中的某一文件夹的名称,此时,js脚本文件的地址是发生改变的,如果继续使用路径来作为匹配信息,无法找到与之匹配的信息。

基于此,请参阅图3,图3为本发明第二实施例中应用js脚本文件名与文件名信息匹配的步骤流程示意图。第一漏洞库包括文件名信息,当步骤s330中,js脚本文件的路径与统一资源标识符信息匹配失败后,上述方法还包括如下步骤:

步骤s331、获取js脚本文件名。

具体的,获取js脚本文件名的方法可以采用的方法如下:

varfile=$("#file").val();

varfilename=getfilename(file);

functiongetfilename(o){

varpos=o.lastindexof("\");

returno.substring(pos+1);

}

步骤s332、调用js脚本文件名与文件名信息进行匹配。

本实施例中,文件名信息表示为filename。具体的,可以用如下形式表示:″filecontent″:[″∧\*!?retire-examplev(§§version§§)″]。

步骤s333、确认js脚本文件名与文件名信息匹配成功。

当js脚本文件名与文件名信息匹配成功后,即可发现对应的漏洞。

进一步地,第一漏洞库包括hashes信息,可以理解的是,在第一漏洞库中,不是每一个漏洞都具有hashes信息,因此将其作为辅助手段来检查漏洞。

请参阅图4,图4为本发明第三实施例中应用js脚本文件的sha1编码哈希值与hashes信息相匹配的步骤流程示意图;

在步骤s333中,js脚本文件名与文件名信息匹配失败后,上述方法还包括如下步骤:

步骤s334、获取js脚本文件的sha1编码哈希值。

本实施例中,sha1编码哈希值是通过哈希算法计算出来的,可以用来表示具体的js脚本文件。

步骤s335、调用js脚本文件的sha1编码哈希值与hashes信息进行匹配。

步骤s336、确认js脚本文件的sha1编码哈希值与hashes信息相匹配。

在一具体实施例中,hashes信息用下列的语句表示:

"hashes":{"cf266e3bc2da372c4f0d6b2bd87bcbaa24d5a643":"2.4.6"}。

进一步的,请参阅图5,图5为本发明第三实施例中应用js脚本文件的内容与漏洞库内容信息相匹配匹配的步骤流程示意图。第一漏洞库包括漏洞库内容信息,步骤s336中,js脚本文件名与文件名信息匹配失败后,上述方法还包括如下步骤:

步骤s337、获取js脚本文件的内容;

步骤s338、调用js脚本文件的内容与漏洞库内容信息进行匹配;

步骤s339、确认js脚本文件的内容与漏洞库内容信息相匹配;

其中,js脚本文件的内容为js脚本文件的内容的前50个字段。

可以理解的是,由于js脚本文件的路径、文件名是有可能被改变的,第一漏洞库中的hash信息并不全,因此需要对js脚本文件的内容信息进行分析,以此获得准确的匹配。而提取js脚本文件的内容的前50个字段,既可以降低计算量,保证检测速度,也可以保证漏洞检测的全面程度。

可选地,请参阅图6,图6为本发明第五实施例中生成第三漏洞库的流程图;

步骤s300、根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库的步骤之后,包括如下步骤:

步骤s410、计算js脚本文件的sha1编码哈希值。

为js脚本文件编码,以此保证每一个js脚本文件都具有对应的sha1编码哈希值。

步骤s420、应用js脚本文件的sha1编码哈希值与第二漏洞库进行匹配,生成第三漏洞库。

本实施例中,直接调用sha1编码哈希值来与第二漏洞库中的hashes信息进行匹配,由此,只需要对js进行一次解析,从而节省扫描所花费的时间,也避免了可能存在的部分数据分析不准确的情况。

可选地,请参阅图7,图7为本发明第六实施例中生成第四漏洞库的流程图。

步骤s300、根据漏洞匹配信息,在所述第一漏洞库中进行漏洞匹配,生成第二漏洞库的步骤之后,还包括如下步骤:

步骤s510、获取js脚本文件版本信息。

由于js脚本文件不同的版本可能具有不同的代码与框架,甚至可能只有文件名称是没有改变的,因此需要获取js脚本文件版本信息,才能更好地检测漏洞。

具体的,调用nodejs官网中的api接口,批量获得js开源组件的版本信息,以生成组件版本库。组件版本库如图8所示,图中的name表示js文件的名称,version表示js文件的版本,hash表示js文件的sha1,其他的字段是该js文件的其他版本信息。

步骤s520、获取cve信息,以搜集cpe信息。

cve的英文全称是“commonvulnerabilities&exposures”,即通用漏洞披露。cve为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据。cve信息可以包括多个cpe信息,其结构如图9所示。

需要理解的是,cpe的格式如下:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

其中,part表示目标类型,part可以是a、h、o中的任意一种;vendor表示厂商;product表示产品名称;version表示版本号;update表示更新包;edition表示版本;language表示语言项。

具体的,cpe信息如图9、图10所示。图9为cve信息的示意图;图10为cpe信息的示意图。其中,cpe开头是格式,2.3表示的采用2.3版本协议的cpe,o表示os操作系统。其中,o也可能是h或者a这两个信息,h表示硬件设备,a表示软件应用组件。

本实施例中,上述的js脚本文件属于应用,即属于a的范围。在后面的redhat表示的是某一厂商,enterprise_linux,表示该厂商的某一产品,6.0表示的是该产品的版本号。

步骤s530、针对js脚本文件版本信息与cpe信息进行匹配,生成匹配数据。

步骤s540、添加匹配数据至第二漏洞库,生成第四漏洞库。

记录了匹配数据之后,可以此对漏洞进行分析。

具体的,js脚本文件版本信息包括js脚本文件名及第一版本信息,cpe信息包括项目名及第二版本信息。在图8所示的组件版本库中,用name表示js脚本文件名,用version表示第一版本信息;在上述的cpe信息中,用product表示项目名,用version表示第二版本信息。

进一步地,请参阅图11,图11为本发明第七实施例中的针对js脚本文件版本信息与cpe信息进行匹配,生成匹配数据的流程图,如图11所示:

步骤s530、针对js脚本文件版本信息与cpe信息进行匹配,生成匹配数据中,具体包括如下步骤:

步骤s531、确认js脚本文件名与项目名匹配成功。

具体的,当组件版本库中的name与product相同时,本步骤中匹配成功。

步骤s532、确认第一版本信息与第二版本信息匹配成功。

具体的,当组件版本库中的version与cpe信息中的version相同时,本步骤匹配成功。

步骤s533、生成第一匹配数据。

经过上述的数据匹配,可以确定具体的漏洞,其准确性较优,且所坚持出的漏洞相对更全面。

其中,第一匹配数据包括组件名、sha1编码哈希值、cve编号、cpe编号、第一版本信息、第二版本信息中的至少一项。

其中,cve编号可以是cve-2011-4969,用来表示具体的cve。其余第一匹配数据都已在上文中提及,在此不做赘述。

进一步地,请参阅图12,图12为本发明第八实施例中的去除重复漏洞的流程图。上述的步骤s530、添加所述匹配数据至所述第二漏洞库,生成第四漏洞库的步骤之后,还包括如下步骤:

步骤s534、从js脚本文件版本信息中,提取js脚本文件名。

步骤s535、确认js脚本文件名与cpe信息在第四漏洞库内一一对应。

需要了解的是,cpe信息与cve信息并不是一一对应的关系,一个cve信息可以含有多个cpe信息,而一个cpe信息可以存在于多个cve信息之中。基于此,在步骤s540之后,第四漏洞库内的js脚本文件名与cve信息是相对应的。由于cpe信息才是本申请所要检测的具体漏洞,所以保证js脚本文件名与cpe信息一一对应是必要的。当审核图13中的表格,以此去除一些重复的漏洞。

上述中的第三漏洞库与第四漏洞库可以属于两个不同的漏洞库,二者可以分别用来对js脚本文件进行检查,也可以单纯应用一个来检查;二者具有不同的技术效果,其具体效果在此不做赘述。

需要理解的是,如图13所示,当发现cve中不存在的漏洞时,可以为其定义编号。

进一步地,上述的cve和组件中的一个或两个进行更新之后,可以选择性地将更新后的信息添加到上述的一个或多个漏洞库中,以此保证数据实时更新。在本实施例中,将更新后的数据补充到第一漏洞库中。

请参阅图14,图14为本发明第一实施例中js脚本文件漏洞检测系统的结构图,本申请第二方面还提供了一种js脚本文件漏洞检测系统,包括如下模块:

获取模块100,用于应用jsrepository.json文件建立第一漏洞库。

解析模块200,用于扫描并解析js脚本文件,获取漏洞匹配信息;

还用于获取js脚本文件的路径;

还用于获取js脚本文件名;

还用于获取js脚本文件的sha1编码哈希值;

还用于获取js脚本文件的sha1编码哈希值;

还用于获取js脚本文件的内容。

检测生成模块300,用于根据漏洞匹配信息,从第一漏洞库中抽取漏洞匹配信息,生成第二漏洞库;

上述检测生成模块300,还用于计算js脚本文件的sha1编码哈希值;

应用js脚本文件的sha1编码哈希值与第二漏洞库进行匹配,生成第三漏洞库;

上述检测生成模块300,还用于获取js脚本文件版本信息;

获取cve信息,以搜集cpe信息;

针对js脚本文件版本信息与cpe信息进行匹配,生成匹配数据;

添加匹配数据至第二漏洞库,生成第四漏洞库。

上述检测生成模块300,还用于确认js脚本文件名与项目名匹配成功;

确认第一版本信息与第二版本信息匹配成功;

生成第一匹配数据。

上述检测生成模块300,还用于调用js脚本文件的路径与统一资源标识符信息进行匹配;

确认js脚本文件的路径与统一资源标识符信息匹配成功;

将sha1编码哈希值添加至第二漏洞库,生成更新后的第二漏洞库。

上述检测生成模块300,还用于调用js脚本文件名与文件名信息进行匹配;

确认js脚本文件名与文件名信息匹配成功。

上述检测生成模块300,还用于调用js脚本文件的sha1编码哈希值与hashes信息进行匹配;

确认js脚本文件的sha1编码哈希值与hashes信息相匹配。

上述检测生成模块300,还用于调用js脚本文件的内容与漏洞库内容信息进行匹配;确认js脚本文件的内容与漏洞库内容信息相匹配。

上述的模块用于承载上述方法,任意模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来。可以理解的是,本方法及系统应用于一种计算机可读存储介质,该计算机可读存储介质可以是存储器。该计算机可读存储介质上存储有计算机程序。进一步地,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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