CodeQL简介
CodeQL
项目地址:https://github.com/github/codeql
CodeQL
官网:https://codeql.github.com/
截止到目前在github上有4.1k个star
该项目的历史为:Semmle公司最早独创性的开创了一种QL语言,Semmle QL,并且运行在自家LGTM平台上。
LGTM平台上存放的就是一些开源项目,用户可以选择分析的语言,编写ql语句进行程序安全性查询。
2019年,GitHub为了解决其托管的海量项目的安全性问题,收购了Semmle公司,并宣布开源CodeQL的部分规则,这样全世界的安全工程师就可以贡献高效的QL审计规则给github,帮助它解决托管项目的安全问题,而对于安全人员也多了一个非商业的开源代码自动化审计工具。
简单来说,CodeQL就是一种代码分析平台。借助这个平台,安全研究人员可以实现变种分析的自动化。这里所谓的变种分析,就是以已知的安全漏洞作为参照物,在我们的目标代码中寻找类似的安全问题的过程。CodeQL支持对C++,C#,Java,JavaScript,Python,go等多种语言进行分析,可用于分析代码,查找代码中控制流等信息。
CodeQL的核心引擎是不开源的,这个核心引擎的作用是将需要审计的代码转换成CodeQL能识别的中间层数据库,然后我们只需要编写QL查询语句来获取我们想要的数据,偷一张freebuf上的图
图中micro-service-seclab
是需要审计的项目,我们需要编写的就是其中的QL查询语句,要是不会写查询语句和规则怎么办?CodeQL开源了所有的规则和规则库部分,我们能够进行学习参考,并编写符合自己业务逻辑的QL规则,然后使用CodeQL引擎去跑我们的规则,从而输出变种漏洞。
CodeQL环境搭建
在windows11环境下安装CodeQL
CodeQL本身包含两部分:解析引擎+SDK
解析引擎用来解析我们编写的规则,虽然不开源,但是我们可以直接在官网下载二进制文件直接使用
SDK完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。
引擎安装
下载 https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip
解析引擎支持主流的操作系统:Windows,Mac,Linux
下载解压后将路径添加到环境变量中,方便测试
SDK安装
访问之后下载压缩包https://github.com/github/codeql
更改文件名为ql
目前的目录结构为:
VScode插件安装
VScode安装codeql
插件
修改插件的配置,添加codeql
可执行文件的路径
到这里codeql
的开发环境就配置完成了
使用
想要好好利用codeql
这个工具,ql
的相关语法也是我们需要学习的,不过ql
语法的知识我准备放到下一篇博客中进行介绍,这里先测试一下安装好的codeql
环境。
以python
为例,建立分析数据库,需要我们到等待审计源代码的根目录,执行
codeql database create codeqltest --language=python
为什么要建立数据库。因为codeql
的处理对象并不是源代码本身,而是中间生成的AST抽象语法树数据库,后续我们的查询操作都是在这个数据库中进行
--language="python"
指的是我们程序的语言
如果需要审计的源代码不在当前目录,可以通过 --source-root=
命令进行指定
还有其他的一些命令,这里就不再赘述。
随便找一个flask
的项目进行测试
执行成功后会在当前目录下生成一个codeqltest
的文件夹
用vscode
打开之前下载的ql
库文件,在ql插件中添加刚才的数据库文件,并设置为当前数据库。
为了方便引入python
库,在/ql/python/ql/src
下创建一个test.ql
来编写我们的ql
查询语句
编写一段hello world
正确输出则代表配置完成并正确
当然如果你觉得电脑上配置环境的过程太复杂了,我们也可以直接使用LGTM
,简单把它看成是CodeQL平台的云版本:https://lgtm.com/
在上面尝试输出hello world
一样正确输出
从而使用codeql
进行代码审计
参考链接
END
建了一个微信的安全交流群,欢迎添加我微信备注进群
,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注