一种工程文件的扫描方法、装置、电子设备及存储介质与流程

文档序号:18901346发布日期:2019-10-18 21:59阅读:289来源:国知局
一种工程文件的扫描方法、装置、电子设备及存储介质与流程

本公开实施例涉及网络技术领域,尤其涉及一种工程文件的扫描方法、装置、电子设备及存储介质。



背景技术:

随着网络技术的迅速发展,越来越多的软件开始走进人们的视线中,为人们提供了各种各样的网络服务,而作为软件技术的重要组成部分,软件的代码审计也变得越来越重要。

代码审计是软件业务发展到一定阶段,解决性能、稳定和安全等问题常见的措施,一般分为人工审查和自动化审查;人工审查,是通过人工校对的方式,对代码进行逐条检查和分析,查找代码中是否存在的安全漏洞;自动化审查,则是通过关键词匹配的方式,将软件代码与预先设置的关键词进行比对,进而查找代码中存在的安全漏洞。

发明人在实现本公开的过程中,发现现有技术有如下缺陷:人工审查代码需要耗费大量的人力成本和时间成本,而且审查效率较低;通过关键词匹配的自动化审查方式,需要维护大量的关键词,不在维护范围内的词汇则不在审查的范围内,并且关键词能够被轻易绕开,使用相似表述的其它词汇时无法被检测为该关键词,可靠性较低。



技术实现要素:

本公开实施例提供了一种工程文件的扫描方法、装置、电子设备及存储介质,通过在软件工程中植入探针服务,并通过探针服务对工程文件进行一致性扫描,实现了对代码的安全缺陷检测。

第一方面,本公开实施例提供了一种工程文件的扫描方法,包括:

获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件;

启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务;

通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果。

第二方面,本公开实施例提供了一种工程文件的扫描装置,包括:

探针服务植入模块,用于获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件;

启动模块,用于启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务;

扫描执行模块,用于通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果。

第三方面,本公开实施例提供了一种电子设备,包括存储器、处理装置及存储在存储器上并可在处理装置上运行的计算机程序,所述处理装置执行所述程序时实现本公开任意实施例所述的工程文件的扫描方法。

第四方面,本公开实施例提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本公开任意实施例所述的工程文件的扫描方法。

本公开实施例的技术方案,通过在软件工程中植入探针服务,并通过探针服务对全部工程文件进行扫描,以获取该软件工程的扫描结果,在未对原工程文件造成侵害的前提下,实现了代码的安全缺陷检测,同时,探针服务对全部工程文件进行组合抽象语法树分析,根据代码运行的上下文环境以及代码之间的语义联系,实现了对全部代码的精确审计,提高了检测的准确性。

附图说明

图1是本公开实施例一中的一种工程文件的扫描方法的流程图;

图2a是本公开实施例二中的一种工程文件的扫描方法的流程图;

图2b是本公开具体应用场景一中的一种工程文件的扫描方法的流程图;

图3是本公开实施例三中的一种工程文件的扫描装置的结构框图;

图4是本公开实施例四中的一种电子设备的结构框图。

具体实施方式

下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分而非全部结构。

实施例一

图1为本公开实施例一提供的一种工程文件的扫描方法,本实施例可适用于对软件工程进行代码扫描的情况,该方法可以由工程文件的扫描装置来执行,该装置可以通过软件和/或硬件实现,并一般可以集成在代码检测服务器中,该方法具体包括如下步骤:

s110、获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件。

软件工程是软件开发人员根据获取的用户需求,分析后遵循一定的开发原理,采取相对应的编写方法,最终开发出的软件项目,可以是软件系统也可以是系统中的软件部分。软件工程可以是系统软件、应用软件或者介于系统软件与应用软件之间的中间件,在本公开实施例中,可选的,对软件工程的类型不作具体限定。

在本公开实施例中,可选的,获取与所述软件工程匹配的工程框架;根据工程框架与探针服务之间的映射关系,获取与所述软件工程匹配的工程框架匹配的探针服务。一个软件工程可能是由一种或多种编程语言编写而成,而每一种编程语言都有一个或多个对应的工程框架,也即编程框架;例如,python语言,其包括django、flask和web.py等多种不同的工程框架。使用工程框架进行程序设计,可以针对程序的特点提取共同特性,并且能够进行多次的开发利用,提高了软件工程的开发效率。探针服务是一段检测程序,用来获取软件工程中的漏洞,检查软件工程的程序代码是否存在安全隐患,或者查找代码编写不规范的地方。不同的工程框架,预先编写有对应的探针服务程序,且工程框架与探针服务之间是一一对应关系,每一种工程框架匹配一种探针服务。每一个工程框架下都有至少一个隶属于该工程框架的工程文件;由于软件工程的代码量巨大,通常情况下,一个工程框架下实际包括了多个工程文件,因此,在每个工程框架中植入匹配的探针服务,并利用该探针服务对该工程框架下的所有工程文件进行代码扫描。

可选的,在本公开实施例中,在所述软件工程包括的各工程文件中,获取与所述软件工程匹配的入口文件;将所述探针服务植入所述入口文件中。入口文件是工程框架的入口,也是该工程框架下所有文件的起始执行文件,每一个工程框架都包括至少一个入口文件,例如,上述python语言的django工程框架下包括入口文件settings.py和url.py,只要在该工程框架下的任意入口文件中植入探针服务,便可以通过遍历该工程框架暴露接口的方式获取所有的代码。特别的,当工程框架下包括多个入口文件时,可以通过指定的方式,例如,指定文件名的方式,指定在多个入口文件中的哪一个入口文件中植入探针服务。

s120、启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务。

软件工程启动后,由于探针服务已植入入口文件处,在软件工程启动后,探针服务会随着软件工程的启动而启动。

s130、通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果。

具体的,通过所述探针服务遍历所述软件工程中的全部工程文件,得到组合工程文件;通过所述探针服务生成与所述组合工程文件对应的组合抽象语法树;通过所述探针服务根据所述组合抽象语法树进行扫描,得到对所述软件工程的扫描结果。抽象语法树(abstractsyntaxtree,ast)是源代码语法结构的一种抽象表示,以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。现有技术一般是以各工程文件为处理对象,利用抽象语法树解析各工程文件,但是这样的处理方式割裂了代码之间的联系,不能针对上下文环境扫描,可发现问题的范围较小,同时,还会覆盖无调用的代码,准确性较低。而本公开实施例则是通过在各工程框架中植入的探针,遍历软件工程中的全部工程文件,得到组合工程文件,也即将完整的软件工程作为处理对象,使用组合抽象语法树,根据代码运行的上下文环境进行代码扫描,没有割裂代码之间的联系,并且由于分析了上下文之间的语义环境,不会覆盖无调用的代码,提高了检测准确性。

可选的,在通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果之后,可以根据版本控制工具,获取与所述软件工程匹配的开发者信息,并将扫描结果发送给匹配的开发者。版本控制工具,例如git、vss(visualsourcesafe)、cvs(concurrentversionssystem)和svn(subversion)等,用于对软件工程下的各工程文件的版本管理,包括工程文件的存储、追踪目录(即文件夹)和文件内容的修改历史;利用版本控制工具获取与软件工程匹配的开发者信息,并将扫描结果发送给开发者,以便开发者及时了解扫描结果。特别的,在本公开实施例中,对代码管理工具的类型不作具体限定。

可选的,在通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果之后,若所述扫描结果中包括服务器端请求伪造漏洞、命令执行漏洞和文件包含漏洞中的至少一种漏洞,则获取与该漏洞匹配的开源软件,并对所述开源软件进行漏洞分析。服务器端请求伪造(server-siderequestforgery,ssrf),是由攻击者构造形成并由服务端发起请求的安全漏洞,服务器端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制造成的;命令执行漏洞,是通过控制命令执行函数中的参数,将恶意系统命令注入到正常命令中,造成命令执行攻击;文件包含漏洞,是动态调用被包含的文件时,导致恶意代码的执行及敏感信息泄露的行为发生。若检测到上述漏洞中的至少一种,则获取与该漏洞所在工程文件匹配的开源软件,并对开源软件进行分析,查找所述开源软件的漏洞,例如,查找开源软件的安全漏洞风险提示并获取漏洞补丁信息,以使所述开源软件漏洞补丁保持在最新版本。

本公开实施例的技术方案,通过在软件工程中植入探针服务,并通过探针服务对全部工程文件进行扫描,以获取该软件工程的扫描结果,在未对原工程文件造成侵害的前提下,实现了代码的安全缺陷检测,同时,探针服务对全部工程文件进行组合抽象语法树分析,根据代码运行的上下文环境以及代码之间的语义联系,实现了对全部代码的精确审计,提高了检测的准确性。

实施例二

图2a为本公开实施例二中的一种工程文件的扫描方法的流程图,本实施例以上述实施例为基础进行具体化,在本实施例中,探针服务可以通过命令行接口和/或应用程序编程接口接收扫描指令并反馈扫描结果。相应的,本实施例的方法具体包括如下操作:

s210、获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件。

s220、启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务。

s230、通过所述探针服务采用预先配置的命令行接口和/或应用程序编程接口,接收扫描命令。

命令行接口(commandlineinterface,cli)和应用程序编程接口(applicationprogramminginterface,api)提供了向探针服务发送扫描命令的通道。由于软件工程的代码量巨大,全部扫描完成需要较长的时间,因此,可以通过命令行接口和/或应用程序编程接口,向探针服务发送有针对性的扫描命令,例如,只扫描特定名称的工程文件,以达到重点扫描的目的。

s240、通过所述探针服务根据所述扫描命令对所述软件工程进行定制化扫描,得到定制扫描结果。

根据上述发送的扫描指令,执行定制化扫描,也即对设定的工程文件进行扫描,并获取定制化扫描的结果。

s250、通过所述探针服务采用所述命令行接口和/或应用程序编程接口,反馈所述定制扫描结果。

可选的,探针服务扫描到安全漏洞时,可以通过命令行接口和/或应用程序编程接口实时的反馈漏洞信息,不需要暂停扫描操作,也不需要等待全部工程文件扫描完成后再反馈扫描结果。

本公开实施例的技术方案,通过预先配置的命令行接口和/或应用程序编程接口,使得探针服务可以获取扫描指令,执行定制化扫描并反馈定制扫描结果,实现了探针服务的对外通信,提高了扫描操作的灵活性;另外,探针服务可以在进行扫描操作的同时,实时的反馈漏洞信息,提高了扫描效率。

具体应用场景一

如图2b所示,本公开具体应用场景一是在上述实施例的基础上提供了一种工程文件的扫描方法;具体的,该方法包括:

s201、通过人工触发、定时触发或接口触发的方式,生成扫描任务;所述扫描任务包括待扫描的软件工程的编号。

扫描任务可以通过定时器定时触发生成,例如,每间隔预设时间生成一个扫描任务,以保证各软件工程按顺序执行;也可以通过软件接口的方式触发。

s202、读取所述扫描任务,并根据所述待扫描的软件工程的编号从软件工程仓库获取所述软件工程。

软件工程仓库存放了多个软件工程,以便于各软件工程的统一管理,每个软件工程按照编号进行分类存放。在读取到扫描任务中的待扫描的软件工程的编号时,从软件工程仓库中获取对应编号的软件工程。

s203、获取与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件。

s204、启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务。

s205、通过所述探针服务采用预先配置的命令行接口和/或应用程序编程接口,接收扫描命令。

s206、通过所述探针服务根据所述扫描命令对所述软件工程进行定制化扫描,得到定制扫描结果。

s207、通过所述探针服务采用所述命令行接口和/或应用程序编程接口,反馈所述定制扫描结果。

本公开实施例的技术方案,通过触发扫描任务,根据软件工程的编号从软件工程仓库中获取匹配的软件工程,进而执行定制化扫描操作,实现了对各软件工程的有序管理,以及对各软件工程的定制化扫描,可以针对不同的软件工程,执行不同的扫描策略。

实施例三

图3是本公开实施例三提供的一种工程文件的扫描装置的结构框图,具体包括:探针服务植入模块310、启动模块320和扫描执行模块330。

探针服务植入模块310,用于获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件;

启动模块320,用于启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务;

扫描执行模块330,用于通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果。

本公开实施例的技术方案,通过在软件工程中植入探针服务,并通过探针服务对全部工程文件进行扫描,以获取该软件工程的扫描结果,在未对原工程文件造成侵害的前提下,实现了代码的安全缺陷检测,同时,探针服务对全部工程文件进行组合抽象语法树分析,根据代码运行的上下文环境以及代码之间的语义联系,实现了对全部代码的精确审计,提高了检测的准确性。

可选的,在上述各实施例的基础上,探针服务植入模块310,具体包括:

工程框架获取单元,用于获取与所述软件工程匹配的工程框架;

探针服务获取单元,用于根据工程框架与探针服务之间的映射关系,获取与所述软件工程匹配的工程框架匹配的探针服务。

可选的,在上述各实施例的基础上,探针服务植入模块310,还包括:

入口文件获取单元,用于在所述软件工程包括的各工程文件中,获取与所述软件工程匹配的入口文件;

探针服务植入单元,用于将所述探针服务植入所述入口文件中。

可选的,在上述各实施例的基础上,扫描执行模块330,具体包括:

组合工程文件获取单元,用于通过所述探针服务遍历所述软件工程中的全部工程文件,得到组合工程文件;

组合抽象语法树获取单元,用于通过所述探针服务生成与所述组合工程文件对应的组合抽象语法树;

扫描执行单元,用于通过所述探针服务根据所述组合抽象语法树进行扫描,得到对所述软件工程的扫描结果。

可选的,在上述各实施例的基础上,所述工程文件的扫描装置,还包括:

扫描命令接收单元,用于通过所述探针服务采用预先配置的命令行接口和/或应用程序编程接口,接收扫描命令;

定制扫描结果获取单元,用于英语通过所述探针服务根据所述扫描命令对所述软件工程进行定制化扫描,得到定制扫描结果;

定制扫描结果反馈单元,用于通过所述探针服务采用所述命令行接口和/或应用程序编程接口,反馈所述定制扫描结果。

可选的,在上述各实施例的基础上,所述工程文件的扫描装置,还包括:

扫描结果发送单元,用于根据版本控制工具,获取与所述软件工程匹配的开发者信息,并将扫描结果发送给匹配的开发者。

可选的,在上述各实施例的基础上,所述工程文件的扫描装置,还包括:

开源软件匹配单元,用于若所述扫描结果中包括服务器端请求伪造、命令执行漏洞和文件包含漏洞中的至少一种,则获取与所述漏洞匹配的开源软件,并对所述开源软件进行漏洞分析。

上述装置可执行本公开任意实施例所提供的工程文件的扫描方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本公开任意实施例提供的方法。

实施例四

图4示出了适于用来实现本公开实施例的电子设备400的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图4示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图4所示,电子设备400可以包括处理装置(例如中央处理器、图形处理器等)401,其可以根据存储在只读存储器(rom)402中的程序或者从存储装置408加载到随机访问存储器(ram)403中的程序而执行各种适当的动作和处理。在ram403中,还存储有电子设备400操作所需的各种程序和数据。处理装置401、rom402以及ram403通过总线404彼此相连。输入/输出(i/o)接口405也连接至总线404。

通常,以下装置可以连接至i/o接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置408;以及通信装置409。通信装置409可以允许电子设备400与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的电子设备400,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本公开的实施例,上文各流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置408被安装,或者从rom402被安装。在该计算机程序被处理装置401执行时,执行本公开实施例的方法中限定的上述功能。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取待扫描的软件工程以及与所述软件工程匹配的探针服务,并将所述探针服务植入所述软件工程中;所述软件工程包括至少一个隶属同一工程框架的工程文件;启动所述软件工程,并通过所述软件工程在执行过程中启动所述探针服务;通过所述探针服务在所述软件工程的执行过程中,对所述软件工程中的全部工程文件进行一致性扫描,得到对所述软件工程的扫描结果。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,扫描命令接收单元还可以被描述为“用于通过所述探针服务采用预先配置的命令行接口和/或应用程序编程接口,接收扫描命令的单元”。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开的实施例中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开的实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

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