静态代码审计的发展


编译基础知识

0x01 编译系统的结构

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

	In the room, he broke a windows with hammer

  第1步:判断单词的词类/词性(词法分析)–> 根据词类识别句子短语,获取句子结构(语法分析)–> 根据句子结构分析短语充当成分,获取名词短语与核心谓语动词的关系(语义分析)。
  第2步,给出中间表示形式。基于AST的语法树就是代码的一种中间表现形式,通过统一中间表示形式,可以使代码自动化审计具有统一的数据源,可以使代码回归从而更好地检测Webshell。

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

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

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

  简单来说,就是对代码中的单词做标记分好类。


静态代码审计的发展-seebug1篇文章

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

  复习一波编译原理


ExploitCat-又称

  《PHP自动化白盒审计技术与实现》
https://exploitcat.blog.csdn.net/article/details/46271551

《浅谈PHP自动化代码审计技术》
https://blog.csdn.net/u011721501/article/details/44982111

《使用PHP-Parser生成AST抽象语法树》
https://exploitcat.blog.csdn.net/article/details/43031537


《PHP AST学习》-2018/07,从Webshell检测方面出发。
https://blog.csdn.net/angaoux03775/article/details/101710866?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-8.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-8.control

《新抽象语法树(AST)给 PHP7 带来的变化》,讲到了php的编译过程。https://blog.csdn.net/weixin_43814458/article/details/106122078?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-5.control

《深入理解PHP原理之opcodes》,写的很详细很好,https://www.cnblogs.com/feixiablog/articles/8297163.html

不懂的地方还有很多,比如compose、PHP新特性……不要总是想着从基础去学,诚实地讲那是一种对困难的逃避方式,那样很蠢。


PHP-Parse

  看到的文章更多是关于把PHP代码解析成AST。

  比如《PHP-Parse 简介以及在 Hyperf 中的应用》,
PHP-Parse 的主要作用是修改原有代码(比如插入自定义的代码片段),生成新的代理类 。框架内生成代理类,处理注入有用到,比如 Hyperf 的 DI 组件利用反射和 PHP-Parse 实现了注入。

  比如《PHP Parser 简介和应用 - 为你的代码自动补全单元测试》,
PHP Parser 是由 nikic 开发的一款 php 抽象语法树(AST)解析工具。PHP Parser 同时兼顾接口易用,结构简洁,工具链完善等诸多优点。在工程上,普遍使用 PHP Paser 生成模板代码,或使用其生成的抽象语法树进行静态分析。

  比如用于减少语法错误的,
这里介绍一款PHP代码静态分析工具:PHPStan,不需要运行代码,也可以对代码进行严格的语法检测,尽量将代码运行错误率降到最低。

参考

  《从0开始聊聊自动化静态代码审计工具》,https://paper.seebug.org/1339/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值