CN106445804B - 一种基于序列化中间表示的源代码云检测系统及方法 - Google Patents

一种基于序列化中间表示的源代码云检测系统及方法 Download PDF

Info

Publication number
CN106445804B
CN106445804B CN201610720861.6A CN201610720861A CN106445804B CN 106445804 B CN106445804 B CN 106445804B CN 201610720861 A CN201610720861 A CN 201610720861A CN 106445804 B CN106445804 B CN 106445804B
Authority
CN
China
Prior art keywords
intermediate representation
source code
detected
defect
cloud service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610720861.6A
Other languages
English (en)
Other versions
CN106445804A (zh
Inventor
章磊
韩建
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihu Ceteng Security Technology Co ltd
Qianxin Technology Group Co Ltd
Original Assignee
Beijing Qihu Ceteng Security Technology Co Ltd
Beijing Qianxin Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihu Ceteng Security Technology Co Ltd, Beijing Qianxin Technology Co Ltd filed Critical Beijing Qihu Ceteng Security Technology Co Ltd
Priority to CN201610720861.6A priority Critical patent/CN106445804B/zh
Publication of CN106445804A publication Critical patent/CN106445804A/zh
Application granted granted Critical
Publication of CN106445804B publication Critical patent/CN106445804B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于序列化中间表示的源代码云检测系统及方法,所述系统包括用户侧设备和云服务侧设备。其中用户侧设备将中间表示进行序列化以生成中间表示文件并且生成位置标识。用户侧设备将中间表示文件划分为多个子部分并且将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备。以及从云服务侧的设备接收检测响应消息,并且获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。所述云服务侧设备对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息。

Description

一种基于序列化中间表示的源代码云检测系统及方法
技术领域
本发明涉及源代码检测领域,并且更具体地,涉及一种基于序列化中间表示的源代码云检测系统及方法。
背景技术
随着网络技术和应用的飞速发展,信息系统安全正面临着前所未有的挑战。网络化和互联互通性已经成为当前软件和信息系统的发展方向。信息系统与互联网或其他网络的互连,使信息系统遭受攻击的概率增大,也导致了信息系统面临的安全威胁空前地增加。另一方面,随着构建在信息系统之上的各种业务应用的不断丰富,以及软件和信息系统复杂程度的不断提高,信息系统中隐藏的各种安全隐患也越来越多,并且通常难以被发现和消除。
最近几年,重大安全事件的频频发生揭示了当前信息系统安全形势的严峻性。仅仅依靠传统的安全防护机制来保障信息安全的做法已经逐渐力不从心。软件代码是构建系统信息的基础组件,软件代码中安全漏洞和未声明功能(后门)的存在是安全事件频繁发生的根源。忽视软件代码自身的安全性,而仅仅依靠外围的防护、事后的修补等方法,舍本逐末,必然事倍功半。只有通过管理和技术手段保障软件代码自身的安全性,再辅以各种安全防护手段,才是解决当前安全问题的根本解决之道。
然而,目前的源代码检测服务方通常要求用户先将待检测的源代码上传到服务器。在将待检测的源代码上传到服务器之后,源代码检测服务方与用户协商编译方法、检测类型等内容。这种要求用户上传源代码的方式,会使用户遭受源代码被第三方恶意截获的风险。通常,源代码的保密对于用户来说至关重要,并且源代码泄露会导致用户的极大损失。另一方面,在将待检测的源代码上传到服务器之后,与用户协商编译方法、检测类型等内容的检测方式效率比较低。通常,这种方式会出现协商不畅以及协商不清楚的情况。
发明内容
为了解决上述问题,本发明提供一种用于源代码检测的用户侧设备,所述用户侧设备包括:
转换单元,根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示;
序列化单元,将所述中间表示进行序列化以生成中间表示文件,其中在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识;
处理单元,将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密;
接口单元,将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备,以及从云服务侧的设备接收检测响应消息;以及
解析单元,获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。
优选地,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,所述中间表示为抽象语法树。
优选地,还包括识别单元,对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,根据编程语言确定所述待检测的源代码的词法特性和语法特性。
优选地,所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。
根据本发明的另一方面,提供一种用于源代码检测的云服务侧设备,所述云服务侧设备包括:
接收单元,接收检测请求消息,所述检测请求消息包括位置标识和临时中间表示文件,其中所述临时中间表示文件包括待检测的源代码的多个子部分;
处理单元,将所述多个子部分分别进行解密并且根据指针以第一子部分作为起始点将所述多个子部分进行链接以形成中间表示文件;
逆序列化单元,对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息;以及
发送单元,将所述确定缺陷指示信息发送给用户侧设备。
优选地,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,所述中间表示为抽象语法树。
优选地,所述检测请求消息中还包括:所述待检测的源代码的编程语言,并且所述逆序列化单元根据编程语言确定所述待检测的源代码的词法特性和语法特性。
优选地,所述逆序列化单元根据所述待检测的源代码的词法特性和语法特性对所述中间表示进行分析。
根据本发明的再一方面,提供一种源代码检测方法,所述方法包括:
根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示;
将所述中间表示进行序列化以生成中间表示文件,其中在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识;
将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密;
将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备,以及从云服务侧的设备接收检测响应消息;以及
获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。
优选地,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,所述中间表示为抽象语法树。
优选地,在所述根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析之前还包括:对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,根据编程语言确定所述待检测的源代码的词法特性和语法特性。
优选地,所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。
根据本发明的又一方面,提供一种源代码检测方法,所述方法包括:
接收检测请求消息,所述检测请求消息包括位置标识和临时中间表示文件,其中所述临时中间表示文件包括待检测的源代码的多个子部分;
将所述多个子部分分别进行解密并且根据指针以第一子部分作为起始点将所述多个子部分进行链接以形成中间表示文件;
对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息;以及
将所述确定缺陷指示信息发送给用户侧设备。
优选地,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,所述中间表示为抽象语法树。
优选地,所述检测请求消息中还包括:所述待检测的源代码的编程语言。
优选地,根据编程语言确定所述待检测的源代码的词法特性和语法特性并且根据所述待检测的源代码的词法特性和语法特性对所述中间表示进行分析。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为根据本发明优选实施方式的源代码云检测系统的结构示意图;
图2为根据本发明优选实施方式的用户侧设备的结构示意图;
图3为根据本发明优选实施方式的云服务侧设备的结构示意图;
图4为根据本发明优选实施方式的源代码检测器的结构示意图;
图5为根据本发明优选实施方式的源代码检测方法的流程图;以及
图6为根据本发明另一优选实施方式的源代码检测方法的流程图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
图1为根据本发明优选实施方式的源代码云检测系统100的结构示意图。源代码云检测系统100针对源代码安全需求,在对源代码进行高精度安全缺陷分析及溯源检测的基础上,还可与源代码版本管理系统(例如,版本控制系统SVN、分布式版本控制系统GIT)、缺陷管理系统(例如,缺陷跟踪系统Bugzilla,Bug-Tracking System)等进行无缝对接,以最小代价实现源代码安全的可视化管理,大幅提升的软件安全质量。源代码云检测系统100采用源代码静态分析技术,自动将获取到的中间表示文件进行逆序列化以生成内存对象中的中间表示,再通过数据流分析技术、符号执行技术、内存精确建模技术等进行分析并检查中间表示的语法、结构、过程、接口等来确定源代码的安全性。
源代码云检测系统100分析及检测的策略源自于多年的源代码安全积累,并兼容国际权威源代码安全标准和规范,包括常见缺陷列表(CWE,Common WeaknessEnumeration)、开放式Web应用程序安全项目(OWASP,Open Web Application SecurityProject)、一般弱点列举(CWE,Common Weakness Enumeration)、计算机安全应急响应组(CERT,Computer Emergency Response Team)的安全编程标准及汽车产业软件可靠性协会(MISRA,Motor Industry Software Reliability Association)的C/C++安全编码规范等。源代码云检测系统100支持代码注入、跨站脚本、输入验证、API误用、密码管理、资源管理错误、配置错误、不良实现、异常处理、代码风格、代码质量及危险函数等13个大类,600多个小类的检测策略,从而确保源代码安全检测结果的精准和权威性。
如图1所示,源代码云检测系统100包括:用户侧设备101-1、101-2、…、101-N,云服务102以及云服务侧设备103-1、103-2、…、103-N。优选地,用户侧设备101-1、101-2、…、101-N通过通信网络与云服务102连接。通常,通信网络包括一个或多个网络,例如数据网络、无线网络、电话网络或其任意组合。可以想到的是,数据网络可以是任意局域网(LAN)、城域网(MAN)、广域网(WAN)、公共数据网(例如因特网)、或任意其他适合的分组交换网络,例如商业所有、私有分组交换网,例如私有电缆或光纤网络。此外,无线网络可以是例如蜂窝网络,并且可采用各种技术,包括用于全球演进的增强数据速率(EDGE)、通用分组无线业务(GPRS)、全球移动通信系统(GSM)、因特网协议多媒体子系统(IMS)、通用移动电信系统(UMTS)等、以及任意其他适合的无线介质,例如全球微波互联接入(WiMAX)、长期演进(LTE)网络、码分多址(CDMA)、宽带码分多址(WCDMA)、无线保真(WiFi)、卫星、移动自组织网络(MANET)等。
优选地,云服务102用于为用户侧设备101-1、101-2、…、101-N提供统一的服务接口。此外,云服务102还可以提供身份认证功能,以对用户侧设备101-1、101-2、…、101-N进行身份认证。在用户侧设备101-1、101-2、…、101-N通过了云服务102的身份认证后,云服务102才会将用户侧设备101-1、101-2、…、101-N的源代码检测请求发送给云服务侧设备103-1、103-2、…、103-N。在云服务侧设备103-1、103-2、…、103-N进行了源代码检测并且生成了缺陷指示信息后,通过云服务102将缺陷指示信息转发给用户侧设备101-1、101-2、…、101-N。
优选地,用户侧设备101-1、101-2、…、101-N能够根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示。优选地,所述中间表示可以是抽象语法树。其中,本发明针对现有的主要编程语言提供词法和语法分析,例如,C、C++、JAVA、JSP、C#、Python等。所属领域技术人员应当了解的是,本发明并不限于对上述程序语言进行词法和语法分析,而是可以对任何已知的程序语言进行词法和语法分析。优选地,用户侧设备101-1、101-2、…、101-N能够对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,从而根据编程语言确定所述待检测的源代码的词法特性和语法特性。
优选地,用户侧设备101-1、101-2、…、101-N能够将所述中间表示进行序列化以生成中间表示文件。通常,在将源代码的中间表示传送给云服务侧设备之前,通常将诸如抽象语法树的中间表示进行序列化,以生成中间表示文件。按照这种方式,即使第三方截获了中间表示文件,也无法完全地将中间表示文件逆序列化为中间表示并且进而转换为源代码,这是因为,上面的转换方式和逆转换方式是用户侧设备和云服务侧设备预先确定的。通常,第三方无法获得上面的转换方式和逆转换方式。通常,由于云服务侧设备在进行缺陷检测时,是针对中间表示来进行的(这种方式确保了源代码的安全性),因此无法确定特定缺陷在源代码中的位置。为此,在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识。这种抽象方式也是用户侧设备和云服务侧设备预先确定的。云服务侧设备103-1、103-2、…、103-N在对中间表示进行分析后,如果发现了缺陷代码,记录一个三元组。所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。云服务侧设备103-1、103-2、…、103-N稍后将所述三元组封装在缺陷指示信息中并发送给用户侧设备101-1、101-2、…、101-N,使得用户侧设备101-1、101-2、…、101-N能够根据缺陷类型确定是何种缺陷,并且根据起始位置标识来结束位置标识确定上述缺陷在源代码中的起始位置和结束位置。
优选地,为了进一步保证源代码或中间表示文件的安全性,用户侧设备101-1、101-2、…、101-N将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密。按照这种方式,在第三方截获了中间表示文件后,必须要确定多个子部分中哪个是第一子部分。这是因为利用指针将所述多个子部分进行链接是单向链接,即必须确定第一子部分才能将所有子部分按顺序连接。此外,由于所述多个子部分分别进行了加密,因此必须对所有子部分进行解密才可能恢复中间表示文件。
优选地,用户侧设备101-1、101-2、…、101-N将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备。其中所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。通常,这种随机顺序能够防止第三方将所截获的多个子部分恢复成中间表示文件。而云服务侧设备103-1、103-2、…、103-N能够通过确定第一子部分并且通过指针,顺利地将多个子部分恢复成中间表示文件。用户侧设备101-1、101-2、…、101-N能够通过云服务102从云服务侧设备103-1、103-2、…、103-N接收检测响应消息。优选地,检测响应消息包括用于指示缺陷相关信息的缺陷指示信息。
优选地,用户侧设备101-1、101-2、…、101-N获取检测响应消息中的缺陷指示信息。如上所述,所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。用户侧设备101-1、101-2、…、101-N能够根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。位置标识与源代码中的行是对应的,因此在确定了起始位置标识和结束位置标识之后,可确定特定缺陷在源代码中的起始位置和结束位置。即,用户侧设备101-1、101-2、…、101-N能够根据缺陷类型确定是何种缺陷,并且根据起始位置标识来结束位置标识确定上述缺陷在源代码中的起始位置和结束位置。
优选地,云服务侧设备103-1、103-2、…、103-N能够通过云服务102接收检测请求消息。其中所述检测请求消息包括位置标识和临时中间表示文件。如上所述,由于云服务侧设备在进行缺陷检测时,是针对中间表示来进行的(这种方式确保了源代码的安全性),因此无法确定特定缺陷在源代码中的位置。为此,在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识。这种抽象方式是用户侧设备和云服务侧设备预先确定的。其中临时中间表示文件是源代码云检测系统为了防止第三方截获所采用的安全措施。用户侧设备101-1、101-2、…、101-N在将多个子部分和位置标识封装到检测请求消息中时,将多个子部分按照随机顺序组合成临时中间表示文件。因此,临时中间表示文件包括待检测的源代码的多个子部分。此外,所述检测请求消息中还包括:待检测的源代码的编程语言。通常,待检测的源代码的编程语言是确定检测方式的基本条件。
优选地,云服务侧设备103-1、103-2、…、103-N为了将多个子部分恢复成中间表示文件,必须要对已经加密的多个子部分分别进行解密。在对多个子部分分别进行解密之后,云服务侧设备103-1、103-2、…、103-N根据指针将多个子部分进行链接以恢复成中间表示文件。由于用户侧设备101-1、101-2、…、101-N将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,因此云服务侧设备103-1、103-2、…、103-N以第一子部分作为起始点并且根据指针将所述多个子部分进行链接以形成中间表示文件。
优选地,云服务侧设备103-1、103-2、…、103-N对中间表示文件进行逆序列化以生成内存对象中的中间表示。优选地,这种中间表示可以是抽象语法树。云服务侧设备103-1、103-2、…、103-N对所述中间表示进行分析并根据位置标识来确定缺陷指示信息。其中云服务侧设备103-1、103-2、…、103-N对所述中间表示进行分析。这种分析包括:缺陷分析、合规分析和/或开源组件分析。优选地,云服务侧设备103-1、103-2、…、103-N根据缺陷知识库存储的多个规则库来对所述中间表示进行分析。其中缺陷知识库包括缺陷检测规则库、合规检测规则库以及开源组件检测规则库等,并且缺陷知识库可以提供的检测缺陷种类包括缓冲区溢出、SQL注入、跨站脚本、代码质量、危险函数等13个大类,600多个小类,并且可检测的开源组件规则库达60万条。
优选地,缺陷检测规则库源自多年的源代码安全积累,并兼容国际权威源代码安全标准和规范,例如以下3个国际标准或规范:常见缺陷列表CWE,是MITRE公司继CVE之后的又一个安全漏洞词典。CWE为程序员和安全从业者提供了一个有条理的软件缺陷类型库。CWE旨在让人们更好地理解软件缺陷并创建能够识别、修复以及阻止此类缺陷的自动化工具;OWASP TOP 10:开放式web应用程序安全项目十大安全隐患列表,是OWASP最重要的项目之一。OWASP TOP 10不但总结了web应用程序最可能、最常见、最危险的十大安全隐患,还包括了如何消除这些隐患的建议;以及CWE/SANS 25种最危险的编程错误,是SANS学院、MITRE公司及美国和欧洲很多顶级软件安全专家共同合作的成果。CWE/SANS TOP 25可以帮助程序员编写更安全的代码,帮助用户衡量软件是否安全。
优选地,合规检测规则库支持主流国际标准和规范的代码合规检测规则,包括:计算机安全应急响应组CERT安全编程标准、汽车产业软件可靠性协会MISRA的C/C++安全编码规范等。其中CERT创建的源代码分析实验室为软件系统提供了适用于CERT安全编码标准的一致性测试。这种测试包括用于Java的CERT Oracle安全编码标准、用于C的CERT C语言安全编码标准、用于C++的CERT C++语言安全编码标准,用于Perl的CERT Perl安全编码标准。汽车产业软件可靠性协会MISRA的C/C++安全编码规范是MISRA针对C、C++语言提出的开发标准,旨在增进嵌入式系统的安全性及可移植性。
优选地,开源组件检测规则库包括通过搜索引擎和/或大数据网络所收集的开源组件信息。由于开源组件存在的已知漏洞和授权协议会给软件带来风险,而个别研发人员为了贪图方便,直接引用来自互联网的开源组件进行编码,这些开源组件往往已经存在漏洞,这将降低开发软件的整体安全性。因此,本发明在现有搜索引擎爬虫的基础上,建立了开源组件检测规则库,以使得溯源检测器(下面将会详细介绍)通过加载该规则库,检测源代码中是否引用了开源组件。进一步地,确定所使用的开源组件是否存在软件使用授权的问题,从而帮助用户规避开源组件的法律风险。同时,本发明还可检测软件中引用的开源组件存在哪些安全漏洞,从而最大程度降低开源代码引入的安全风险并且解决传统源代码检测技术无法进行溯源检测的问题。
优选地,缺陷知识库根据检测类型将所述多个规则库中的至少一个规则库发送给逆序列化单元,其中每个规则库与一种检测策略相关联。
优选地,云服务侧设备103-1、103-2、…、103-N根据所述至少一个规则库对中间表示进行分析以确定分析结果,例如缺陷类型。优选地,用于对中间表示进行分析的部件包括C/C++分析器、Java/JSP分析器、C#分析器、Python分析器、PHP分析器以及溯源分析器等。各个分析器接收结合缺陷知识库提供的至少一个规则库(每个规则库对应一个检测策略)对中间表示进行分析。优选地,分析结果还可以包括BUG信息、缺陷类型、缺陷起始位置、缺陷结束位置等信息。
此外,云服务侧设备103-1、103-2、…、103-N还用于对分析结果进行进一步分析以确定是否需要进行额外检测。如果不需要进行额外检测,则根据分析结果生成缺陷指示信息;如果需要进行额外检测,则通过接口单元将分析结果、中间表示以及检测类型发送给缺陷管理系统,以进行额外检测。缺陷管理系统可以根据分析结果、中间表示以及检测类型对待检测的源代码进行检测,并且可能根据检测结果来提供针对性的策略。
例如,当分析结果中的缺陷数量远低于平均值时,可能会触发额外检测。通畅地,普通软件工程师的缺陷密度一般为50~250个缺陷/KLOC(缺陷/千行源代码)。由于有严格的软件开发质量管理机制和多重测试环节,成熟的软件公司的缺陷率要低得多,普通软件开发公司的缺陷密度为4~40个缺陷/KLOC、并且高水平的软件公司的缺陷密度为2~4个缺陷/KLOC。目前,国产软件平均的缺陷密度为6个缺陷/KLOC。针对不同的用户,当缺陷/千行源代码明显低于行业平均值时,源代码安全管理单元102会触发额外检测。例如,如果分析结果中表明,普通软件开发公司的源代码的缺陷/千行源代码小于0.1,那么可能触发额外检测。
优选地,云服务侧设备103-1、103-2、…、103-N将确定缺陷指示信息发送给用户侧设备101-1、101-2、…、101-N。如上所述,缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
图2为根据本发明优选实施方式的用户侧设备200的结构示意图。如
图2所示,用户侧设备200包括:转换单元201、序列化单元202、处理单元203、接口单元204以及解析单元205。优选地,转换单元201能够根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示。优选地,所述中间表示可以是抽象语法树。其中,本发明针对现有的主要编程语言提供词法和语法分析,例如,C、C++、JAVA、JSP、C#、Python等。所属领域技术人员应当了解的是,本发明并不限于对上述程序语言进行词法和语法分析,而是可以对任何已知的程序语言进行词法和语法分析。优选地,用户侧设备200能够对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,从而根据编程语言确定所述待检测的源代码的词法特性和语法特性。
优选地,序列化单元202能够将所述中间表示进行序列化以生成中间表示文件。通常,在将源代码的中间表示传送给云服务侧设备之前,通常将诸如抽象语法树的中间表示进行序列化,以生成中间表示文件。按照这种方式,即使第三方截获了中间表示文件,也无法完全地将中间表示文件逆序列化为中间表示并且进而转换为源代码,这是因为,上面的转换方式和逆转换方式是用户侧设备和云服务侧设备预先确定的。通常,第三方无法获得上面的转换方式和逆转换方式。通常,由于云服务侧设备在进行缺陷检测时,是针对中间表示来进行的(这种方式确保了源代码的安全性),因此无法确定特定缺陷在源代码中的位置。为此,在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识。这种抽象方式也是用户侧设备和云服务侧设备预先确定的。云服务侧设备在对中间表示进行分析后,如果发现了缺陷代码,记录一个三元组。所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。云服务侧设备稍后将所述三元组封装在缺陷指示信息中并发送给用户侧设备,使得序列化单元202能够根据缺陷类型确定是何种缺陷,并且根据起始位置标识来结束位置标识确定上述缺陷在源代码中的起始位置和结束位置。
优选地,为了进一步保证源代码或中间表示文件的安全性,处理单元203将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密。按照这种方式,在第三方截获了中间表示文件后,必须要确定多个子部分中哪个是第一子部分。这是因为利用指针将所述多个子部分进行链接是单向链接,即必须确定第一子部分才能将所有子部分按顺序连接。此外,由于所述多个子部分分别进行了加密,因此必须对所有子部分进行解密才可能恢复中间表示文件。
优选地,、接口单元204将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备。其中所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。通常,这种随机顺序能够方式第三方将所截获的多个子部分恢复成中间表示文件。而云服务侧设备能够通过确定第一子部分并且通过指针,顺利地将多个子部分恢复成中间表示文件。接口单元204能够通从云服务侧设备接收检测响应消息。优选地,检测响应消息包括用于指示缺陷相关信息的缺陷指示信息。
优选地,解析单元205获取检测响应消息中的缺陷指示信息。如上所述,所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。解析单元205能够根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。位置标识与源代码中的行是对应的,因此在确定了起始位置标识和结束位置标识之后,可确定特定缺陷在源代码中的起始位置和结束位置。即,解析单元205能够根据缺陷类型确定是何种缺陷,并且根据起始位置标识来结束位置标识确定上述缺陷在源代码中的起始位置和结束位置。
图3为根据本发明优选实施方式的云服务侧设备300的结构示意图。如图3所示,云服务侧设备300包括:接收单元301、处理单元302、逆序列化单元303以及发送单元304。优选地,接收单元301能够通过云服务102接收检测请求消息。其中所述检测请求消息包括位置标识和临时中间表示文件。如上所述,由于云服务侧设备在进行缺陷检测时,是针对中间表示来进行的(这种方式确保了源代码的安全性),因此无法确定特定缺陷在源代码中的位置。为此,在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识。这种抽象方式是用户侧设备和云服务侧设备预先确定的。其中临时中间表示文件是源代码云检测系统为了防止第三方截获所采用的安全措施。用户侧设备在将多个子部分和位置标识封装到检测请求消息中时,将多个子部分按照随机顺序组合成临时中间表示文件。因此,临时中间表示文件包括待检测的源代码的多个子部分。此外,所述检测请求消息中还包括:待检测的源代码的编程语言。通常,待检测的源代码的编程语言是确定检测方式的基本条件。
优选地,为了将多个子部分恢复成中间表示文件,处理单元302必须要对已经加密的多个子部分分别进行解密。在对多个子部分分别进行解密之后,处理单元302根据指针将多个子部分进行链接以恢复成中间表示文件。由于用户侧设备将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,因此处理单元302以第一子部分作为起始点并且根据指针将所述多个子部分进行链接以形成中间表示文件。
优选地,逆序列化单元303对中间表示文件进行逆序列化以生成内存对象中的中间表示。优选地,这种中间表示可以是抽象语法树。逆序列化单元303对所述中间表示进行分析并根据位置标识来确定缺陷指示信息。其中逆序列化单元303对所述中间表示进行分析。这种分析包括:缺陷分析、合规分析和/或开源组件分析。优选地,逆序列化单元303根据缺陷知识库存储的多个规则库来对所述中间表示进行分析。其中缺陷知识库包括缺陷检测规则库、合规检测规则库以及开源组件检测规则库等,并且缺陷知识库可以提供的检测缺陷种类包括缓冲区溢出、SQL注入、跨站脚本、代码质量、危险函数等13个大类,600多个小类,并且可检测的开源组件规则库达60万条。
优选地,逆序列化单元303根据所述至少一个规则库对中间表示进行分析以确定分析结果,例如缺陷类型。优选地,用于对中间表示进行分析的部件包括C/C++分析器、Java/JSP分析器、C#分析器、Python分析器、PHP分析器以及溯源分析器等。各个分析器接收结合缺陷知识库提供的至少一个规则库(每个规则库对应一个检测策略)对中间表示进行分析。优选地,分析结果还可以包括BUG信息、缺陷类型、缺陷起始位置、缺陷结束位置等信息。
此外,逆序列化单元303还用于对分析结果进行进一步分析以确定是否需要进行额外检测。如果不需要进行额外检测,则根据分析结果生成缺陷指示信息;如果需要进行额外检测,则通过接口单元将分析结果、中间表示以及检测类型发送给缺陷管理系统,以进行额外检测。缺陷管理系统可以根据分析结果、中间表示以及检测类型对待检测的源代码进行检测,并且可能根据检测结果来提供针对性的策略。
优选地,发送单元304将确定缺陷指示信息发送给用户侧设备。如上所述,缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
图4为根据本发明优选实施方式的逆序列化单元400的结构示意图逆序列化单元400对中间表示文件进行逆序列化以生成内存对象中的中间表示。优选地,这种中间表示可以是抽象语法树。逆序列化单元400对所述中间表示进行分析并根据位置标识来确定缺陷指示信息。其中逆序列化单元400对所述中间表示进行分析。这种分析包括:缺陷分析、合规分析和/或开源组件分析。如图4所示,逆序列化单元400包括:C/C++分析器401、Java/JSP分析器402、C#分析器403、Python分析器404、PHP分析器405、溯源分析器406以及中间表示生成单元407等。各个分析器接收结合缺陷知识库提供的至少一个规则库(每个规则库对应一个检测策略)对中间表示进行分析。优选地,分析结果还可以包括BUG信息、缺陷类型、缺陷起始位置、缺陷结束位置等信息。中间表示生成单元407对中间表示文件进行逆序列化以生成内存对象中的中间表示。
具体地,中间表示生成单元407生成中间表示并且将其传输到C/C++分析器401,C/C++分析器401根据加载的C/C++检测策略进行分析,得出分析结果;或者中间表示生成单元407生成中间表示并且将其传输到Java/JSP分析器402,Java/JSP分析器402根据加载的Java/JSP/html/xml检测策略进行分析,得出分析结果;或者中间表示生成单元407生成中间表示并且将其传输到C#分析器403,C#分析器403根据加载的C#检测策略进行分析,得出分析结果;或者中间表示生成单元407生成中间表示并且将其传输到Python分析器404,Python分析器404根据加载的Python检测策略进行分析,得出分析结果;或者中间表示生成单元407生成中间表示并且将其传输到PHP分析器405,PHP分析器405根据加载的PHP检测策略进行分析,得出分析结果;或者中间表示生成单元407生成中间表示并且将其传输到溯源分析器406,溯源分析器406根据加载的溯源检测策略进行分析,得出分析结果。
图5为根据本发明优选实施方式的源代码检测方法500的流程图。源代码检测方法500为用户侧设备执行的步骤,如图5所示,源代码检测方法500从步骤501处开始。在步骤501,根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示。其中所述中间表示为抽象语法树。在步骤502,将所述中间表示进行序列化以生成中间表示文件,其中在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识。在步骤503,将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密。在步骤504,将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备,以及从云服务侧的设备接收检测响应消息。以及,在步骤505,获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置。其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,在步骤501之前,还包括:对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,根据编程语言确定所述待检测的源代码的词法特性和语法特性。优选地,将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。
图6为根据本发明另一优选实施方式的源代码检测方法600的流程图。源代码检测方法600为云服务侧设备执行的步骤,如图6所示,源代码检测方法600从步骤601处开始。优选地,在步骤601,接收检测请求消息,所述检测请求消息包括位置标识和临时中间表示文件,其中所述临时中间表示文件包括待检测的源代码的多个子部分。其中所述检测请求消息中还包括:所述待检测的源代码的编程语言。优选地,在步骤602,将所述多个子部分分别进行解密并且根据指针以第一子部分作为起始点将所述多个子部分进行链接以形成中间表示文件。优选地,在步骤603,对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息。其中中间表示为抽象语法树。以及,优选地,在步骤604,将所述确定缺陷指示信息发送给用户侧设备。其中缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
优选地,源代码检测方法600还包括根据编程语言确定所述待检测的源代码的词法特性和语法特性并且根据所述待检测的源代码的词法特性和语法特性对所述中间表示进行分析。
已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如本说明书所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在本说明书中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。

Claims (16)

1.一种用于源代码检测的用户侧设备,所述用户侧设备包括:
转换单元,根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示;
序列化单元,将所述中间表示进行序列化以生成中间表示文件,其中在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识;
处理单元,将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密;
接口单元,将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备,以及从云服务侧的设备接收检测响应消息;以及
解析单元,获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置;
其中,所述中间表示为抽象语法树。
2.根据权利要求1所述的用户侧设备,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
3.根据权利要求1所述的用户侧设备,还包括识别单元,对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,根据编程语言确定所述待检测的源代码的词法特性和语法特性。
4.根据权利要求1所述的用户侧设备,所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。
5.一种用于源代码检测的云服务侧设备,所述云服务侧设备包括:
接收单元,接收检测请求消息,所述检测请求消息包括位置标识和临时中间表示文件,其中所述临时中间表示文件包括待检测的源代码的多个子部分;
处理单元,将所述多个子部分分别进行解密并且根据指针以第一子部分作为起始点将所述多个子部分进行链接以形成中间表示文件;
逆序列化单元,对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息;以及
发送单元,将所述确定缺陷指示信息发送给用户侧设备;
其中,所述中间表示为抽象语法树。
6.根据权利要求5所述的云服务侧设备,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
7.根据权利要求5所述的云服务侧设备,所述检测请求消息中还包括:所述待检测的源代码的编程语言,并且所述逆序列化单元根据编程语言确定所述待检测的源代码的词法特性和语法特性。
8.根据权利要求7所述的云服务侧设备,所述逆序列化单元根据所述待检测的源代码的词法特性和语法特性对所述中间表示进行分析。
9.一种源代码检测方法,所述方法包括:
根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析,以在内存对象中生成中间表示;
将所述中间表示进行序列化以生成中间表示文件,其中在序列化的过程中将待检测的源代码中每条语句的位置抽象为位置标识;
将所述中间表示文件划分为多个子部分,并且利用指针将所述多个子部分进行链接,将所述多个子部分分别进行加密;
将多个子部分和位置标识封装到检测请求消息中并发送给云服务侧的设备,以及从云服务侧的设备接收检测响应消息;以及
获取检测响应消息中的缺陷指示信息,根据所述缺陷指示信息确定待检测的源代码中的缺陷类型和位置;
其中,所述中间表示为抽象语法树。
10.根据权利要求9所述的方法,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
11.根据权利要求9所述的方法,在所述根据待检测源代码的词法特性和语法特性对待检测的源代码进行分析之前还包括:对待检测的源代码进行识别,确定所述待检测的源代码的编程语言,根据编程语言确定所述待检测的源代码的词法特性和语法特性。
12.根据权利要求9所述的方法,所述将多个子部分和位置标识封装到检测请求消息中包括:将多个子部分按照随机顺序组合成临时中间表示文件。
13.一种源代码检测方法,所述方法包括:
接收检测请求消息,所述检测请求消息包括位置标识和临时中间表示文件,其中所述临时中间表示文件包括待检测的源代码的多个子部分;
将所述多个子部分分别进行解密并且根据指针以第一子部分作为起始点将所述多个子部分进行链接以形成中间表示文件;
对中间表示文件进行逆序列化以生成内存对象中的中间表示,对所述中间表示进行分析并根据位置标识来确定缺陷指示信息;以及
将所述确定缺陷指示信息发送给用户侧设备;
其中,所述中间表示为抽象语法树。
14.根据权利要求13所述的方法,其中所述缺陷指示信息包括至少一个三元组,所述三元组的格式为<缺陷类型,起始位置标识,结束位置标识>。
15.根据权利要求13所述的方法,所述检测请求消息中还包括:所述待检测的源代码的编程语言。
16.根据权利要求15所述的方法,根据编程语言确定所述待检测的源代码的词法特性和语法特性并且根据所述待检测的源代码的词法特性和语法特性对所述中间表示进行分析。
CN201610720861.6A 2016-08-24 2016-08-24 一种基于序列化中间表示的源代码云检测系统及方法 Active CN106445804B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610720861.6A CN106445804B (zh) 2016-08-24 2016-08-24 一种基于序列化中间表示的源代码云检测系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610720861.6A CN106445804B (zh) 2016-08-24 2016-08-24 一种基于序列化中间表示的源代码云检测系统及方法

Publications (2)

Publication Number Publication Date
CN106445804A CN106445804A (zh) 2017-02-22
CN106445804B true CN106445804B (zh) 2019-04-05

Family

ID=58183023

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610720861.6A Active CN106445804B (zh) 2016-08-24 2016-08-24 一种基于序列化中间表示的源代码云检测系统及方法

Country Status (1)

Country Link
CN (1) CN106445804B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107239340A (zh) * 2017-04-27 2017-10-10 清华大学 一种数值计算结果可重现性保障系统
CN109117633B (zh) * 2018-08-13 2022-11-04 百度在线网络技术(北京)有限公司 静态源码扫描方法、装置、计算机设备及存储介质
CN109922062B (zh) * 2019-03-04 2020-12-18 腾讯科技(深圳)有限公司 源代码泄露监控方法及相关设备
CN111930368A (zh) * 2019-05-13 2020-11-13 阿里巴巴集团控股有限公司 信息可视化方法、装置、存储介质及处理器
CN110442514B (zh) * 2019-07-11 2024-01-12 扬州大学 基于学习算法实现缺陷修复推荐的方法
CN112016100B (zh) * 2020-10-27 2021-01-29 深圳开源互联网安全技术有限公司 基于sca工具的数据库维护方法、装置及可读存储介质
CN115033886A (zh) * 2022-06-14 2022-09-09 广州图灵科技有限公司 一种基于序列化中间表示的源代码分布式检测系统及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937388A (zh) * 2009-12-17 2011-01-05 北京测腾信息技术有限公司 一种高可扩展性和可维护性的源代码缺陷检测方法及装置
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080263366A1 (en) * 2007-04-19 2008-10-23 Microsoft Corporation Self-verifying software to prevent reverse engineering and piracy

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937388A (zh) * 2009-12-17 2011-01-05 北京测腾信息技术有限公司 一种高可扩展性和可维护性的源代码缺陷检测方法及装置
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
.NET Framework中序列化与反序列化方法的分析与应用;高立群 等;《微计算机应用》;20071130;第29卷(第11期);第1178-1182页
Apache Axis1.1 中SOAP消息序列化反序列化机制初探;魏涛 等;《计算机应用》;20040131;第24卷(第1期);第114-116页

Also Published As

Publication number Publication date
CN106445804A (zh) 2017-02-22

Similar Documents

Publication Publication Date Title
CN106445804B (zh) 一种基于序列化中间表示的源代码云检测系统及方法
CN106354632B (zh) 一种基于静态分析技术的源代码检测系统及方法
CN112134761B (zh) 基于固件分析的电力物联网终端脆弱性检测方法及系统
Liu et al. Software vulnerability discovery techniques: A survey
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
US20120260344A1 (en) Method and system of runtime analysis
US20140380485A1 (en) Methods and systems for use in analyzing cyber-security threats in an aviation platform
CN109583711B (zh) 一种安全风险评估全过程管理系统
CN101017458A (zh) 基于源代码静态分析的软件安全代码分析器及其检测方法
CN104468477A (zh) 一种WebShell的检测方法及系统
CN104184728A (zh) 一种Web应用系统的安全检测方法及安全检测装置
Li et al. CLORIFI: software vulnerability discovery using code clone verification
CN105303109A (zh) 一种恶意代码情报检测分析方法及系统
CN106295343B (zh) 一种基于序列化中间表示的源代码分布式检测系统及方法
Zhang et al. An empirical study of web resource manipulation in real-world mobile applications
CN109657462B (zh) 数据检测方法、系统、电子设备和存储介质
Shi et al. Backporting security patches of web applications: A prototype design and implementation on injection vulnerability patches
El-Rewini et al. Dissecting residual APIs in custom android ROMs
Garcia Firmware modification analysis in programmable logic controllers
CN105868636B (zh) 一种检测权限漏洞的方法及装置
Zaid et al. Automated identification of over-privileged smartthings apps
CN103116543A (zh) 白黑盒结合的Web应用安全检测方法
KR20170015178A (ko) 소스 코드를 분석하여 보안 취약점과 웹쉘을 탐지하는 웹 서버 보안 시스템 및 그 방법
Antoniol Keynote paper: Search based software testing for software security: Breaking code to make it safer
CN111814138A (zh) 一种基于云平台的软件安全管理系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: Room 403-46, 4th Floor, No. 20 Jiuxianqiao Road, Chaoyang District, Beijing, 100016

Patentee after: BEIJING QIHU CETENG SECURITY TECHNOLOGY Co.,Ltd.

Patentee after: Qianxin Technology Group Co.,Ltd.

Address before: Room 4, floor 20, 403-46 Jiuxianqiao Road, Beijing, Chaoyang District

Patentee before: BEIJING QIHU CETENG SECURITY TECHNOLOGY Co.,Ltd.

Patentee before: BEIJING QIANXIN TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address