关注网络与数据安全

忘记密码
“游侠安全网”创建了网络安全从业者QQ大群(群号:389710688) ,欢迎各位同仁加入!有其它问题,请联系站长“网路游侠”,QQ:55984512


CodeQL简介及其Windows下环境安装

2023-04-30 15:20 推荐: 浏览: 29字号:

摘要: CodeQL简介 CodeQL项目地址:https://github.com/github/codeql CodeQL官网:https://codeql.github.com/ 截止到目前在github上有4.1k个star该项目的历史为:Semmle公司...

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进行代码审计

参考链接

原文地址:https://www.cnblogs.com/Cl0ud/p/15803314.html

联系站长租广告位!

中国首席信息安全官
Copy link