静态代码审计的发展

Posted 南瓜__pumpkin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代码审计的发展相关的知识,希望对你有一定的参考价值。


抽象语法树AST

0x01 编译系统的结构

  编译系统的结构:以人工英汉翻译举例,理解翻译过程。

	In the room, he broke a windows with hammer

  第1步:判断单词的词类/词性(词法分析)–> 根据词类识别句子短语,获取句子结构(语法分析)–> 根据句子结构分析短语充当成分,获取名词短语与核心谓语动词的关系(语义分析)。
  第2步,给出中间表示形式。

第1步--分析源语言的语义
第2步生成目标语言
源语言句子
句子的语义
目标语言句子

  通过举例理解,我们再看编译器工作流程的前端front end分析部分:

1.词法分析器
2.语法分析器
3.语义分析器
4.中间代码生成器
字符流
词法单元流
语法树
语法树
中间表示形式

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/

以上是关于静态代码审计的发展的主要内容,如果未能解决你的问题,请参考以下文章

静态代码编码审计(图文教程)

CICD-代码审计(漏洞扫描工具-代码审计静态代码分析和安全检测-代码覆盖率)

静态代码审计-大牛师长篇

代码审计思路之PHP代码审计

代码审计:安全性测试方案

学习静态代码审计_第一站:编译原理和php