静态代码审计的发展
Posted 南瓜__pumpkin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代码审计的发展相关的知识,希望对你有一定的参考价值。
抽象语法树AST
0x01 编译系统的结构
编译系统的结构:以人工英汉翻译举例,理解翻译过程。
In the room, he broke a windows with hammer
第1步:判断单词的词类/词性(词法分析)–> 根据词类识别句子短语,获取句子结构(语法分析)–> 根据句子结构分析短语充当成分,获取名词短语与核心谓语动词的关系(语义分析)。
第2步,给出中间表示形式。
通过举例理解,我们再看编译器工作流程的前端front end
分析部分:
0x02 词法分析
简单来说,就是对代码中的单词做标记分好类。
静态代码审计的发展
0x01 关键字匹配
高覆盖性-宁错杀不放过:正则匹配模式\\beval\\(\\$
,这类工具最经典的就是Seay,通过简单的关键字来匹配经可能多的目标。
高可用性-宁放过不错杀:正则匹配模式\\beval\\b\\(\\$_(GET|POST)
,这类工具最经典的是Rips免费版,用更多的正则来约束,用更多的规则来覆盖多种情况。
缺点:误报率或漏报率居高不下,依赖人工审计,工作量大。
原因:审计工具的聚焦对象是应用层的代码,而应用层的代码随着开发人员的不同而不同,难以统一格式。代码对象的不统一,使问题的复杂性成为一种必然。
0x02 AST代码分析
AST(Abstract Syntax Tree,抽象语法树)是编译原理中的概念,基于AST的静态代码分析工具,其可圈可点之处在于实现了代码对象的统一
。
开发人员是不同的,但编译器是相同的。通过把代码转换成AST抽象语法树,我们实现了代码格式的统一,即代码分析工具数据源的统一。
常见的语义分析项目:
https://github.com/nikic/php-Parser
https://github.com/viraptor/phply
复习一波编译原理
参考
《从0开始聊聊自动化静态代码审计工具》,https://paper.seebug.org/1339/
以上是关于静态代码审计的发展的主要内容,如果未能解决你的问题,请参考以下文章