CN112464237B - 一种静态代码安全诊断方法及装置 - Google Patents

一种静态代码安全诊断方法及装置 Download PDF

Info

Publication number
CN112464237B
CN112464237B CN202011354859.4A CN202011354859A CN112464237B CN 112464237 B CN112464237 B CN 112464237B CN 202011354859 A CN202011354859 A CN 202011354859A CN 112464237 B CN112464237 B CN 112464237B
Authority
CN
China
Prior art keywords
word
vulnerability
code
analysis
static
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
CN202011354859.4A
Other languages
English (en)
Other versions
CN112464237A (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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202011354859.4A priority Critical patent/CN112464237B/zh
Publication of CN112464237A publication Critical patent/CN112464237A/zh
Application granted granted Critical
Publication of CN112464237B publication Critical patent/CN112464237B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Computation (AREA)
  • Evolutionary Biology (AREA)
  • Computing Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Virology (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供的静态代码安全诊断方法及装置,本发明可用于信息安全技术领域,通过获取待诊断程序的静态代码;对每个分词进行词法分析,得到分词符号表;根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。本发明基于文本分析技术,构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,在无需开发人员手动进行的情况下,获取应用代码的安全指标情况和以及更为细粒度的漏洞描述,具体的漏洞详细信息和漏洞整改方案,获取的数据可以进行漏洞整体数据分析和数据挖掘,不需要再通过人工去进行安全代码漏洞测试的检验和分析。

Description

一种静态代码安全诊断方法及装置
技术领域
本发明涉及安全诊断技术领域,具体涉及一种静态代码安全诊断方法及装置。
背景技术
在高速发展的互联网业务时代。各项目组采用敏捷、迭代等开发方法保证开发效率,在这种快速上线快速交付的模式下,如何使用高效的测试方法保证项目中的安全测试环节,缩短项目测试周期显得尤为重要。目前对Java web应用进行安全测试存在多种常规方法,如使用AppScan工具进行黑盒扫描,以及使用一些渗透测试工具例如Nessus,通过篡改请求等对数据进行安全分析。但无一例外的,都属于项目编码阶段完成后进行的安全检查,但是越是项目开发早期发现的安全问题,越是能较早修复,并且修复成本便越低。而上述方法都需要测试人员手动进行应用链接爬取,以及对发起请求进行某种改造,但是由于发起请求改造同时可能会对系统造成某种不可逆的伤害,例如系统宕机,数据库持久化数据被删除,影响到正常的功能/流程/性能测试等,这无疑对测试人员造成了很大负担,测试时间大大增加;同时开发进行问题修复后,测试人员需要再次去迭代测试,测试成本大大提高。如何在尽快降低程序安全错误的修复成本,缩短项目安全测试周期的目标下,无感知且高效精准的安全测试并自动化预测分析安全问题,进行高效的安全测试是一个亟待解决的问题。
发明内容
针对现有技术中的问题,本发明实施例提供一种静态代码安全诊断方法及装置,能够至少部分地解决现有技术中存在的问题。
一个方面,本发明提供一种静态代码安全诊断方法,包括:
获取待诊断程序的静态代码;所述静态代码包括多个分词;
对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
在优选的实施例中,所述对每个分词进行词法分析,得到分词符号表,包括:
根据所述分词构建每个条目对应的词素;
根据每个词素从静态代码中分离出对应的分词,每个词素对应的分词共同组成单词流;
利用词法分析器分析各个分词的语法组成,得到各分词的语法树;
根据所述单词流和所述语法树生成所述分词符号表。
在优选的实施例中,所述根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,包括:
分别将每个条目下的所述分词输入至已搭建的二分类器模型;
若所述二分类器输出是,则该分词为所述漏洞分词;其中所述二分类器是通过训练集训练得到。
在优选的实施例中,所述根据所述分词构建每个条目对应的词素,包括:
根据所述分词确定语言的词法单元,构造语法单元的模式代码,所述模式代码包括所述语法单元的词素的所有可能形式。
在优选的实施例中,还包括:
基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词。
在优选的实施例中,所述基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词,包括如下步骤中的至少一个:
基于无效注入模型对SQL注入模型进行优化,剔除不存在于servlet中的漏洞分词;
基于Sql校验模型对漏洞分词进行分析,检测其#{}标识的变量种类,剔除代码控制的变量;
基于邮箱敏感信息泄露模型对漏洞分词中的邮箱敏感信息进行二次判断,若所述邮箱敏感信息为原始框架库中自有的信息,则优化原始结果。
在优选的实施例中,还包括:基于深度学习分析模型对安全问题进行特征分析,得到安全结果。
另一方面,本发明提供一种静态代码安全诊断装置,包括:
静态代码获取模块,获取待诊断程序的静态代码;所述静态代码包括多个分词;
词法分析模块,对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
漏洞检测模块,根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
再一方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述静态代码安全诊断方法的步骤。
又一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述静态代码安全诊断方法的步骤。
本发明实施例提供的静态代码安全诊断方法及装置,通过获取待诊断程序的静态代码;所述静态代码包括多个分词;对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。本发明基于文本分析技术,构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,在无需开发人员手动进行的情况下,获取应用代码的安全指标情况和以及更为细粒度的漏洞描述,具体的漏洞详细信息和漏洞整改方案,获取的数据可以进行漏洞整体数据分析和数据挖掘,不需要再通过人工去进行安全代码漏洞测试的检验和分析。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出本发明实施例中一种静态代码安全诊断方法的流程示意图。
图2示出本发明实施例中虚拟装置:安全自动化配置定义装置的虚拟结构示意图。
图3示出本发明实施例中虚拟装置:智能安全分析装置的虚拟结构示意图。
图4示出本发明实施例中场景中的应用方法流程示意图。
图5示出本发明实施例中静态代码安全诊断装置的结构示意图。
图6示出本发明实施例中实现本发明方法步骤的电子设备结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1是本发明实施例中一种静态代码安全诊断方法的流程示意图,如图1所示,包括:
S1:获取待诊断程序的静态代码;所述静态代码包括多个分词;
S2:对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
S3:根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
本发明实施例提供的静态代码安全诊断方法,通过获取待诊断程序的静态代码;所述静态代码包括多个分词;对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。本发明基于文本分析技术,构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,在无需开发人员手动进行的情况下,获取应用代码的安全指标情况和以及更为细粒度的漏洞描述,具体的漏洞详细信息和漏洞整改方案,获取的数据可以进行漏洞整体数据分析和数据挖掘,不需要再通过人工去进行安全代码漏洞测试的检验和分析。
需要说明的是,本发明可用于信息安全技术领域,当然也可用于其他类似技术领域,本发明不限于此。
下面对本发明进行详细说明。
本方案利用词法分析、源程序的读入、静态代码的词法安全设计与识别,符号表的设计,基于FastText的文本分析方法,安全静态扫描引擎实现了web应用静态安全性监控的基本框架:包括了静态安全,例如服务器配置异常,sql注入,servlet异常调用栈抛出,注释敏感信息泄露,使用不安全的加密算法,代码复杂度过高等造等方面的测试,还包括更为细粒度的敏感信息泄露以及漏洞整改建议。
在一些实施例中,所述对每个分词进行词法分析,得到分词符号表,包括:
根据所述分词构建每个条目对应的词素;
根据每个词素从静态代码中分离出对应的分词,每个词素对应的分词共同组成单词流;
利用词法分析器分析各个分词的语法组成,得到各分词的语法树;
根据所述单词流和所述语法树生成所述分词符号表。
具体的,词法分析主要步骤是:读入源程序的输入字符,将它组成词素,生成并输出一个语法单元序列;过滤掉源程序的注释和空白;将编译器生成的错误消息和源程序的位置关联起来等。处理完成的从语法单元序列用于后续利用。
其中构造词法分析器主要目的是:找出语言的词法单元,构造词法单元的模式,编写识别词法单元模式的代码。一个词法单元的词素可能具有的形式称为该词法单元的模式。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。源程序的读入主要是通过分析编程语言的特征,编程语言的指令或者伪指令一般都占源程序中的一行,根据这个特点,静态代码的翻译一般是以行为单位。词法分析器一次读入多行到缓冲区,然后以行为单位进行分析。
静态代码的词法安全设计与识别则目的是:利用词法分析器进行静态代码的语法组成静态分析,静态代码的词法安全设计与识别,主要是对程序进行文本识别与词法分析,渗入了其他各个步骤中。例如针对入口函数public static void main(){}进行静态代码的词法安全识别会得到一个public,static,void,main,(,)的词法树。
静态检测的核心是利用基于FastText的文本分析方法,静态检测输入源代码文本数据,然后进行文本分析,最后得到结果。
在一些实施例中,词法树的作用是进一步生成符合表,而后面的基于FastText的文本分析则主要是对符号表的处理和诊断。例如如下代码:
而符号表是一种保存有关源程序构造的各种信息的数据结构,例如下所示:
静态代码通过使用符号表来记录ID和KEYWORD类型的词素的信息。符号表的每一个条目信息包括词素的标识,词素表示的值,词素的类型,除此之外,还有一些辅助信息,如源程序中引用该词素的行号是否定义等。因此可以根据数据模型进行代码符号表的建立。
基于上述实施例可以看出,所述根据所述分词构建每个条目对应的词素,包括:
根据所述分词确定语言的词法单元,构造语法单元的模式代码,所述模式代码包括所述语法单元的词素的所有可能形式。
基于FastText的文本分析主要是,由于有漏洞的代码在整体代码中的占有率相对不高,因此识别出的准确率和召回率都不高。为了解决数据不平衡的问题,文章采用了数据增强的方法对正样例进行扩充。对每个样本都使用FastText进行训练,得到了一个二分类器。通过这种方式即解决了数据不平衡的弊端,提高了存在漏洞代码这一少数类的特征捕获概率。课题组构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,同时因为数据集有限的原因,采用了NASA的公开数据集NASA MDP构建了基于FastText的分类器。本方案主要利用词法分析器,对静态代码进行词法分析,得到代码对应的符号表,同时因为数据集有限的原因,采用了NASA的公开数据集NASA MDP构建了基于FastText的分类器。
因为目前获取到的训练数据集漏洞不够齐全,因此进行了数据扩充。采用基于规则学习的方式进行了数据集改造。
FastText模型可以实现对文本的二分类器,同时也可以实现文本的多分类,在输入的训练集和测试集的标签__label__标签中,label代表了文本属于哪种分类类型,后期有相对应的数据集,如静态代码中存在sql注入问题,则可以添加__sql__标签,代表该数据是存在sql注入漏洞的数据,通过给不同类型的存在漏洞的静态代码数据打上对应的标签,即可实现一个针对静态代码漏洞的多分类器。
其中输入:训练集和测试集,训练集中的数据和测试集的数据的比例大约是10:1,通过大量的训练集,可以使分类器更好的学习,最终得到一个二分类器。
输出:
分类器最后判别测试集,得到分类结果。
数据如下:
训练结果如下:采用了NASA的公开数据集NASA MDP构建了基于FastText的分类器,通过训练得到了如下所示的一个识别代码中是否有漏洞准确率达到83.85%的模型。
本发明提供的一种基于流量回放技术的程序安全智能监控方法,主要包括如下步骤:
步骤1):安全配置服务存储应用代码安全配置,支持应用版本,应用名称,应用代码分支名,代码仓库地址。源代码读入,可以通过拉取代码仓库源代码,文本分析,建立代码的符号表,然后进行自动静态安全诊断。
步骤2):智能安全测试装置,在步骤1)中完成采集,数据获取,通过装置传进行安全静态规则攻击,并进行自动安全静态测试,并存储到数据库中形成初步诊断结果。
步骤3):智能安全分析装置,在步骤2)中完成后,根据专家模型分析装置,通过装置对步骤3)的结果进行分析,并智能化修正,最终生成低误报率的监控结果,获取留存安全测试报告。
下面将对照附图,并且对每个步骤的执行主体进行虚拟装置化后对本发明的系统及方法进行详细说明,需要理解,本发明下述的虚拟装置是针对具体实施例而划分的,在其他实施例中,也可以有其他方式的划分,虚拟装置实质仅仅是实现对应步骤的虚拟主体,例如一台电脑可以同时作为多个虚拟装置,或者在不同实施例中可以同时存在多种虚拟装置模块的划分,本发明不限于此。在本发明的系统结构图中,本发明提出一种基于机器学习的静态代码安全程序安全诊断装置,包括:安全代码配置定义装置1、智能安全测试装置2、智能安全分析装置3。安全代码配置定义装置1与智能安全测试装置2相连;智能安全测试装置2与智能安全分析装置3相连,智能安全分析装置3与安全代码配置定义装置1相连。
可以理解,本发明中,测试是利用内置方法对元输出程序进行原始测试执行,分析是对测试的结果和产出数据进行确认和处理。
安全代码配置定义装置1:负责收集WEB应用代码的详细数据。将web应用的代码数据按照应用名和版本进行登记录入,用于用户录入应用名称,应用版本、应用分支名称以及应用代码仓库地址等。登记成功后,这些数据会传送给SERVER端。该配置会持久化到数据库中。
智能安全测试装置2:具体测试装置。获取代码配置定义信息,形成数据获取脚本。其中包括应用名称,应用版本,应用分支名称,以及应用代码仓库地址等配置信息,并获取相关数据信息。然后根据数据信息进行代码获取,应用自动数据获取,前面流程结束后根据配置信息进行监控准备,利用建立好的词法分析器,对静态代码进行词法分析,得到代码对应的符号表,同时采用了NASA的公开数据集NASA MDP构建了基于FastText的分类器,根据分类器对代码发起静态安全诊断,如上所述。
可以看出,所述根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,包括:
分别将每个条目下的所述分词输入至已搭建的二分类器模型;
若所述二分类器输出是,则该分词为所述漏洞分词;其中所述二分类器是通过训练集训练得到。
智能安全分析装置3:搭建诊断自优化模块,根据搭建好的专家修正模型,对智能安全测试装置2安全监控的结果进行再诊断及结果修正。
进一步的,本领域技术人员可以总结:本发明的方法还包括:
基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词。
图2是安全代码配置定义装置1内部结构图,安全代码配置定义装主要是为了进行和用户的交互,完成初始数据的采集。用户需使用该装置进行代码配置,诊断结果查询和获取。如图2所示,所述用安全代码配置定义装置1数据配置单元11、数据展示单元12,其中:
数据配置单元11说明如下:测试人员将web应用的代码信息数据按照应用名和版本进行登记录入,登记成功后,这些数据会传送给智能安全测试装置端,这些数据包括应用名称、应用版本、应用代码分支名称、代码仓库地址、配置人员,是否接受定时静态代码检查以及设置检查频率等。
该实施例中,安全代码配置定义装主要是为了进行和用户的交互,完成初始数据的采集。用户需使用该装置进行代码配置,诊断结果查询和获取。
数据展示单元12说明如下:在智能安全分析装置3进行安全监控完成之后,数据展示单元12将进行web应用安全监控结果的展示,使用者通过浏览器端访问安全监控模块前端的方式来接入安全代码配置定义装置1。
智能安全测试装置2包括:数据接收组件、数据处理组件、数据存储组件、数据分析组件。
数据接收组件:接收BROWSER端的数据,进行序列化。采用TCP的网络通讯方式,按JSON格式进行数据的反序列化。
数据处理组件:进行核心数据处理。
数据存储组件:将数据存储持久化数据到mysql中。
数据分析组件:根据各种数据分析模型,从数据中挖掘信息,提前预测问题,具体的,测试装置测试完成之后,测试数据会持久化存储到数据库mysql中,分析装置会进行进一步分析确认,深度学习模型根据长期运行后采集到数据库中存储的多维漏洞数据,进行智能漏洞模型搭建,深度学习模型输入数据库中的各种漏洞种类,漏洞代码特征,修改方案等数据,输出准确的漏洞模型,代码优化模型,以及预测新型漏洞。
数据接收模块通过与BROWSER端连接接收来自浏览器端各个应用的源代码数据,然后根据从browser端获取的给定的代码要素,包括应用名、版本信息、代码分支名称等应用代码扫描模块的配置信息。获取mysql的数据库连接池,将格式化的数据放到mysql中进行持久化存储。
数据处理组件说明如下:SERVER端会通过与BROWSER端连接,对应用代码数据信息进行收集。并结合浏览器访问技术进行进一步的数据展示。采用内嵌的包涵静态安全扫描向量的安全诊断引擎,在获取到应用代码环境信息之后,从代码仓库进行代码拉取,采用迭代遍历的方式去处理源代码数据,采用静态遍历方式解析拉取的结果,并形成代码树结构,确保能静态扫描到源程序的所有分支。
数据存储组件说明如下:利用引入的安全向量静态安全扫描引擎,采用词法分析、源程序的读入、静态代码的词法安全设计与识别,符号表的设计,基于FastText的文本分析方法,搭建应用特色的规则矢量库,对web应用数据获取模块的结果数据进行诊断监控。通过发动规则库的执行,对应用的代码数据进行监控,同时web应用安全监控功能涵盖的静态向量较为全面,涵盖了业界owasp top10漏洞,并包含了sql注入中包涵基于时间的盲注,基于布尔的盲注等,密码邮箱等敏感信息模型,servlet中抛出程序调用栈等,以及注释中泄露秘钥等攻击规则库。通过这些规则库,可以进行应用代码安全漏洞的初步诊断,并将所有数据持久化存储到数据库中。
数据分析组件说明如下:数据处理模块完成之后,需要有数据分析组件进行处理,判断web应用代码是否含有漏洞,搭建了一些常用的数据分析模型,比如匹配规则返回结果和扫描规则的攻击向量,一旦匹配则存在漏洞。并对应用返回结果于规则矢量匹配逻辑来监控,例如根据扫描规则检测mybatis组件搭建的应用,如果出现${}标识的变量,由于$是字符串替换,MyBatis在处理${}时,它会将sql中的${}替换为变量的值,传入的数据不会加两边加上单引号,即说明应用代码可能出现sql注入漏洞。并且结合架构进行了白名单模块的搭建,白名单分为系统级白名单和应用级白名单,系统支持把一些由于引入公共框架导致的安全漏洞加入白名单。
智能安全分析装置3搭建诊断自优化模块,参见图3本方案的智能安全分析装置端的内部结构图。专家模型分析模块41,修正模型安全分析,2、修正模型安全展示43、深度学习分析模型44。
具体的,专家修正模型分析模块41在运营期间,针对诊断出的问题,一些异常情况导致的误报进行模型修正,例如检测到代码中存在sql拼接,但是通过检测发现该sql参数并没有与用户交互,那么该问题进行专家修正为非有效问题,深度学习模型是在专家修正模型以及日常运行发现问题的基础上,进行智能化模型优化,更准确,更智能的对系统漏洞进行预测;也可以利用现有漏洞抽象出漏洞模型,预测出新型漏洞,并给出整改建议。
修正模型安全分析42:对收集的安全数据进行修正,从SERVER端获取应用代码静态监控结果数据,搭建有效问题过滤模型,此模型为简单模型,利用该模型对该诊断结果进行二次诊断,比如诊断结果中包涵#{}变量的数据并没有出现在servlet调用逻辑中,那么默认该次诊断为误报;诊断结果中#{}标注的变量为程序代码指定,为不可变的,是存在于不与用户交互的后台程序中,默认为误报;诊断结果为存在邮箱敏感信息泄露漏洞,经过判断发现泄露的邮箱为引入的公共框架例如vue,nodejs等源码中的默认信息,则判定该诊断为误诊断。经过优化模型筛选,应该不予在BROWSER端进行展示。
在一些实施例中,本发明的方法步骤基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词,包括如下步骤中的至少一个:
基于无效注入模型对SQL注入模型进行优化,剔除不存在于servlet中的漏洞分词;
基于Sql校验模型对漏洞分词进行分析,检测其#{}标识的变量种类,剔除代码控制的变量;
基于邮箱敏感信息泄露模型对漏洞分词中的邮箱敏感信息进行二次判断,若所述邮箱敏感信息为原始框架库中自有的信息,则优化原始结果。
具体的,主要使用的模型如下:
编号模型名称配置信息说明
1无效注入模型通过分析诊断结果中的具体漏洞,对sql注入模型进行优化,剔除掉#{}不存在于servlet中的漏洞。
2Sql校验模型对漏洞进行分析,当检测其#{}标识的变量为直接代码控制的变量,不为用户输入的变量,需进行筛选剔除。
3邮箱敏感信息泄露模型对诊断中代码中的邮箱敏感信息,进行二次判断,搭建日常框架库,如果发现是原始框架中自带的邮箱等信息,那么对原始结果进行优化。
修正模型安全展示43:对系统的各类安全数据进行收集。可以收集多维度的数据。这样形成了一个完整的安全视图。
编号漏洞模型名称漏洞信息说明
1漏洞代码信息涉及的具体漏洞代码信息,代码行数信息
2漏洞描述该漏洞的具体描述信息
3param对应的具体漏洞参数,涵盖sql注入,敏感信息、调用栈异常抛出,不安全的加密算法等规则矢量
4solution针对该漏洞的解决方案,从全局视角给出具体的解决方案
深度学习分析模型44:通过长时间的安全监控和数据收集,安全问题分析。我们可以获得很多具有价值的数据,工具运营者可以进行安全监控和收集,深度学习模型的目的是为了后续提升静态问题准确率、智能进行新型问题的挖掘、和智能进行问题修正意见指导。针对获取到的海量代码,方法,异常栈信息以及对应的漏洞信息,这些信息可以帮助我们形成智能预测分析模型。这里我们通过深度神经网络算法对数据进行挖掘和分析。通过挑选特征值的方法。首先将所有收集到的安全指标数据格式化作为特征值参数。将所有问题的结果进行分类。分为sql注入、敏感信息、不安全的加密算法等作为结果集,将海量的数据(去杂后,因为大多数情况下系统是正常的,去除长时间的正常数据才能使模型获得更好的特征学习)利用python的深度学习算法进行分析。可以得到一个安全问题,预测分析模型。通过深度学习算法,模型可以运用到分析海量的安全数据中,当下次在对特定应用进行安全监控的过程中,就通过训练好的模型算出对应的问题,给出智能的指导意见。可以很好的守护生产安全,且在人力和成本上大大降低投入。
如图4所示,本发明提供的请求处理流程方法,其步骤如下:
步骤S101:测试环境相关信息配置,启动浏览器访问。
步骤S102:安全监控装置开始启动。
步骤S103:安全配置装置开始进行任务配置,涵盖应用的版本信息,代码仓库地址等。
步骤S104:通过监控处理逻辑模型,形成待监控应用列表清单。
步骤S105:智能安全监控装置开始执行任务,主要包括代码数据获取,代码扫描规则树的建立,以及核心监控引擎构造规则进行扫描。
步骤S106:使用持续集成进行自动化调度。
步骤S107:智能安全分析装置3开始执行模型优化任务,并将执行结果在智能安全监控装置中进行展示。
可以看出,本发明使用基于FastText的文本分析技术,核心是构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,同时因为数据集有限的原因,采用了NASA的公开数据集NASA MDP构建了基于FastText的分类器,进行新一代静态代码自动化诊断方法,然后采用代码主动扫描引擎对应用代码进行智能扫描,并采用自建的诊断结果修正模型进行结果修正,有效降低误报率;使用jenkins持续集成模型进行每天定时化调度,并加入邮件推送模块,扫描完成之后,智能将扫描结果推送到开发人员/开发经理邮箱,极大降低安全测试门槛,在无需开发人员手动进行的情况下,获取应用代码的安全指标情况和以及更为细粒度的漏洞描述,具体的漏洞详细信息和漏洞整改方案,获取的数据可以进行漏洞整体数据分析和数据挖掘,不需要再通过人工去进行安全代码漏洞测试的检验和分析。通过程序可以智能的检测安全问题,相比目前常用的安全自动化测试的各种常规方案,不仅能较早获取到更多维度的安全测试数据,而且具备智能分析无需人工作业,去人力且高效的优势。
基于相同的发明构思,另一方面,本发明提供一种静态代码安全诊断装置,如图5,包括:
静态代码获取模块51,获取待诊断程序的静态代码;所述静态代码包括多个分词;
词法分析模块52,对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
漏洞检测模块53,根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
本发明实施例提供的静态代码安全诊断装置,通过获取待诊断程序的静态代码;所述静态代码包括多个分词;对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。本发明基于文本分析技术,构建了词法分析器,对静态代码进行词法分析,得到代码对应的符号表,在无需开发人员手动进行的情况下,获取应用代码的安全指标情况和以及更为细粒度的漏洞描述,具体的漏洞详细信息和漏洞整改方案,获取的数据可以进行漏洞整体数据分析和数据挖掘,不需要再通过人工去进行安全代码漏洞测试的检验和分析。
图6是本发明又一个实施例提供的电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)1201、通信接口(Communications Interface)1202、存储器(memory)1203和通信总线1204,其中,处理器1201,通信接口1202,存储器1203通过通信总线1204完成相互间的通信。处理器1201可以调用存储器1203中的逻辑指令,以执行如下方法:
S1:获取待诊断程序的静态代码;所述静态代码包括多个分词;
S2:对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
S3:根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
此外,上述的存储器1203中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:
S1:获取待诊断程序的静态代码;所述静态代码包括多个分词;
S2:对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
S3:根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:
S1:获取待诊断程序的静态代码;所述静态代码包括多个分词;
S2:对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
S3:根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种静态代码安全诊断方法,其特征在于,包括:
获取待诊断程序的静态代码;所述静态代码包括多个分词;
对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码;
其中,所述对每个分词进行词法分析,得到分词符号表,包括:
根据所述分词构建每个条目对应的词素;
根据每个词素从静态代码中分离出对应的分词,每个词素对应的分词共同组成单词流;
利用词法分析器分析各个分词的语法组成,得到各分词的语法树;
根据所述单词流和所述语法树生成所述分词符号表;
所述根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,包括:
分别将每个条目下的所述分词输入至已搭建的二分类器;
若所述二分类器输出是,则该分词为所述漏洞分词;其中所述二分类器是通过训练集训练得到。
2.根据权利要求1所述的静态代码安全诊断方法,其特征在于,所述根据所述分词构建每个条目对应的词素,包括:
根据所述分词确定语言的词法单元,构造语法单元的模式代码,所述模式代码包括所述语法单元的词素的所有可能形式。
3.根据权利要求2所述的静态代码安全诊断方法,其特征在于,还包括:
基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词。
4.根据权利要求3所述的静态代码安全诊断方法,其特征在于,基于至少一个修正模型对所述漏洞代码进行修正,去除所述漏洞代码中误报的漏洞分词,包括如下步骤中的至少一个:
基于无效注入模型对SQL注入模型进行优化,剔除不存在于servlet中的漏洞分词;
基于Sql校验模型对漏洞分词进行分析,检测其#{}标识的变量种类,剔除代码控制的变量;
基于邮箱敏感信息泄露模型对漏洞分词中的邮箱敏感信息进行二次判断,若所述邮箱敏感信息为原始框架库中自有的信息,则优化原始结果。
5.根据权利要求2所述的静态代码安全诊断方法,其特征在于,还包括:基于深度学习分析模型对安全问题进行特征分析,得到安全结果。
6.一种静态代码安全诊断装置,其特征在于,包括:
静态代码获取模块,获取待诊断程序的静态代码;所述静态代码包括多个分词;
词法分析模块,对每个分词进行词法分析,得到分词符号表;所述分词符号表的每个条目包括对应分词的特征信息;
漏洞检测模块,根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,进而诊断出漏洞代码;
其中,所述对每个分词进行词法分析,得到分词符号表,包括:
根据所述分词构建每个条目对应的词素;
根据每个词素从静态代码中分离出对应的分词,每个词素对应的分词共同组成单词流;
利用词法分析器分析各个分词的语法组成,得到各分词的语法树;
根据所述单词流和所述语法树生成所述分词符号表;
所述根据每个分词的特征信息对每个条目下的分词进行漏洞检测,确定每个条目下的漏洞分词,包括:
分别将每个条目下的所述分词输入至已搭建的二分类器;
若所述二分类器输出是,则该分词为所述漏洞分词;其中所述二分类器是通过训练集训练得到。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5任一项所述方法的步骤。
CN202011354859.4A 2020-11-26 2020-11-26 一种静态代码安全诊断方法及装置 Active CN112464237B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011354859.4A CN112464237B (zh) 2020-11-26 2020-11-26 一种静态代码安全诊断方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011354859.4A CN112464237B (zh) 2020-11-26 2020-11-26 一种静态代码安全诊断方法及装置

Publications (2)

Publication Number Publication Date
CN112464237A CN112464237A (zh) 2021-03-09
CN112464237B true CN112464237B (zh) 2023-10-31

Family

ID=74808893

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011354859.4A Active CN112464237B (zh) 2020-11-26 2020-11-26 一种静态代码安全诊断方法及装置

Country Status (1)

Country Link
CN (1) CN112464237B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112948263A (zh) * 2021-03-30 2021-06-11 建信金融科技有限责任公司 安全测试方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置
CN104462981A (zh) * 2013-09-12 2015-03-25 深圳市腾讯计算机系统有限公司 漏洞检测方法及装置
CN108763931A (zh) * 2018-05-28 2018-11-06 上海交通大学 基于Bi-LSTM和文本相似性的漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置
CN104462981A (zh) * 2013-09-12 2015-03-25 深圳市腾讯计算机系统有限公司 漏洞检测方法及装置
CN108763931A (zh) * 2018-05-28 2018-11-06 上海交通大学 基于Bi-LSTM和文本相似性的漏洞检测方法

Also Published As

Publication number Publication date
CN112464237A (zh) 2021-03-09

Similar Documents

Publication Publication Date Title
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
EP3695310A1 (en) Blackbox matching engine
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
CN113821804B (zh) 一种面向第三方组件及其安全风险的跨架构自动化检测方法与系统
US11307975B2 (en) Machine code analysis for identifying software defects
CN115952503B (zh) 融合黑白灰安全检测技术的应用安全测试方法及系统
US10365995B2 (en) Composing future application tests including test action data
CN113157565B (zh) 一种基于种子用例突变的反馈式js引擎模糊测试方法及装置
CN113271237A (zh) 工控协议的解析方法、装置、存储介质及处理器
CN112115326B (zh) 一种以太坊智能合约的多标签分类和漏洞检测方法
CN105630656A (zh) 基于日志模型的系统健壮性分析方法及装置
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN114528457A (zh) Web指纹检测方法及相关设备
CN116361147A (zh) 测试用例根因定位方法及其装置、设备、介质、产品
CN112464237B (zh) 一种静态代码安全诊断方法及装置
CN111177731A (zh) 一种基于人工神经网络的软件源代码漏洞检测方法
CN113468524B (zh) 基于rasp的机器学习模型安全检测方法
CN116821903A (zh) 检测规则确定及恶意二进制文件检测方法、设备及介质
Amankwah et al. Fast bug detection algorithm for identifying potential vulnerabilities in juliet test cases
CN112433947A (zh) 一种基于网络数据的混沌工程方法及系统
CN112698883A (zh) 一种配置数据处理方法、装置、终端和存储介质
Piancó et al. Code change history and software vulnerabilities
JP7501615B2 (ja) セキュリティ検査装置、セキュリティ検査方法、及びプログラム
CN116738440A (zh) 安全漏洞检测方法及装置
US20230134937A1 (en) Security inspection apparatus, security inspection method, and program

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