一、背景
至于为什么学习Codeql还是因为审计中遇到一个需求,三梦师傅丢出Codeql秀了我一脸,感觉可以花点时间看一看。
二、环境搭建及使用
这里建立在已经知道Codeql是什么的情况下,Codeql基本概念介绍移步这里https://www.4hou.com/posts/yJOW
基本的环境搭建和使用我参考的14yn3师傅的文章:https://www.freebuf.com/articles/web/283795.html
1.安装
CodeQL本身包含两部分解析引擎+SDK。
解析引擎用来解析我们编写的规则,虽然不开源,但是我们可以直接在官网下载二进制文件直接使用。
SDK完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。
Codeql-Cli:https://github.com/github/codeql-cli-binaries/releases 下载好后配置环境变量即可
SDK:git clone https://github.com/Semmle/ql
接下来就是VSCode,大多都是使用VSCode进行规则的开发和调试,插件很好装,直接在插件市场搜索CodeQL 安装即可,安装好后配置codeql引擎路径
2.使用
想要体验Codeql使用大概就分为两步:创建数据库 -> 使用ql对数据库进行查找
之前刚入门的时候写过几个web_demo项目,这下正好试下。
生成数据库有两种方式,当然真正审计项目的时候就是本地生成database。可能是因为当时项目写的不规范产生编译为题导致数据库生成失败
这里偷个懒,直接用lgtm
简单运行一个查询语句可以使用CodeQL: Quick Query,这里简单查询一下所有内容为空的方法
import java
结果如下
如果想要保存自己的语句,可以参考创建ql包,编写qlpack.yml文件即可
https://codeql.github.com/docs/codeql-cli/about-ql-packs/#about-ql-packs
三、学习路线资料
网上公开的学习资料有一些,最近看了很多,这里推荐些自己觉得不错的
官方文档 https://codeql.github.com/docs/codeql-overview/
CodeQL 概述部分大概说明了CodeQL 的工作原理、CodeQL 分析支持的语言和库,以及工具的使用和一些术语。建议大概过一遍。
第二部分大概讲了Codeql-VScode的使用,以及相关配置文件的规范
第三部分就是cli的命令行参数
第四部分编写QL语句,这里推荐看这个教程https://www.4hou.com/posts/o6wX
第五部分是codeql语言参考指南,这里面给处理Codeql针对不同语言下的查询原理及ql编写,我是读了一遍官方文档后,有些地方有点无法理解,比如数据流部分,建议多读几遍,另外这部分还有中文版https://www.cnblogs.com/goodhacker/p/
如果AST的前置不足可以参考下这些(Sumersec师傅说AST学好了,写ql很简单:
https://www.jianshu.com/p/ff8ec920f5b9
https://www.jianshu.com/p/4bd5dc13f35a
https://www.jianshu.com/p/68fcbc154c2f
四、总结
我觉得看完这些差不多就算入门了吧,第一遍看不懂就多看几遍咯,接下来就是多多实践,官方给出了很多示例ql,还有lgmt上公开的很多ql,然后再有一些现成的结合漏洞编写ql的文章,争取每个都仔细看过