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

admin 2021年12月14日05:25:50安全文章评论187 views818字阅读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

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月14日05:25:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  CodeQL静态代码扫描规则编写之RemoteFlowSource http://cn-sec.com/archives/481868.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: