CN113297580B - 基于代码语义分析的电力信息系统安全防护方法及装置 - Google Patents
基于代码语义分析的电力信息系统安全防护方法及装置 Download PDFInfo
- Publication number
- CN113297580B CN113297580B CN202110539306.4A CN202110539306A CN113297580B CN 113297580 B CN113297580 B CN 113297580B CN 202110539306 A CN202110539306 A CN 202110539306A CN 113297580 B CN113297580 B CN 113297580B
- Authority
- CN
- China
- Prior art keywords
- analysis
- code
- tree
- node
- information
- 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
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 130
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000004422 calculation algorithm Methods 0.000 claims description 37
- 230000006399 behavior Effects 0.000 claims description 27
- 238000003066 decision tree Methods 0.000 claims description 25
- 230000008439 repair process Effects 0.000 claims description 25
- 239000002356 single layer Substances 0.000 claims description 25
- 239000013598 vector Substances 0.000 claims description 21
- 238000002347 injection Methods 0.000 claims description 15
- 239000007924 injection Substances 0.000 claims description 15
- 238000007781 pre-processing Methods 0.000 claims description 14
- 238000012360 testing method Methods 0.000 claims description 13
- 238000005065 mining Methods 0.000 claims description 11
- 238000013507 mapping Methods 0.000 claims description 10
- 238000012098 association analyses Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 238000001514 detection method Methods 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 9
- 230000037431 insertion Effects 0.000 claims description 9
- 238000010276 construction Methods 0.000 claims description 7
- 238000005192 partition Methods 0.000 claims description 5
- 238000012216 screening Methods 0.000 claims description 5
- 238000012163 sequencing technique Methods 0.000 claims description 5
- 238000009412 basement excavation Methods 0.000 claims description 4
- 238000012795 verification Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 14
- 238000012544 monitoring process Methods 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 18
- 238000012545 processing Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000002068 genetic effect Effects 0.000 description 5
- 230000009467 reduction Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000007123 defense Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 101100390771 Danio rerio fitm1l gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000010353 genetic engineering Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011946 reduction process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/243—Classification techniques relating to the number of classes
- G06F18/24323—Tree-organised classifiers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
- G06Q50/06—Electricity, gas or water supply
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Business, Economics & Management (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Tourism & Hospitality (AREA)
- Public Health (AREA)
- Water Supply & Treatment (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Human Resources & Organizations (AREA)
- Marketing (AREA)
- Primary Health Care (AREA)
- Strategic Management (AREA)
- Evolutionary Biology (AREA)
- General Business, Economics & Management (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提出了一种基于代码语义分析的电力信息系统安全防护方法及装置,所述方法包括:采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息;对采集的关键信息进行词法分析和语法分析,得到抽象语法树;根据预设的安全模型对预处理后的抽象语法树的代码逻辑进行判断检测,识别代码漏洞;根据漏洞攻击行为判定情况,对源代码进行语义修复。本发明以函数作为攻击监测的切入点,通过词法、语法等分析过程对SQL攻击的负载进行检测,对缺失语法进行补全。达到提前预估可能存在的漏洞并发出告警,对常见的漏洞进行修复,可以有效加强电力信息系统的安全防护,有效发现应用过程中安全漏洞,保证电网的信息安全。
Description
技术领域
本发明涉及信息安全应用领域,具体涉及一种基于代码语义分析的电力信息系统安全防护方法及装置。
背景技术
在电力应用领域,电力网络安全成为电网业务使命的重要基础性战略。Web是目前网络应用的主要载体,信息化的发展给电网的工作和电力用户都带来了极大的便利。但是在信息化的过程中,对电力网络安全的攻击也愈演愈烈。攻击者利用Web应用存在的漏洞进行相关数据的获取造成信息系统的破坏和电力网络安全事件频发,而每起安全事件都离不开代码数据泄露的威胁。
针对电网信息系统的传统安全防护方法作用于程序输入输出端,通过在输入和输出端使用数据流监测系统,实时对攻击行为进行告警和拦截,这种传统的方法能很好地防御Web攻击。但在互联网技术发展迅猛的今天,Web应用程序面临的威胁也在不断变化与升级。基于互联网衍生出来的云计算、大数据、物联网、移动计算等新技术与新模式,让Web应用程序的开发框架、运行环境、流量入口、服务器部署都发生了很大的变化,传统的Web数据流监测方法已不能应对日益严峻的网络安全态势,针对经变形混淆后绕过检测进入程序内部执行的恶意代码对电力信息系统的安全防护提出了更高的要求。同时电力企业目前采用内外网隔离的信息系统防御体系,仅仅通过内外网物理隔离装置、企业防火墙、流量规则防御工具方法只能进行边界安全防御,对于应用级别的安全防护无法满足。
发明内容
发明目的:针对现有技术的不足,本发明提供一种基于代码语义分析的电力信息系统安全防护方法,通过精细化的语义分析帮助提升运行态信息系统的自我保护能力。
本发明的另一目的是提供一种基于代码语义分析的电力信息系统安全防护装置。
技术方案:根据本发明的第一方面,提供一种基于代码语义分析的电力信息系统安全防护方法,包括以下步骤:
采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息;
对采集的关键信息进行词法分析和语法分析,得到抽象语法树;
根据预设的安全模型对预处理后得到的抽象语法树的代码逻辑进行判断检测,识别代码漏洞;
根据漏洞攻击行为判定情况,对源代码进行语义修复。
其中,采集信息通过基于Web应用程序的外部输入,采集电网信息系统的运行代码和相关的运行态信息,进行关键信息提取,形成用户请求信息文件,作为后续处理的输入。
对采集的关键信息进行词法分析和语法分析包括:词法分析器依次读取包含代码关键信息的用户请求信息文件中的字符,进行字符集合分析,按照预定的规则将字符合并成标记token,将整个用户请求信息文件分割进一个token列表,并选取当前Web解释器使用的分析器,提取解释器标准定义规则文件;语法分析器根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。
根据预设的安全模型对预处理后的抽象语法树的代码逻辑进行判断检测,识别代码漏洞包括:根据Adaboost算法得到最佳的单层决策树,再利用FP-growth算法基于所述最佳的单层决策树进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为。
进一步地,所述根据Adaboost算法得到最佳的单层决策树包括:
基于建立的常规抽象语法树,利用深度优先遍历进一步得到序列化AST;
对代码文件进行向量转化,所述代码文件指的是用户输入的经过预处理后的数据;
通过数字映射与填充、词嵌入方法获取代码的深层语义,实现代码的深度表示;
通过深度优先遍历方法遍历抽象语法树将其映射为向量,并通过构建映射的方式,将向量的元素转换为整数形式,该部分整数作为向量元素的唯一标识;
通过Adaboost算法得到一个最佳的单层决策树。
进一步地,所述利用FP-growth算法基于所述最佳的单层决策树进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为包括:
扫描电力信息系统中用户输入的经过预处理后的数据,得到所有频繁项集的的计数;
删除支持度低于阈值的项,将频繁项集放入项头表,并按照支持度降序排列;
将读到的用户输入的经过预处理后的数据剔除非频繁项集,并按照支持度降序排列,循环扫描信息,查找满足最小支持度的关联项集;
读入排序后的数据集,插入基于Adaboost算法得到的最佳的单层决策树,插入时按照排序后的顺序插入树中,其中排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1,插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点,直到所有的数据都插入到树中;
从项头表的底部项依次向上找到项头表项对应的条件模式基;
从条件模式基递归挖掘得到项头表项项的频繁项集;
如果不限制频繁项集的项数,则返回之前的所有的频繁项集,否则只返回满足项数要求的频繁项集;
筛选出其中最小支持度的关项集,最终达到所有关联项集都被挖掘出,得出关联规则,进行排序更新树,最终输出漏洞攻击行为的检测结果。
进一步地,对源代码进行语义修复包括:
从历史代码库中搜索与源程序相似的bug代码,并找到与其相关的修复代码;
将修复代码转换为抽象语法树,生成候选补丁;
使用基于给定测试用例的适应度函数来验证候选补丁是否有效;
根据通过验证的补丁生成输出补丁修复源错误代码。
根据本发明的第二方面,提供一种基于代码语义分析的电力信息系统安全防护装置,包括:
用于采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息采集模块;
用于对信息采集模块输出的关键信息进行词法分析和语法分析,得到抽象语法树的信息预处理模块;
用于根据预设的安全模型对预处理后得到的抽象语法树的代码逻辑进行判断检测,识别代码漏洞的语义分析模块;以及
用于根据漏洞攻击行为判定情况,对源代码进行语义修复的语义修复模块。
其中,信息采集模块通过基于Web应用程序的外部输入,采集电网信息系统的运行代码和相关的运行态信息,进行关键信息提取,形成用户请求信息文件,作为后续处理的输入。
信息预处理模块包括词法分析单元和语法分析单元,词法分析单元依次读取包含代码关键信息的用户请求信息文件中的字符,进行字符集合分析,按照预定的规则将字符合并成标记token,将整个用户请求信息文件分割进一个token列表,并选取当前Web解释器使用的分析器,提取解释器标准定义规则文件;语法分析单元根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。其中词法分析单元通过生成的Token完成了抽象语法树中的节点分类。抽象语法树通过自底向上的方式建立,先将词法单元建立对应的叶子节点,由词法单元叶子节点产生新的父节点,进行规约,直到起始单元,完成整颗语法树的建立。
所述语义分析模块包括第一分析模块,用于根据Adaboost算法得到最佳的单层决策树;所述语义分析模块还包括第二分析模块,用于通过FP-growth算法进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为。
有益效果:相对于现有技术,本发明具有以下有益效果:
1、本发明通过对Web环境中的输入信息和运行代码语义、语法和词法的检查分析,克服了现有的方法分析Web安全漏洞不全面的问题。
2、本发明综合考虑电网信息系统的运行态信息环境中产生的各种信息,通过语义分析模块提取这些代码信息中的关键数据,能够很好地考虑到信息系统运行环境中大多数的情况,解决了以往方法获取信息种类和数量以及代码数据不够丰富的问题。
3、本发明以函数作为攻击监测的切入点,深入Web应用程序源代码的逻辑,对电力信息系统的代码语义进行分析,通过词法、语法等分析过程对SQL攻击的Payload进行检测,对缺失的SQL语法进行补全。能够达到提前预估可能存在的漏洞并发出告警,对常见的漏洞进行修复的功能,可以有效加强电力信息系统的安全防护,有效发现应用过程中安全漏洞,为电网信息系统的安全防护提供支撑数据,使得电网信息系统遭遇黑客的猛烈攻击的时候提前做出应对,保证电网的信息安全。这种方法具有很好的适应性和成长性,可以考虑到代码级别多种因素的影响。
4、本发明利用AdaBoost算法与FP-growth算法构建语义分析模型,同时利用遗传算法构建代码修复机制有效实现代码语义分析及对运行代码的漏洞进行修复,从而实现对电网信息系统代码的bug进行有效修复,提升了电网信息系统运行的稳定性。
附图说明
图1是本发明的基于代码语义分析的电力信息系统安全防护方法流程图;
图2是本发明的对采集的信息进行预处理的流程图;
图3是本发明的对程序进行语义修复处理的流程图;
图4是本发明的的基于代码语义分析的电力信息系统安全防护装置结构框图。
具体实施方式
下面结合附图对本发明的技术方案做出进一步的说明。
参照图1,基于代码语义分析的电力信息系统安全防护方法,主要包括以下步骤:
预处理:对用户请求信息进行关键信息的提取,通过词法分析与语法分析结合,生成抽象语法树。根据语句前后token变化情况,判断该处是否存在SQL注入行为。
语义分析:检测是否存在SQL注入行为,依靠传统的正则匹配的方法,存在漏检情况。本阶段结合自定义完整的语义分析模型,结合上下文的逻辑进行判断用户行为是否造成程序逻辑发生变化,以此增加检测的准确性。
下面对各步骤的具体实施方法做出说明。
步骤(1),采集电网信息系统的运行代码和相关的运行态信息。
当Web应用程序向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。通过基于Web应用程序的外部输入,采集电网信息系统的运行代码和相关的运行态信息,进行关键信息提取,形成用户请求信息文件,作为后续处理的输入。
步骤(2),对输入信息进行预处理。
预处理主要利用词法分析和语法分析对接收的用户请求信息文件进行初步的分析。如用户输入一串带有SQL注入攻击的语句进入到电网运行代码中,将整个代码进行关键信息提取的结果到放入预处理器中。预处理包括词法分析和语法分析。词法分析器首先一个一个读取代码,进行字符集合分析,按照预定的规则合并成一个个的标识token。整个代码将被分割进一个token列表,最后将其格式化传入语法分析器中进行抽象语法树的节点整合,最终输出抽象语法树,以便对具有可能漏洞的信息进行定位。主要流程如图2所示。token是一个字符串,也是构成源代码的最小单位,从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。编译器会从左到右扫描源代码,将其中的字符流分割成一个一个的token。token的类别包括token key和token value。部分示例如表1所示:
表1部分token示例
词法分析选取分析器提取解释器标准定义规则文件。语法分析程序根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。启动词法分析逐个扫描每一个词法单元,接着建立新的叶子节点,词法单元在抽象语法树中是终结点(叶子节点)。词法分析需要对每个终节点建立叶子节点,来给语法分析过程调用。通过生成的Token完成了抽象语法树中的节点分类,主要包括SQLObject、SQLExpr、SQLStatement三种类型。抽象树通过自底向上的方式建立,先将词法单元建立对应的叶子节点,由词法单元叶子节点产生新的父节点,进行规约,直到起始单元,完成整颗语法树的建立。
其中规约指的是,自底向上分析的过程是以输入符号串作为端末结点符号串,向着根结点的方向往上构造语法树,是开始符号正好是该语法树的根结点,自底向上语法分析过程实际上是一个不断进行直接归约的过程。
自底向上语法分析法的基本思想:自左向右地扫描输入符号串,一遍把输入符号逐个移进分析栈,一边检查分析栈的栈顶符号串是否已经形成了句柄(句柄就是每个产生式的右部),如果形成句柄就把栈顶符号串替换为相应产生式左部的非终结符号,这种替换就称规约,再根据规约后的新栈顶,继续扫描,移进,规约。
在本实施例中,抽象语法树的建立通过SQLUtils()函数对节点进行打印,将SQLExpr或者SQLStatement类型打印为String类型,便于后续的语义分析模型进行自定义遍历处理。
应当理解,抽象语法树的构造过程是经过词法、语法和语义三个阶段分析生成的。词法分析将一个个字符组装成有意义的单词,形成初步的符号表。词法分析提供代码语言基本组成单元包括各种标记符、关键字,同时去除无意义符号。词法分析主要分析源代码中的标记符并对标记符给出定性和定长处理。语法分析器执行语法分析程序识别输入的标记符序列是否符合规定语法,每种语法对应一种语句规则。
语法分析将标记符组装成语法规定的语句,如函数声明语句、变量定义、if语句、条件表达式等。语法分析主要判断语言的单词间前后关系是否正确,是否符合规定要求。语义分析是在语法无误的基础上对源代码的逻辑判断阶段。
步骤(2),语义分析。
本发明结合AdaBoost算法与FP-growth算法形成完整的语义分析模型,实现基于上下逻辑的快速、全面的SQL注入攻击检测。语义分析通过在语法正确的基础上,通过对源代码的逻辑进行判断的一种检测技术。AdaBoost算法以其进行SQL注入样本迭代分析的方法,要先建立数据集并转换为后续需要的方式,然后结合加权原则寻找最佳单层决策树。通过构建单层决策树进行样本分类,计算出错误率,错误率的计算对应在相对权重上,最后进行累加得到分析器的错误率。利用AdaBoost算法分析当前迭代最优弱危险分析器,计算最优弱分析器的权重,并根据错误率更新分析样本权重,然后不断重复以上步骤,直到达到能够终止条件为止。终止条件是强分析器的错误率低于最低错误率阈值或者达到最大危险分析迭代次数。
构建抽象语法树(AST)通过解析器直接输入源代码得出;然后通过深度优先遍历方法遍历AST将其映射为向量;接着深度AST表示方法则通过数字映射把语法树节点表示为可供Adaboost算法输入的数字样本,通过Adaboost最后得到一个最佳的单层决策树。
具体实现如下:首先通过解析器获取代码的常规抽象语法树,利用深度优先遍历进一步得到序列化AST;然后对代码文件进行向量转化,最后通过数字映射与填充、词嵌入等方法获取代码的深层语义,实现代码的深度表示。使用深度优先遍历(DFT)将AST元素映为向量。通过构建映射的方式,将向量的元素转换为整数形式。然后将该部分整数作为向量元素的唯一标识。
接下来采用FP-Growth算法,进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为。FP-Growth算法通过两个阶段进行关联分析,1)构建树:首先扫描电力信息系统中用户输入的经过预处理后的数据,得到所有频繁项集的的计数。然后删除支持度低于阈值的项,将频繁项集放入项头表,并按照支持度降序排列。然后,将读到的用户输入的经过预处理后的数据剔除非频繁项集,并按照支持度降序排列,循环扫描信息,查找满足最小支持度的关联项集。接着,读入排序后的数据集,插入基于Adaboost算法得到的一个最佳的单层决策树,插入时按照排序后的顺序,插入树中,其中排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到树后,这棵树的建立完成。2)挖掘频繁项集:从项头表的底部项依次向上找到项头表项对应的条件模式基。从条件模式基递归挖掘得到项头表项项的频繁项集。如果不限制频繁项集的项数,则返回之前的所有的频繁项集,否则只返回满足项数要求的频繁项集。这些频繁项集体现了隐藏在电力信息系统中与SQL注入攻击有关联的行为。筛选出其中最小支持度的关项集,最终达到所有关联项集都被挖掘出,得出关联规则,进行排序更新树,最终输出漏洞攻击行为的检测结果。
步骤(3)语义修复。
通过上述模型进行漏洞攻击行为判定,根据漏洞的情况,进行语义的修复。首先,从历史代码库中,搜索与源程序相似的bug代码,并找到与其相关的修复代码。然后,将修复代码转换为抽象语法树,生成候选补丁。使用基于给定测试用例的适应度函数来验证候选补丁是否有效,最后,生成输出补丁修复源错误代码。
在具体实施过程中,可以基于遗传算法和代码相似性进行程序的自动修复。处理流程如图3所示,基于漏洞攻击行为的定位,搜索与源代码程序相关的类似bug代码及其修复代码。将其转换为抽象语法树。通过遗传规划为源bug代码生成补丁。
遗传算法的实现如下:
(a)种群初始化。利用克隆检测技术搜索与源bug代码相似的bug代码并得到相似错误代码的修复代码。为了找到最相似的修复代码,将修复代码中的每一行代码转换为令牌序列。使用最长公共子序列对这些行和源错误行的令牌序列进行比较。从这些行中获取具有最高LCS值的令牌序列。保留关键词、变量名和常数,使用随机操作符生成新的代码行,并将该行与错误行交换。重复这个步骤,直到初始补丁的数量等于种群的大小。
(b)遗传操作。当前种群中没有合格的个体时,将执行选择操作符。用适应度函数将个体按降序排序,使一半的个体都为父代。为了便于初始种群的构建,将适应度函数做规范化处理。个体i的适应度函数规范化处理过程,这个规范化的适应度值仅用于初始种群选择。
其中,i为种群中第i个个体;fitc(i)表示i个体适应度值;fits表示种群中最小适应度值;fit1表示种群中最大适应度值。交叉的目的是交换两个AST中的子树节点。在每个母树中选择可更改的目标节点。选择目标节点后,通过跟踪父节点来验证两个节点是否可以交换。在变异中,选用删除、插入和交换三种操作。
(c)适应度函数。迭代遗传规划算法,直到某些值达到限定条件。设置了三个限定条件:运行时间、代数和适应度值。如果达到限定时间和迭代次数还没有生成正确的补丁,则修复失败。个体适应度值如果是1,则停止迭代输出补丁。在每个迭代步骤中,并必须计算每个个体的适应度值。
其中,α为通过正测试用例的系数;β为未通过反测试用例的系数;γ为通过反测试用例的系数;Pp代表通过的正测试用例;Np代表通过的反测试用例;P为正测试用例集,N为反测试用例集。
方程结果的取值范围为0~1。值越接近1,个体越接近正确解。由于此模型包含了基本的功能,并且没有引发意外的行为,所以适应度更接近于1。α的值应大于β和γ,因为此系数表示个体是否包含基本功能。
本发明的电力信息系统安全防护方法,综合考虑电网信息系统的运行态信息环境中产生的各种信息,通过词法、语法等分析过程对SQL攻击的Payload进行检测,对缺失的漏洞有效进行语法补全,为电网信息系统的安全防护提供支撑数据,使得电网信息系统遭遇黑客的猛烈攻击的时候提前做出应对,保证电网的信息安全。
参照图4,根据本发明的另一实施例,提供一种基于代码语义分析的电力信息系统安全防护装置,包括:
用于采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息采集模块;
用于对信息采集模块输出的关键信息进行词法分析和语法分析,得到抽象语法树的信息预处理模块;
用于根据预设的安全模型对预处理后的抽象语法树的代码逻辑进行判断检测,识别代码漏洞的语义分析模块;以及
用于根据漏洞攻击行为判定情况,对源代码进行语义修复的语义修复模块。
其中,信息采集模块通过基于Web应用程序的外部输入,采集电网信息系统的运行代码和相关的运行态信息,进行关键信息提取,形成用户请求信息文件,作为后续处理的输入。
信息预处理模块包括词法分析单元和语法分析单元,词法分析单元依次读取包含代码关键信息的用户请求信息文件中的字符,进行字符集合分析,按照预定的规则将字符合并成标记token,将整个用户请求信息文件分割进一个token列表,并选取当前Web解释器使用的分析器,提取解释器标准定义规则文件;语法分析单元根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。其中词法分析单元通过生成的Token完成了抽象语法树中的节点分类。抽象语法树通过自底向上的方式建立,先将词法单元建立对应的叶子节点,由词法单元叶子节点产生新的父节点,进行规约,直到起始单元,完成整颗语法树的建立。
语义分析模块包括第一分析模块,所述第一分析模块主要利用Adaboost算法得到最佳的单层决策树。具体而言,第一分析模块包括:序列化单元,基于预处理单元建立的常规抽象语法树,利用深度优先遍历进一步得到序列化AST;第一转换单元,用于对代码文件进行向量转化;深度表示单元,用于通过数字映射与填充、词嵌入等方法获取代码的深层语义,实现代码的深度表示;第二转换单元,用于通过深度优先遍历方法遍历抽象语法树将其映射为向量,并通过构建映射的方式,将向量的元素转换为整数形式。然后将该部分整数作为向量元素的唯一标识。这样将语法树节点表示为可供Adaboost算法输入的数字样本;以及输出单元,通过Adaboost算法得到一个最佳的单层决策树。
语义分析模块还包括第二分析模块,所述第二分析模块主要利用FP-growth算法进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为。第一分析模块和第二分析模块配合构成语义分析模型。具体而言,第二分析模块包括:树构建单元,其被配置为执行包括以下步骤的树构建操作:扫描电力信息系统中用户输入的经过预处理后的数据,得到所有频繁项集的的计数;删除支持度低于阈值的项,将频繁项集放入项头表,并按照支持度降序排列;将读到的用户输入的经过预处理后的数据剔除非频繁项集,并按照支持度降序排列,循环扫描信息,查找满足最小支持度的关联项集;读入排序后的数据集,插入基于Adaboost算法得到的一个最佳的单层决策树,插入时按照排序后的顺序插入树中,其中排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到树后,这棵树的建立完成。第二分析模块还包括:频繁项集挖掘单元,其被配置为执行包括以下步骤的挖掘操作:从项头表的底部项依次向上找到项头表项对应的条件模式基;从条件模式基递归挖掘得到项头表项项的频繁项集;如果不限制频繁项集的项数,则返回之前的所有的频繁项集,否则只返回满足项数要求的频繁项集。这些频繁项集体现了隐藏在电力信息系统中与SQL注入攻击有关联的行为。筛选出其中最小支持度的关项集,最终达到所有关联项集都被挖掘出,得出关联规则,进行排序更新树,最终输出漏洞攻击行为的检测结果。
语义修复模块通过语义分析模型所识别的漏洞攻击行为判定情况,进行相应的语义修复。具体而言,语义修复模块包括:搜索单元,用于从历史代码库中搜索与源程序相似的bug代码,并找到与其相关的修复代码;候选补丁生成单元,用于将修复代码转换为抽象语法树,生成候选补丁;验证单元,用于使用基于给定测试用例的适应度函数来验证候选补丁是否有效;以及补丁输出单元,用于根据通过验证的补丁生成输出补丁修复源错误代码。
应理解,本发明实施例中的基于代码语义分析的电力信息系统安全防护装置可以实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,在装置实施例中未加以详述的具体实现过程以及计算公式可参照上述实施例中的相关描述。
基于与方法实施例相同的技术构思,根据本发明的另一实施例,提供一种计算机设备,所述设备包括:一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现方法实施例中的各步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (6)
1.一种基于代码语义分析的电力信息系统安全防护方法,其特征在于,所述方法包括以下步骤:
采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息;
对采集的关键信息进行词法分析和语法分析,得到抽象语法树;
根据预设的安全模型对预处理后的抽象语法树的代码逻辑进行判断检测,识别代码漏洞,包括:根据Adaboost算法得到最佳的单层决策树,再利用FP-growth算法基于所述最佳的单层决策树进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为;
根据漏洞攻击行为判定情况,对源代码进行语义修复,
其中,根据Adaboost算法得到最佳的单层决策树包括:
基于建立的常规抽象语法树,利用深度优先遍历进一步得到序列化抽象语法树;
对代码文件进行向量转化,所述代码文件指的是用户输入的经过预处理后的数据;
通过数字映射与填充、词嵌入方法获取代码的深层语义,实现代码的深度表示;
通过深度优先遍历方法遍历抽象语法树将其映射为向量,并通过构建映射的方式,将向量的元素转换为整数形式,该整数作为向量元素的唯一标识;
通过Adaboost算法得到一个最佳的单层决策树;
利用FP-growth算法基于所述最佳的单层决策树进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为包括:
扫描电力信息系统中用户输入的经过预处理后的数据,得到所有频繁项集的计数;
删除支持度低于阈值的项,将频繁项集放入项头表,并按照支持度降序排列;
将读到的用户输入的经过预处理后的数据剔除非频繁项集,并按照支持度降序排列,循环扫描信息,查找满足最小支持度的关联项集;
读入排序后的数据集,插入基于Adaboost算法得到的最佳的单层决策树,插入时按照排序后的顺序插入树中,其中排序靠前的节点是祖先节点,而靠后的是子孙节点,如果有共用的祖先,则对应的公用祖先节点计数加1,插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点,直到所有的数据都插入到树中;
从项头表的底部项依次向上找到项头表项对应的条件模式基;
从条件模式基递归挖掘得到项头表项的频繁项集;
如果不限制频繁项集的项数,则返回之前的所有的频繁项集,否则只返回满足项数要求的频繁项集;
筛选出其中最小支持度的关项集,最终达到所有关联项集都被挖掘出,得出关联规则,进行排序更新树,最终输出漏洞攻击行为的检测结果。
2.根据权利要求1所述的基于代码语义分析的电力信息系统安全防护方法,其特征在于,所述对采集的关键信息进行词法分析和语法分析包括:词法分析器依次读取包含代码关键信息的用户请求信息文件中的字符,进行字符集合分析,按照预定的规则将字符合并成标记token,将整个用户请求信息文件分割进一个token列表,并选取当前Web解释器使用的分析器,提取解释器标准定义规则文件;语法分析器根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。
3.根据权利要求1所述的基于代码语义分析的电力信息系统安全防护方法,其特征在于,所述根据漏洞攻击行为判定情况,对源代码进行语义修复包括:
从历史代码库中搜索与源程序相似的bug代码,并找到与其相关的修复代码;
将修复代码转换为抽象语法树,生成候选补丁;
使用基于给定测试用例的适应度函数来验证候选补丁是否有效;
根据通过验证的补丁生成输出补丁修复源错误代码。
4.一种基于代码语义分析的电力信息系统安全防护装置,其特征在于,包括:
用于采集电网信息系统的运行代码和相关的运行态信息,并提取关键信息的信息采集模块;
用于对信息采集模块输出的关键信息进行词法分析和语法分析,得到抽象语法树的信息预处理模块;
用于根据预设的安全模型对预处理后的抽象语法树的代码逻辑进行判断检测,识别代码漏洞的语义分析模块;以及
用于根据漏洞攻击行为判定情况,对源代码进行语义修复的语义修复模块,
其中,所述语义分析模块包括第一分析模块,用于根据Adaboost算法得到最佳的单层决策树,其中所述第一分析模块包括:
序列化单元,用于基于预处理单元建立的常规抽象语法树,利用深度优先遍历进一步得到序列化抽象语法树;
第一转换单元,用于对代码文件进行向量转化;
深度表示单元,用于通过数字映射与填充、词嵌入方法获取代码的深层语义,实现代码的深度表示;
第二转换单元,用于通过深度优先遍历方法遍历抽象语法树将其映射为向量,并通过构建映射的方式,将向量的元素转换为整数形式,该整数作为向量元素的唯一标识;以及
输出单元,通过Adaboost算法得到一个最佳的单层决策树;
所述语义分析模块还包括第二分析模块,用于通过FP-growth算法进行关联分析,实现通过上下逻辑的分析,检测出是否存在SQL注入攻击行为,其中第二分析模块包括:
树构建单元,其被配置为执行包括以下步骤的树构建操作:
扫描电力信息系统中用户输入的经过预处理后的数据,得到所有频繁项集的计数;
删除支持度低于阈值的项,将频繁项集放入项头表,并按照支持度降序排列;
将读到的用户输入的经过预处理后的数据剔除非频繁项集,并按照支持度降序排列,循环扫描信息,查找满足最小支持度的关联项集;
读入排序后的数据集,插入基于Adaboost算法得到的一个最佳的单层决策树,插入时按照排序后的顺序插入树中,其中排序靠前的节点是祖先节点,而靠后的是子孙节点,如果有共用的祖先,则对应的公用祖先节点计数加1,插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点,直到所有的数据都插入到树中;
所述第二分析模块还包括:频繁项集挖掘单元,其被配置为执行包括以下步骤的挖掘操作:
从项头表的底部项依次向上找到项头表项对应的条件模式基;
从条件模式基递归挖掘得到项头表项的频繁项集;
如果不限制频繁项集的项数,则返回之前的所有的频繁项集,否则只返回满足项数要求的频繁项集;
筛选出其中最小支持度的关项集,最终达到所有关联项集都被挖掘出,得出关联规则,进行排序更新树,最终输出漏洞攻击行为的检测结果。
5.根据权利要求4所述的基于代码语义分析的电力信息系统安全防护装置,其特征在于,所述信息预处理模块包括词法分析单元和语法分析单元,词法分析单元依次读取包含代码关键信息的用户请求信息文件中的字符,进行字符集合分析,按照预定的规则将字符合并成标记token,将整个用户请求信息文件分割进一个token列表,并选取当前Web解释器使用的分析器,提取解释器标准定义规则文件;语法分析单元根据标准定义语法规则还原语法中的程序逻辑,构建完整的抽象语法树AST。
6.根据权利要求4所述的基于代码语义分析的电力信息系统安全防护装置,其特征在于,所述语义修复模块通过语义分析模型所识别的漏洞攻击行为判定情况,进行相应的语义修复,其中所述语义修复模块包括:
搜索单元,用于从历史代码库中搜索与源程序相似的bug代码,并找到与其相关的修复代码;
候选补丁生成单元,用于将修复代码转换为抽象语法树,生成候选补丁;
验证单元,用于使用基于给定测试用例的适应度函数来验证候选补丁是否有效;以及
补丁输出单元,用于根据通过验证的补丁生成输出补丁修复源错误代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110539306.4A CN113297580B (zh) | 2021-05-18 | 2021-05-18 | 基于代码语义分析的电力信息系统安全防护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110539306.4A CN113297580B (zh) | 2021-05-18 | 2021-05-18 | 基于代码语义分析的电力信息系统安全防护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113297580A CN113297580A (zh) | 2021-08-24 |
CN113297580B true CN113297580B (zh) | 2024-03-22 |
Family
ID=77322603
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110539306.4A Active CN113297580B (zh) | 2021-05-18 | 2021-05-18 | 基于代码语义分析的电力信息系统安全防护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113297580B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114547619B (zh) * | 2022-01-11 | 2024-04-19 | 扬州大学 | 一种基于树的漏洞修复系统及修复方法 |
CN115412335B (zh) * | 2022-08-26 | 2024-03-05 | 国网江苏省电力有限公司电力科学研究院 | 5g电力物联网边缘设备漏洞检测方法、装置及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU168346U1 (ru) * | 2016-06-23 | 2017-01-30 | Закрытое Акционерное Общество "Научно-Производственное Объединение "Эшелон" | Устройство выявления уязвимостей |
CN108875366A (zh) * | 2018-05-23 | 2018-11-23 | 四川大学 | 一种面向php程序的sql注入行为检测系统 |
CN112199677A (zh) * | 2020-11-03 | 2021-01-08 | 安徽中安睿御科技有限公司 | 一种数据处理方法和装置 |
CN112541180A (zh) * | 2020-12-16 | 2021-03-23 | 北京理工大学 | 一种基于语法特征和语义特征的软件安全漏洞检测方法 |
-
2021
- 2021-05-18 CN CN202110539306.4A patent/CN113297580B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU168346U1 (ru) * | 2016-06-23 | 2017-01-30 | Закрытое Акционерное Общество "Научно-Производственное Объединение "Эшелон" | Устройство выявления уязвимостей |
CN108875366A (zh) * | 2018-05-23 | 2018-11-23 | 四川大学 | 一种面向php程序的sql注入行为检测系统 |
CN112199677A (zh) * | 2020-11-03 | 2021-01-08 | 安徽中安睿御科技有限公司 | 一种数据处理方法和装置 |
CN112541180A (zh) * | 2020-12-16 | 2021-03-23 | 北京理工大学 | 一种基于语法特征和语义特征的软件安全漏洞检测方法 |
Non-Patent Citations (3)
Title |
---|
基于机器学习的SQL注入检测技术研究;蒋磊;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第2期);I139-187 * |
基于相似代码的软件自动修复技术研究;纪涛;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第4期);I138-1289 * |
基于语义分析的SQL注入行为检测方案研究;曹鹏飞 等;《计算机时代》;第11卷(第11期);第18-22页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113297580A (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN114077741B (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
CN112651028B (zh) | 基于上下文语义和补丁验证的漏洞代码克隆检测方法 | |
CN114297654A (zh) | 一种源代码层级的智能合约漏洞检测方法及系统 | |
CN112307473A (zh) | 一种基于Bi-LSTM网络和注意力机制的恶意JavaScript代码检测模型 | |
CN111552969A (zh) | 基于神经网络的嵌入式终端软件代码漏洞检测方法及装置 | |
CN113821804B (zh) | 一种面向第三方组件及其安全风险的跨架构自动化检测方法与系统 | |
CN112733156A (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN115357904B (zh) | 一种基于程序切片和图神经网络的多类漏洞检测方法 | |
CN112685738B (zh) | 一种基于多级投票机制的恶意混淆脚本静态检测方法 | |
CN112115326B (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
CN111177731A (zh) | 一种基于人工神经网络的软件源代码漏洞检测方法 | |
CN111881300A (zh) | 面向第三方库依赖的知识图谱构建方法及系统 | |
US9600644B2 (en) | Method, a computer program and apparatus for analyzing symbols in a computer | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
Partenza et al. | Automatic identification of vulnerable code: Investigations with an ast-based neural network | |
CN105468972B (zh) | 一种移动终端文件检测方法 | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN113886832A (zh) | 智能合约漏洞检测方法、系统、计算机设备和存储介质 | |
CN117940894A (zh) | 用于检测代码克隆的系统和方法 | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN116975881A (zh) | 一种基于llvm的漏洞细粒度定位方法 | |
CN113868650B (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 |