CN111552968B - 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置 - Google Patents

基于模型检查的嵌入式终端软件代码漏洞检测方法及装置 Download PDF

Info

Publication number
CN111552968B
CN111552968B CN202010318423.3A CN202010318423A CN111552968B CN 111552968 B CN111552968 B CN 111552968B CN 202010318423 A CN202010318423 A CN 202010318423A CN 111552968 B CN111552968 B CN 111552968B
Authority
CN
China
Prior art keywords
code
assembly
assembly code
detected
syntax tree
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
CN202010318423.3A
Other languages
English (en)
Other versions
CN111552968A (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.)
Zhejiang University ZJU
State Grid Corp of China SGCC
State Grid Zhejiang Electric Power Co Ltd
China Electric Power Research Institute Co Ltd CEPRI
Original Assignee
Zhejiang University ZJU
State Grid Corp of China SGCC
State Grid Zhejiang Electric Power Co Ltd
China Electric Power Research Institute Co Ltd CEPRI
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 Zhejiang University ZJU, State Grid Corp of China SGCC, State Grid Zhejiang Electric Power Co Ltd, China Electric Power Research Institute Co Ltd CEPRI filed Critical Zhejiang University ZJU
Priority to CN202010318423.3A priority Critical patent/CN111552968B/zh
Publication of CN111552968A publication Critical patent/CN111552968A/zh
Application granted granted Critical
Publication of CN111552968B publication Critical patent/CN111552968B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种基于模型检查的嵌入式终端软件代码漏洞检测方法及装置,涉及智能电网安全的技术领域,包括:先获取目标嵌入式终端软件的待检测代码和用户配置文件;若待检测代码中存在汇编代码,则对汇编代码进行汇编处理,得到处理后的汇编代码;然后对处理后的汇编代码进行语法分析,得到抽象语法树;再基于用户配置文件,对抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树;处理包含数据流分析;最后对处理后的抽象语法树进行检查,得到检查结果;其中,检查结果用以生成待检测代码的漏洞检测分析报告。本发明解决了现有的漏洞检测方法只适用于普通软件,无法适用于嵌入式终端软件代码的技术问题。

Description

基于模型检查的嵌入式终端软件代码漏洞检测方法及装置
技术领域
本发明涉及智能电网安全技术领域,尤其是涉及一种基于模型检查的嵌入式终端软件代码漏洞检测方法及装置。
背景技术
目前应用于智能电网中的嵌入式设备(嵌入式终端)类型和功能多样,且来源于多个厂商,具有多元异构的特点,该特性导致运行于嵌入式设备上的软件代码区别于普通的PC端软件。具体的,嵌入式设备中可能存在一些特定的指令,这些指令在高级语言中无法找到对应的语法,只能用汇编语言表示,例如:x86架构中的in/out指令。由此可见,这些嵌入式设备软件中可能存在内联的汇编代码。此外,在嵌入式设备中可能存在与底层I/O端口直接交互的情况,例如:对寄存器的操作和直接引脚访问。由于部分嵌入式终端设备在智能电网环境下,承担现场监测、信号测量的作用,因此必然存在着底层I/O的数据采集和输入,而嵌入式设备软件在对该部分数据进行处理时会与底层I/O端口直接交互。
然而目前国内外,基于漏洞检测的研究大多面向普通软件,无法对嵌入式终端软件的上述特点进行处理,具体地,当遇到内联的汇编代码时,会因其代码格式不符合或者代码错误而退出检测;当遇到与底层I/O的读取操作时,也会因为无法识别这种赋值情况而导致数据流分析错误,从而影响漏洞检测的正确性。因此,现有的漏洞检测方法只适用于普通软件,无法适用于嵌入式终端软件代码。
发明内容
本发明的目的在于提供一种基于模型检查的嵌入式终端软件代码漏洞检测方法及装置,以缓解现有技术中存在的现有的漏洞检测方法只适用于普通软件,无法适用于嵌入式终端软件代码的技术问题。
第一方面,本发明实施例提供了一种基于模型检查的嵌入式终端软件代码漏洞检测方法,其中,包括:获取目标嵌入式终端软件的待检测代码和用户配置文件;对所述待检测代码进行语法分析,得到抽象语法树;基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并进行数据流分析,得到处理后的抽象语法树;对所述处理后的抽象语法树进行检查,得到检查结果;其中,所述检查结果用以生成待检测代码的漏洞检测分析报告。
进一步地,所述对所述待检测代码进行语法分析,得到抽象语法树,包括:若所述待检测代码中存在汇编代码,则对所述汇编代码进行汇编处理,得到处理后的汇编代码;对所述处理后的汇编代码进行语法分析,得到抽象语法树;若所述待检测代码中不存在汇编代码,则对所述待检测代码进行语法分析,得到抽象语法树。
进一步地,所述汇编处理包括转换处理,所述转换处理为将所述汇编代码转换成中间语言代码;对所述汇编代码进行汇编处理,得到处理后的汇编代码包括:获取所述汇编代码中输入参数和/或输出参数的存在信息;基于所述汇编代码中输入参数和/或输出参数的存在信息,对所述汇编代码进行转换处理,得到所述中间语言代码;将所述中间语言确定为处理后的汇编代码。
进一步地,基于所述汇编代码中输入参数和/或输出参数的存在信息,对所述汇编代码进行转换处理,得到所述中间语言代码包括:当所述汇编代码中输入参数和输出参数的存在信息均为存在,存在数量均为一个时,基于第一汇编代码类型将所述汇编代码转换处理成第一语言形式的中间语言代码;其中,所述第一中间语言形式为z:=opx,z为所述汇编代码的输出参数,:=为赋值操作,op为所述汇编代码表示的操作,x为所述汇编代码的输入参数;当所述汇编代码中输入参数和输出参数的存在信息均为存在,所述输入参数存在数量为多个时,基于第二汇编代码类型将所述汇编代码转换处理成第二中间语言形式的中间语言代码;其中,所述第二中间语言形式为:=xy,y为所述汇编代码中不同于x的输入参数;当所述汇编代码中输入参数的存在信息为不存在,所述输出参数的存在信息为存在时,基于第三汇编代码类型将所述汇编代码转换处理成第三中间语言形式的中间语言代码;其中,第三汇编代码类型为z:=INNER,INNER表示常量。
进一步地,基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树包括:对所述用户配置文件进行解析,并利用解析后的用户配置文件对所述抽象语法树中的底层输入/输出端口代码进行识别;确定识别出的所述抽象语法树中的底层输入/输出端口代码的读写操作类型;若所述读写操作类型为读取操作,则将所述底层输入/输出端口代码中的读取语句替换为赋值语句;将包含所述赋值语句的抽象语法树确定为处理后的抽象语法树。
进一步地,在对所述汇编代码进行汇编处理之前,包括:对所述待检测代码进行预处理,得到预处理后的待检测代码;其中,所述预处理包括以下至少之一:去除空格操作,去除注释操作,头文件处理,宏定义处理;对预处理后的待检测代码进行词法分析,识别出所述汇编代码。
进一步地,对预处理后的待检测代码进行词法分析,识别出所述汇编代码包括:对所述预处理后的待检测代码进行分词处理,得到分词序列;若所述分词序列的类型为源文件类型,则将所述分词序列确定为所述汇编代码。
第二方面,本发明实施例提供了一种基于模型检查的嵌入式终端软件代码漏洞检测装置,其中,包括:获取模块,用于获取目标嵌入式终端软件的待检测代码和用户配置文件;语法分析模块,用于对所述处理后的汇编代码进行语法分析,得到抽象语法树;识别处理模块,基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并进行数据流分析,得到处理后的抽象语法树;检查模块,用于对所述处理后的抽象语法树进行检查,得到检查结果;其中,所述检查结果用以生成待检测代码的漏洞检测分析报告。
第三方面,本发明实施例提供了一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上述第一方面任一项所述的方法。
第四方面,本发明实施例提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,其中,所述程序代码使所述处理器执行如上述第一方面任一项所述的方法。
本发明提供的一种基于模型检查的嵌入式终端软件代码漏洞检测方法及装置,包括:先获取目标嵌入式终端软件的待检测代码和用户配置文件;若待检测代码中存在汇编代码,则对汇编代码进行汇编处理,得到处理后的汇编代码;然后对处理后的汇编代码进行语法分析,得到抽象语法树;再基于用户配置文件,对抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树;处理包含数据流分析;最后对处理后的抽象语法树进行检查,得到检查结果;其中,检查结果用以生成待检测代码的漏洞检测分析报告。本发明通过在待检测代码存在汇编代码时,对汇编代码进行汇编处理,在抽象语法树存在底层输入/输出端口代码时,对底层输入/输出端口代码进行识别并处理的方式,可以缓解现有的漏洞检测方法无法适用于嵌入式终端软件代码的技术问题,从而对嵌入式终端软件代码进行有效地漏洞检测。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图;
图2为图1中步骤S102的流程图;
图3为图1中步骤S104的流程图;
图4为本发明实施例提供的一种基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图;
图5为生成抽象语法树模型的流程图;
图6为本发明实施例提供的汇编代码的结构示意图;
图7为用户配置文件的示例图;
图8为底层I/O的代码示意图;
图9为模型检测代码示例及其对应的控制流图;
图10为数据流分析和控制流分析的流程图;
图11为本发明实施例提供的另一种基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图;
图12为本发明实施例提供的一种基于模型检查的嵌入式终端软件代码漏洞检测装置的结构示意图。
图标:
11-获取模块;12-汇编处理模块;13-语法分析模块;14-识别处理模块;15-检查模块。
具体实施方式
下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在智能电网的背景下,大量嵌入式设备的引入使得电网边界泛化,即传统的电力系统内网与外网之间的边界变得模糊化。海量多元异构的接入终端和复杂的接入环境使得智能电网面临着恶意设备接入、数据窃听、篡改等多种安全威胁,将直接影响智能电网的安全可靠运行。保障电网嵌入式终端的安全性是保障智能电网安全的重要方面,一旦数量众多、分布广泛的智能电网终端设备遭到恶意攻击,智能电网其他部分的运行也会受到影响,进而对国家和社会造成威胁。而保障嵌入式终端安全的一个基本前提就是对嵌入式终端软件代码进行有效地漏洞检测,找到潜在的漏洞并修复,从根源消除系统的安全隐患。
目前应用于智能电网中的嵌入式设备(嵌入式终端)类型和功能多样,且来源于多个厂商,具有多元异构的特点,该特性导致运行于嵌入式设备上的软件代码区别于普通的PC端软件。具体的,嵌入式设备中可能存在一些特定的指令,这些指令在高级语言中无法找到对应的语法,只能用汇编语言表示,例如:x86架构中的in/out指令。由此可见,这些嵌入式设备软件中可能存在内联的汇编代码。此外,在嵌入式设备中可能存在与底层I/O端口直接交互的情况,例如:对寄存器的操作和直接引脚访问。由于部分嵌入式终端设备在智能电网环境下,承担现场监测、信号测量的作用,因此必然存在着底层I/O的数据采集和输入,而嵌入式设备软件在对该部分数据进行处理时会与底层I/O端口直接交互。
然而目前国内外,基于漏洞检测的研究大多面向普通软件,无法对嵌入式终端软件的上述特点进行处理,具体地,当遇到内联的汇编代码时,会因其代码格式不符合或者代码错误而退出检测;当遇到与底层I/O的读取操作时,也会因为无法识别这种赋值情况而导致数据流分析错误,从而影响漏洞检测的正确性。因此,现有的漏洞检测方法只适用于普通软件,无法适用于嵌入式终端软件代码。
基于此,本发明实施例提供了一种基于模型检查的嵌入式终端软件代码漏洞检测方法及装置,通过在待检测代码存在汇编代码时,对汇编代码进行汇编处理,在抽象语法树存在底层输入/输出端口代码时,对底层输入/输出端口代码进行识别并处理的方式,使其适用于对嵌入式终端软件代码的漏洞检测,从而对嵌入式终端软件代码进行有效地漏洞检测。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种基于模型检查的嵌入式终端软件代码漏洞检测方法进行详细介绍。
实施例1:
本发明实施例在对嵌入式终端软件进行代码分析时,研究并总结了嵌入式终端软件不同于普通软件的两个特点:(1)可能存在内联的汇编代码;(2)可能存在与底层I/O的直接交互。本发明实施例对嵌入式终端软件的上述特点进行针对性地处理,目的是提供了一种适用于嵌入式终端的漏洞检测方法。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,获取目标嵌入式终端软件的待检测代码和用户配置文件。
在本发明实施例中,目标嵌入式终端软件可以指电网环境下的嵌入式终端软件,也可以指其他环境下的嵌入式终端软件,在此本发明实施例对目标嵌入式终端软件的应用环境不作具体限制。用户配置文件可以采用xml语言进行描述,也可以采用其他语言进行描述,本发明实施例对用户配置文件的语言类型不作具体限制。
步骤S102,若待检测代码中存在汇编代码,则对汇编代码进行汇编处理,得到处理后的汇编代码。
在本发明实施例中,步骤S102中的汇编代码可以指内联的汇编代码,汇编处理是指利用一些识别技术或处理手段对汇编代码进行处理。由于嵌入式终端软件可能存在内联的汇编代码是嵌入式终端软件区别于普通软件的一个特点,因此步骤S102可以实现对内联的汇编代码的识别和处理,处理的具体步骤见下述步骤S201~步骤S203。
步骤S103,对处理后的汇编代码进行语法分析,得到抽象语法树。
在本发明实施例中,语法分析属于静态分析的一种,其目的是构建出与待检测代码等效的抽象语法树(Abstract Syntax Tree,AST),以便后期通过对该抽象语法树模型的处理来确定待检测代码是否包含漏洞。其中,抽象语法树也称为抽象语法树模型,或简称为AST模型。
步骤S104,基于用户配置文件,对抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树;处理包含数据流分析。
在本发明实施例中,可能存在底层输入/输出端口代码(即为底层I/O)是嵌入式终端软件区别于普通软件的一个特点,因此步骤S104可以实现对底层输入/输出端口代码的识别和处理,处理的具体步骤见下述步骤S301~步骤S304。
步骤S105,对处理后的抽象语法树进行检查,得到检查结果;其中,检查结果用以生成待检测代码的漏洞检测分析报告。
在本发明实施例中,检查可以包括数据流分析和控制流分析,检查结果可以表示内联的汇编代码存在情况和底层I/O的存在情况。
本发明实施例通过对目标嵌入式终端软件代码进行分析和建模,然后采用模型检查的方法对目标嵌入式终端软件代码进行漏洞检测。本发明实施例可以填补国内在此领域的空白,实现面向嵌入式终端软件的代码漏洞检测,从而提升电力工控系统的安全防护能力。
下面结合具体的实施例介绍上述基于模型检查的嵌入式终端软件代码漏洞检测方法。
在一个可选的实施例中,汇编处理包括转换处理,转换处理为将汇编代码转换成中间语言代码;如图2所示,步骤S102,对汇编代码进行汇编处理,得到处理后的汇编代码可以包括以下步骤:
步骤S201,获取汇编代码中输入参数和/或输出参数的存在信息;
步骤S202,基于汇编代码中输入参数和/或输出参数的存在信息,对汇编代码进行转换处理,得到中间语言代码;
步骤S203,将中间语言确定为处理后的汇编代码。
在本发明实施例中,汇编代码中输入参数的存在信息可能是存在,也可能是不存在。同样的,输出参数的存在信息也可能是存在,或是不存在。在输入参数和/或输出参数不同存在信息的情况下,转换处理的方式不同,因此可以得到不同的中间语言代码,具体描述如下:
在一个可选的实施例中,步骤S202,基于汇编代码中输入参数和/或输出参数的存在信息,对汇编代码进行转换处理,得到中间语言代码包括以下步骤:
当汇编代码中输入参数和输出参数的存在信息均为存在,存在数量均为一个时,基于第一汇编代码类型将汇编代码转换处理成第一中间语言形式的中间语言代码;其中,第一中间语言形式为z:=opx,z为汇编代码的输出参数,:=为赋值操作,op为汇编代码表示的操作,x为汇编代码的输入参数;
当汇编代码中输入参数和输出参数的存在信息均为存在,输入参数存在数量为多个时,基于第二汇编代码类型将汇编代码转换处理成第二中间语言形式的中间语言代码;其中,第二中间语言形式为:=xy,z为汇编代码的输出参数,:=为赋值操作,op为汇编代码表示的操作,x和y为汇编代码中不同的输入参数;
当汇编代码中输入参数的存在信息为不存在,输出参数的存在信息为存在时,基于第三汇编代码类型将汇编代码转换处理成第三中间语言形式的中间语言代码;其中,第三中间语言形式为z:=INNER,z为汇编代码的输出参数,:=为赋值操作,INNER表示常量。
在本发明实施例中,基于不同类型的汇编代码可以进行不同的转换处理,除了上述三种情况,还存在两种情况,其中有一种情况为汇编代码中输入参数和输出参数的存在信息均为不存在,而另外一种情况是汇编代码中输入参数的存在信息为存在,输出参数的存在信息为不存在,上述两种情况下的输出参数的存在信息均为不存在,输出参数的存在信息均为不存在表明内联汇编代码不会对后续的程序流程造成影响,因此在这两种情况下,无需对汇编代码进行转换处理。
在一个可选的实施例中,如图3所示,步骤S104,基于用户配置文件,对抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树包括以下步骤:
步骤S301,对用户配置文件进行解析,并利用解析后的用户配置文件对抽象语法树中的底层输入/输出端口代码进行识别;
步骤S302,确定识别出的抽象语法树中的底层输入/输出端口代码的读写操作类型;
步骤S303,若读写操作类型为读取操作,则将底层输入/输出端口代码中的读取语句替换为赋值语句;
步骤S304,将包含赋值语句的抽象语法树确定为处理后的抽象语法树。
在本发明实施例中,底层输入/输出端口代码的读写操作类型除了包括读取操作,还可能包括写入操作,由于读取操作读取的值一般都对应实际的物理意义,存在范围限定,需要根据用户配置文件标注的数据类型和范围进行设置,将底层I/O的读取语句替换为赋值语句。对于底层I/O的写入操作,不会影响后续的数据流分析,可以忽略。本实施例通过对用户配置文件进行解析,可以识别抽象语法树中的底层输入/输出端口代码,进而在读写操作类型为读取操作的情况下,将底层输入/输出端口代码中的读取语句替换为赋值语句,最终得到处理后的抽象语法树。
在一个可选的实施例中,在步骤S102,对汇编代码进行汇编处理之前,方法可以包括以下步骤:
对待检测代码进行预处理,得到预处理后的待检测代码;其中,预处理包括以下至少之一:去除空格操作,去除注释操作,头文件处理,宏定义处理;
对预处理后的待检测代码进行词法分析,识别出汇编代码。
为了便于对待检测代码进行词法分析,本发明实施例可以在词法分析之前进行预处理,目的是去除待检测代码中的空格,去除待检测代码中的注释,处理待检测代码中的头文件,处理待检测代码中的宏定义等。在预处理后,对待检测代码进行词法分析,可以提高识别效率。
在一个可选的实施例中,对预处理后的待检测代码进行词法分析,识别出汇编代码包括:
对预处理后的待检测代码进行分词处理,得到分词序列;
若分词序列的类型为预设类型,则将分词序列确定为汇编代码;其中,预设类型包括源文件类型。
在本发明实施例中,词法分析可以采用上述步骤实现对汇编代码的识别,即先得到分词序列,然后根据分词序列确定待检测代码中是否包含汇编代码,然而本发明实施例对识别汇编代码的方式不作具体限定,不局限为词法分析,还可以是其他的分析方法。
在一个可选的实施例中,方法还包括:若待检测代码中不存在汇编代码,则对待检测代码进行语法分析,得到抽象语法树。
在本发明实施例中,由于待检测代码中可能存在汇编代码,那么待检测代码也可能不存在汇编代码,在不存在汇编代码时,为了继续检测待检测代码中是否包含底层输入/输出端口代码,因此基于待检测代码继续生成抽象语法树。
本发明实施例通过对嵌入式终端软件进行词法分析、语法分析等静态分析构建抽象语法树模型,再根据用户配置文件中预定义的规则对构建的抽象语法树模型进行模型检查,可以实现对嵌入式终端软件代码的漏洞检测。
实施例2:
上述实施例可以实现对嵌入式终端软件代码的漏洞检测。而本发明实施例是对上述实施例进行的详细描述。在本实施例中,该基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图还可以如图4所示,主要包括静态分析模块和模型检查模块,并且针对电网嵌入式终端的两个特点,在传统的静态分析方法和模型检查方法上进行了改进,设计了内联汇编处理模块和底层I/O处理模块,设计的上述两个模块可以使其处理电网嵌入式终端软件代码中包含内联的汇编代码和底层I/O交互的待检测代码。
具体地,如图5所示,本发明实施例提供了一种生成抽象语法树模型的流程图。本发明实施例中的静态分析模块首先对电网嵌入式终端软件的源代码(即待检测代码,图5中的设备代码)进行扫描和词法分析,将源代码输出为一系列的token序列(或称为token),并在上述过程中进行一些预处理,包括:去除空行和注释、标注行号等。特别地,本发明实施例可以定义”asm”类型的token序列,以识别待检测代码中的内联的汇编代码。对词法分析后得到的token序列进行处理,如果是”asm”类型的token序列,则使用内联汇编处理模块进行汇编代码的识别和转化,如果是普通token序列,则跳过。语法分析模块对处理后的token序列进行语法分析,将其转化为抽象语法树模型,并在此过程中执行语法检查。
本发明实施例中的内联汇编处理模块,对内联的汇编代码进行自动识别和数据流分析,并将其转化为四元码的中间语言表示。如图6所示,本发明实施例将内联的汇编代码划分以下为4种类型:类型(a),类型(b),类型(c)和类型(d)。在上述类型(b)和(d)中输出参数的存在信息为不存在,即无输出参数,表明内联的汇编代码不会对后续的程序流程造成影响,因此内联汇编模块无输出。而在类型(a)中,同时存在输入和输出参数,内联汇编处理模块识别汇编代码的语义,并将其转化为下式(1)进行表示,当输入参数存在多个时,可以表示为如下式(2)。其中,z表示汇编代码的输出参数,即程序中已存在的某个变量;x和y表示汇编代码的不同输入参数,也是程序中已存在的某个变量;:=表示赋值操作,op表示汇编代码表示的某种操作。在类型(c)中,只存在输出参数,表明程序通过汇编代码将内部寄存器的某个值或是某个常量赋值给了外部程序变量z,采用INNER表示该值,说明该值来源于内部,是一个安全值,如下式(3)所示。经过内联汇编模块处理后输出的中间语言表达和正常C语言中的赋值语句操作相同,因此可以被后续的语法分析模块处理,统一转化成AST模型。
z:=op x(1)
z:=x op y(2)
z:=INNER(3)
本发明实施例中的模型检查方法,如图10所示,对建立的AST模型进行数据流分析和控制流分析,并根据预定义的规则检测潜在的漏洞。其中,预定义的规则是根据国际标准CWE(Common Weakness Enumeration)中对漏洞的描述,定义的用于描述漏洞在某个节点存在的约束条件。本发明实施例在对AST模型的遍历过程中,结合数据流分析和控制流分析可以实现对可能存在的漏洞节点的可达性定值分析。
具体地,本发明实施例定义漏洞节点集合为V,普通节点集合为N和可达路径集合为P。其中,漏洞节点集合V中包含了漏洞可能产生的节点,以CWE121描述的栈缓冲区溢出为例,当调用strcpy函数且满足以下预定义的规则时,则认为当前节点为一个漏洞节点v,如图9中的节点6。不满足预定义规则的节点视为普通节点n,包含于普通节点集合N。定义可达路径集合P中的路径p为从某个普通节点n到漏洞节点v的可达路径。
pre-defined rule:strcpy(des,src):len(src)>len()
根据上述的定义,本发明实施例还可以设定判断漏洞是否存在的条件,具体如下:
对于任意节点v∈V,存在一条路径p∈P,满足
Figure BDA0002460415320000142
其中n∈N,则认为从普通节点n到漏洞节点v之间存在可达路径p,可以认为漏洞存在。
综上所述,本发明实施例中的模型检查模块对AST模型进行数据流分析,具体表现为对漏洞节点的判断,即通过数据流分析判断某个节点是否属于漏洞节点。在模型检查的过程中,对AST模型进行的控制流分析具体表现为对可达路径的检测。其中在数据流分析过程中考虑到了嵌入式终端软件代码中存在与底层I/O直接交互的情况,因此,本发明实施例增加了底层I/O处理模块。
本发明实施例中的底层I/O处理模块,可以支持通过用户配置文件对底层I/O进行识别和数据流分析,其中,用户配置文件可以采用xml语言进行描述,如图7所示。本发明实施例定义底层I/O相关的xml标签来描述底层I/O的配置,如表1所示。采用xml语言对底层I/O的描述和示例代码如图7和图8所示。在图7中,通过<io></io>标签定义了一个名称为GPIO_Pin_8的输出I/O,它的数据类型为int,值的范围在[0,1],也就是可以输出值为0或1,以及定义了一个名为GPIO_Pin_9的输入I/O,它的数据类型为double,并且输入范围为[0,5]。
表1底层I/O配置的描述
Figure BDA0002460415320000141
Figure BDA0002460415320000151
在本发明实施例中,底层I/O处理模块通过对xml语言描述的配置文件进行处理,识别<io></io>标签内描述的I/O相关信息,例如:I/O的名称、类型和数据类型、数据范围等;然后对输入的待检测代码进行I/O名称的匹配和识别,并进行相应的标识和替换。具体地,对于底层I/O的读取操作,由于其读取的值一般都对应实际的物理意义,存在范围限定,因此可以根据用户配置文件标注的数据类型和范围进行设置,将底层I/O的读取语句替换为赋值语句。对于底层I/O的写入操作,不会影响后续的数据流分析,可以忽略。具体处理规则可以如下:处理规则1,针对底层I/O的写入操作不影响后续的数据流分析,忽略该语句;处理规则1,针对底层I/O的读取操作会影响到后续的数据流分析,可以根据用户配置文件中标注的读取数据类型和范围进行设定。
以图8中的底层I/O代码为例,本发明实施例中的底层I/O处理模块根据解析的用户配置文件,可以匹配到该待检测代码中的GPIO_Pin_8和GPIO_Pin_9,并根据其对应的类型为输出参数或输入参数进行处理。GPIO_Pin_8为输出I/O,因此不会影响后续的数据流分析,可以忽略;GPIO_Pin_9为输入I/O,因此将GPIO_Pin_9替换为具体的数据类型表示,即将“GPIO_InitStructure_2.GPIO_Pin=GPIO_Pin_9;”的语句修改为“GPIO_InitStructure_2.GPIO_Pin=Double(0,5);”表示该数据为double类型的(0,5)()范围内的值。
本发明实施例通过对现有静态分析方法进行的改进,针对性地处理了嵌入式终端软件代码中存在的汇编代码和与底层I/O的交互,最终建立待检测代码的抽象语法树模型,并采用模型检查的方法实现了电网嵌入式终端软件的代码漏洞检测,克服了现有漏洞检测方法无法适用于嵌入式设备软件的缺陷,有利于及时发现和修复嵌入式设备内部的漏洞,将其应用到智能电网中,可以增强智能电网嵌入式终端设备的安全性,防止电网嵌入式终端遭受攻击,从而保障智能电网的整体安全。
实施例3:
上述两个实施例可以实现对嵌入式终端软件代码的漏洞检测。而本发明实施例是对嵌入式终端软件代码的漏洞检测方法的详细描述。图11为本发明实施例提供的另一种基于模型检查的嵌入式终端软件代码漏洞检测方法的流程图,该基于模型检查的嵌入式终端软件代码漏洞检测方法的具体步骤如下:
步骤1,输入待检测代码,并设定用户配置文件;
步骤2,对待检测代码进行预处理,主要是为了去除代码中多余的换行符、制表符和注释等,处理头文件、宏定义以及条件编译;
步骤3,利用静态分析模块对预处理后的待检测代码进行静态分析并建立AST模型,具体步骤如下:
步骤3.1,在词法分析阶段,对预处理后的待检测代码进行分词处理,输出token序列;步骤3.2,对token序列进行处理,若存在”asm”类型的token系列,则进行内联汇编处理。内联汇编处理模块对汇编代码进行识别和数据流分析,并输出为中间语言表示;步骤3.3,在语法分析阶段,对处理后的token序列进行语法分析并生成AST模型。
步骤4,对AST模型进行模型检查,具体步骤如下:
步骤4.1,初始化普通节点集合N,漏洞节点集合V,和可达路径集合P;步骤4.2,遍历AST模型,并进行数据流分析和控制流分析;步骤4.3,在数据流分析过程中,首先由底层I/O处理模块根据用户配置文件识别所有的底层I/O,并根据其类型为读取或写入进行不同的处理操作;步骤4.4,结合数据流分析和控制流分析对AST模型进行模型检查,对遍历到的每个节点n进行规则检查,判断是否为漏洞节点:如果该节点满足预定义的漏洞规则,则将其加入漏洞节点集合V,此时存在可达路径p,满足从普通节点n到达漏洞节点v,则认为存在漏洞,并将该路径p加入到集合P中;步骤4.5,对集合N中的每个节点都检查完成后,模型检查结束。
步骤5,根据前述所有的分析和检查结果,生成漏洞检测报告并输出。
本发明实施例可以通过将传统的静态分析和模型检查方法与电网嵌入式终端软件代码的自身特点相结合的方式,提出了面向电网嵌入式设备的漏洞检测方法。该方法通过对智能电网中嵌入式设备的源代码进行自动化静态分析,建立AST模型,然后根据漏洞特征对建立的AST模型进行模型检查,从而检测设备代码中是否存在漏洞。
本发明实施例分析了电网嵌入式终端软件的特点:存在(1)含有内联的汇编代码;(2)存在与底层I/O直接交互的代码,然后基于以上两个特点,在传统静态分析技术的基础上,加入了对内联的汇编代码的识别与处理,以及对与底层I/O直接交互的代码的识别,在识别过程中,结合了词法分析、语法分析、控制流分析、符号执行等技术,因此本发明实施例所提供的漏洞检测方法适用于针对电网嵌入式终端设备的代码漏洞检测,有助于从根源发现智能电网中嵌入式设备的漏洞,加强智能电网安全性。
实施例4:
本发明实施例还提供了一种基于模型检查的嵌入式终端软件代码漏洞检测装置,该基于模型检查的嵌入式终端软件代码漏洞检测装置主要用于执行本发明实施例上述内容所提供的基于模型检查的嵌入式终端软件代码漏洞检测方法,以下对本发明实施例提供的基于模型检查的嵌入式终端软件代码漏洞检测装置做具体介绍。
图12为本发明实施例提供的一种基于模型检查的嵌入式终端软件代码漏洞检测装置的结构示意图。如图12所示,该基于模型检查的嵌入式终端软件代码漏洞检测装置主要包括:获取模块11,语法分析模块12,识别处理模块13,检查模块14,其中:
获取模块11,用于获取目标嵌入式终端软件的待检测代码和用户配置文件;
语法分析模块12,用于对处理后的汇编代码进行语法分析,得到抽象语法树;
识别处理模块13,基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并进行数据流分析,得到处理后的抽象语法树;
检查模块14,用于对处理后的抽象语法树进行检查,得到检查结果;其中,检查结果用以生成待检测代码的漏洞检测分析报告。
所述对处理后的汇编代码进行语法分析,得到抽象语法树,包括:
若所述待检测代码中存在汇编代码,则对所述汇编代码进行汇编处理,得到处理后的汇编代码;对所述处理后的汇编代码进行语法分析,得到抽象语法树;
若所述待检测代码中不存在汇编代码,则对所述待检测代码进行语法分析,得到抽象语法树。
本发明实施例提供的一种基于模型检查的嵌入式终端软件代码漏洞检测装置,包括:先利用获取模块11获取目标嵌入式终端软件的待检测代码和用户配置文件;若待检测代码中存在汇编代码,则利用汇编处理模块12对汇编代码进行汇编处理,得到处理后的汇编代码;然后利用语法分析模块13对处理后的汇编代码进行语法分析,得到抽象语法树;再基于用户配置文件,利用识别处理模块14对抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树;处理包含数据流分析;最后利用检查模块15对处理后的抽象语法树进行检查,得到检查结果;其中,检查结果用以生成待检测代码的漏洞检测分析报告。
本发明实施例通过在待检测代码存在汇编代码时,对汇编代码进行汇编处理,在抽象语法树存在底层输入/输出端口代码时,对底层输入/输出端口代码进行识别并处理的方式,可以缓解现有的漏洞检测方法无法适用于嵌入式终端软件代码的技术问题,从而对嵌入式终端软件代码进行有效地漏洞检测。
可选地,汇编处理包括转换处理,转换处理为将汇编代码转换成中间语言代码;因此汇编处理模块12可以包括以下子模块:
获取子模块,用于获取汇编代码中输入参数和/或输出参数的存在信息;
转换处理子模块,用于基于汇编代码中输入参数和/或输出参数的存在信息,对汇编代码进行转换处理,得到中间语言代码;
第一确定子模块,用于将中间语言确定为处理后的汇编代码。
可选地,转换处理子模块包括以下单元:
第一转换处理单元,用于当汇编代码中输入参数和输出参数的存在信息均为存在,存在数量均为一个时,基于第一汇编代码类型对汇编代码进行转换处理,得到第一中间语言代码;其中,第一汇编代码类型为z:=opx,z为汇编代码的输出参数,:=为赋值操作,op为汇编代码表示的操作,x为汇编代码的输入参数;
第二转换处理单元,用于当汇编代码中输入参数和输出参数的存在信息均为存在,输入参数存在数量为多个时,基于第二汇编代码类型对汇编代码进行转换处理,得到第二中间语言代码;其中,第二汇编代码类型为:=xy,z为汇编代码的输出参数,:=为赋值操作,op为汇编代码表示的操作,x和y为汇编代码中不同的输入参数;
第三转换处理单元,用于当汇编代码中输入参数的存在信息为不存在,输出参数的存在信息为存在时,基于第三汇编代码类型对汇编代码进行转换处理,得到第三中间语言代码;其中,第三汇编代码类型为z:=INNER,z为汇编代码的输出参数,:=为赋值操作,INNER表示常量。
可选地,识别处理模块14包括以下子模块:
解析识别子模块,对用户配置文件进行解析,并利用解析后的用户配置文件对抽象语法树中的底层输入/输出端口代码进行识别;
第二确定子模块,用于确定识别出的抽象语法树中的底层输入/输出端口代码的读写操作类型;
替换子模块,用于若读写操作类型为读取操作,则将底层输入/输出端口代码中的读取语句替换为赋值语句;
第三确定子模块,用于将包含赋值语句的抽象语法树确定为处理后的抽象语法树。
可选地,在对汇编代码进行汇编处理之前,该基于模型检查的嵌入式终端软件代码漏洞检测装置包括以下模块:
预处理模块,用于对待检测代码进行预处理,得到预处理后的待检测代码;其中,预处理包括以下至少之一:去除空格操作,去除注释操作,头文件处理,宏定义处理;
词法分析模块,用于对预处理后的待检测代码进行词法分析,识别出汇编代码。
可选地,词法分析模块可以包括以下子模块:
分词处理子模块,用于对预处理后的待检测代码进行分词处理,得到分词序列;
第四确定子模块,用于若分词序列的类型为预设类型,则将分词序列确定为汇编代码;其中,预设类型包括源文件类型。
可选地,该基于模型检查的嵌入式终端软件代码漏洞检测装置还包括以下模块:
语法分析模块,用于若待检测代码中不存在汇编代码,则对待检测代码进行语法分析,得到抽象语法树。
在本发明的又一实施例中,还提供一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法实施例所述方法的步骤。
在本发明的又一实施例中,还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行方法实施例所述方法。
本发明实施例所提供的基于模型检查的嵌入式终端软件代码漏洞检测方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
在本实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本实施例的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。

Claims (9)

1.一种基于模型检查的嵌入式终端软件代码漏洞检测方法,其特征在于,包括:
获取目标嵌入式终端软件的待检测代码和用户配置文件;
对所述待检测代码进行语法分析,得到抽象语法树;
基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并进行数据流分析,得到处理后的抽象语法树;
对所述处理后的抽象语法树进行检查,得到检查结果;其中,所述检查结果用以生成待检测代码的漏洞检测分析报告;
基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树包括:
对所述用户配置文件进行解析,并利用解析后的用户配置文件对所述抽象语法树中的底层输入/输出端口代码进行识别;
确定识别出的所述抽象语法树中的底层输入/输出端口代码的读写操作类型;
若所述读写操作类型为读取操作,则将所述底层输入/输出端口代码中的读取语句替换为赋值语句;
将包含所述赋值语句的抽象语法树确定为处理后的抽象语法树。
2.根据权利要求1所述的方法,其特征在于,所述对所述待检测代码进行语法分析,得到抽象语法树,包括:
若所述待检测代码中存在汇编代码,则对所述汇编代码进行汇编处理,得到处理后的汇编代码;对所述处理后的汇编代码进行语法分析,得到抽象语法树;
若所述待检测代码中不存在汇编代码,则对所述待检测代码进行语法分析,得到抽象语法树。
3.根据权利要求2所述的方法,其特征在于,所述汇编处理包括转换处理,所述转换处理为将所述汇编代码转换成中间语言代码;
对所述汇编代码进行汇编处理,得到处理后的汇编代码包括:
获取所述汇编代码中输入参数和/或输出参数的存在信息;
基于所述汇编代码中输入参数和/或输出参数的存在信息,对所述汇编代码进行转换处理,得到所述中间语言代码;
将所述中间语言确定为处理后的汇编代码。
4.根据权利要求3所述的方法,其特征在于,基于所述汇编代码中输入参数和/或输出参数的存在信息,对所述汇编代码进行转换处理,得到所述中间语言代码包括:
当所述汇编代码中输入参数和输出参数的存在信息均为存在,存在数量均为一个时,基于第一汇编代码类型将所述汇编代码转换处理成第一中间语言形式的中间语言代码;其中,所述第一中间语言形式为z:=opx,z为所述汇编代码的输出参数,:=为赋值操作,op为所述汇编代码表示的操作,x为所述汇编代码的输入参数;
当所述汇编代码中输入参数和输出参数的存在信息均为存在,所述输入参数存在数量为多个时,基于第二汇编代码类型将所述汇编代码转换处理成第二中间语言形式的中间语言代码;其中,所述第二中间语言形式为z:=xopy,y为所述汇编代码中不同于x的输入参数;
当所述汇编代码中输入参数的存在信息为不存在,所述输出参数的存在信息为存在时,基于第三汇编代码类型将所述汇编代码进行转换处理成第三中间语言形式的中间语言代码;其中,所述第三中间语言形式为z:=INNER,INNER表示常量。
5.根据权利要求2所述的方法,其特征在于,在对所述汇编代码进行汇编处理之前,包括:
对所述待检测代码进行预处理,得到预处理后的待检测代码;其中,所述预处理包括以下至少之一:去除空格操作,去除注释操作,头文件处理,宏定义处理;
对预处理后的待检测代码进行词法分析,识别出所述汇编代码。
6.根据权利要求5所述的方法,其特征在于,对预处理后的待检测代码进行词法分析,识别出所述汇编代码包括:
对所述预处理后的待检测代码进行分词处理,得到分词序列;
若所述分词序列的类型为源文件类型,则将所述分词序列确定为所述汇编代码。
7.一种基于模型检查的嵌入式终端软件代码漏洞检测装置,其特征在于,包括:
获取模块,用于获取目标嵌入式终端软件的待检测代码和用户配置文件;
语法分析模块,用于对所述待检测代码进行语法分析,得到抽象语法树;
识别处理模块,基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并进行数据流分析,得到处理后的抽象语法树;
检查模块,用于对所述处理后的抽象语法树进行检查,得到检查结果;其中,所述检查结果用以生成待检测代码的漏洞检测分析报告;
基于所述用户配置文件,对所述抽象语法树中的底层输入/输出端口代码进行识别并处理,得到处理后的抽象语法树包括:
对所述用户配置文件进行解析,并利用解析后的用户配置文件对所述抽象语法树中的底层输入/输出端口代码进行识别;
确定识别出的所述抽象语法树中的底层输入/输出端口代码的读写操作类型;
若所述读写操作类型为读取操作,则将所述底层输入/输出端口代码中的读取语句替换为赋值语句;
将包含所述赋值语句的抽象语法树确定为处理后的抽象语法树。
8.一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,处理器执行计算机程序时实现如权利要求1至6任一项所述的方法。
9.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行如权利要求1至6任一项所述的方法。
CN202010318423.3A 2020-04-21 2020-04-21 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置 Active CN111552968B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010318423.3A CN111552968B (zh) 2020-04-21 2020-04-21 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010318423.3A CN111552968B (zh) 2020-04-21 2020-04-21 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置

Publications (2)

Publication Number Publication Date
CN111552968A CN111552968A (zh) 2020-08-18
CN111552968B true CN111552968B (zh) 2023-06-13

Family

ID=72004220

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010318423.3A Active CN111552968B (zh) 2020-04-21 2020-04-21 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置

Country Status (1)

Country Link
CN (1) CN111552968B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112632563B (zh) * 2020-12-29 2023-11-21 北京梆梆安全科技有限公司 一种漏洞检测方法、装置、存储介质及电子设备
CN113434938B (zh) * 2021-06-29 2024-02-13 广联达科技股份有限公司 Bim模型的检查方法、装置、计算机设备及存储介质
CN116049835B (zh) * 2023-03-08 2023-06-23 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109918294A (zh) * 2019-01-29 2019-06-21 刘建鹏 一种混源软件自主可控性检测方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109918294A (zh) * 2019-01-29 2019-06-21 刘建鹏 一种混源软件自主可控性检测方法及系统

Also Published As

Publication number Publication date
CN111552968A (zh) 2020-08-18

Similar Documents

Publication Publication Date Title
CN111552968B (zh) 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置
CN102339252B (zh) 基于xml中间模型以及缺陷模式匹配的静态检测系统
US9747190B2 (en) Analysis system, analysis method, and computer program product
US8881300B2 (en) Automated detection of flaws and incompatibility problems in information flow downgraders
US8635602B2 (en) Verification of information-flow downgraders
CN103853650A (zh) 一种模糊测试的测试用例生成方法及装置
Yamaguchi Pattern-based vulnerability discovery
Avancini et al. Comparison and integration of genetic algorithms and dynamic symbolic execution for security testing of cross-site scripting vulnerabilities
Zhang et al. Static detection of silent misconfigurations with deep interaction analysis
CN114911711A (zh) 一种代码缺陷分析方法、装置、电子设备及存储介质
CN110162474B (zh) 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110287700A (zh) 一种iOS应用安全分析方法及装置
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统
CN115828264A (zh) 智能合约漏洞检测方法、系统及电子设备
Gonnella TextFormats: Simplifying the definition and parsing of text formats in bioinformatics
Cowger et al. Icarus: Understanding de facto formats by way of feathers and wax
CN116028495A (zh) 智能合约的检测方法及装置
US8819645B2 (en) Application analysis device
CN115150483A (zh) 一种网络数据包解析方法、系统及可读存储介质
CN113946826A (zh) 一种漏洞指纹静默分析监测的方法、系统、设备和介质
CN114895914A (zh) 日志输出代码的生成方法、装置、电子设备及存储介质
WO2023101574A1 (en) Method and system for static analysis of binary executable code
CN114186233A (zh) 代码的反混淆方法、装置、电子设备及存储介质
CN111753295A (zh) 一种基于漏洞利用程序特征的漏洞利用程序检测方法
CN112231212A (zh) 一种检测程序代码语法错误的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant