CodeQL静态代码扫描规则编写之RemoteFlowSource

admin 2021年12月14日05:25:50评论495 views字数 818阅读2分43秒阅读模式


 

CodeQL三大核心模块:

DataFlow模块、Smtm模块、Expr模块

 

DataFlow模块主要常用的就是taintedTracking和hasflow,flowto,漏洞挖掘我们肯定是需要用到这个模块的

Stmt模块常用于ast分析,就是ifStmt,TryStmt之类的代码分支,这个我个人觉得语法太麻烦,还不如pmd的xpath规则简单易懂方便编写

Expr模块最常用,例如MethodAccess,Method,call,callable,ClassInstanceExpr之类的一大堆类也是常用的,在定义sink ,source之类的必须要用到

 

而这个RemoteFlowSource是DataFlow下的一个子类。他的结构就是一个抽象类然后很多子类继承他,返回的内容就是一个子类筛选后的集合。

然后他的代码结构是这样的

CodeQL静态代码扫描规则编写之RemoteFlowSource


其中有一些加了deprecated,在后面版本中要被废弃的一些方法。然后一些常见的获得参数的source都在SpringWebRequest类里


然后其他的一些框架的获得参数的方法都有自己命名的类,比如spring,struts2等

 

而真正的相关的一些框架的参数和方法的定义都在semmle/code/java/dataflow/framework目录下。

 

所以很会规则关于source的定义常常是一句话:

override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }


 

看多了规则的编写,你就会发现,他们整个逻辑的结构是一个抽象类 然后分类处理。其中部分的库中的class可能会有一个library关键词,不过这个在后面的codeQL版本中会废弃,仅仅表示这个类在qll文件中加载。不能在主文件中直接编写


本文始发于微信公众号(xsser的博客):CodeQL静态代码扫描规则编写之RemoteFlowSource

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月14日05:25:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CodeQL静态代码扫描规则编写之RemoteFlowSourcehttp://cn-sec.com/archives/481868.html

发表评论

匿名网友 填写信息