CodeQL初识

5 分钟

前言

昨天一个审计仔朋友问我有没有弄过CodeQL,我的回复是之前玩过CodeQLPy来辅助进行代码审计,但是具体怎么安装的我也忘记了,我说确实挺强,然后他就问我具体是怎么安装的。他没看懂,于是就有了以下的文章。首先可以确定的是CodeQL逐渐爆火成为了主流,作为一种辅助代码审计的工具为什么爆火?我虽然并非是主干代码审计的,但是却是有比较深刻的印象就是当一个企业级的项目摆在面前需要进行审计,几百万行甚至千万行的代码总是很耗时,而且代码量的庞大容易让人头晕,因此会漏掉很多很容易能发现的漏洞。CodeQL之所以强大,它与一些代码审计工具不同的地方在于它针对的是代码本身,使用者可以通过CodeQL 规则自定义寻找自己所需要的代码规则。

安装

首先CodeQL包含两部分,一部分是解析引擎,一部分则是SDK,解析引擎应该是用于解析用户编写的ql文件(也就是用户编写的规则),SDK则应该是用于构建和运行代码分析的,因此需要安装这两部分。

引擎安装

安装地址:[CodeQL解析引擎](https://github.com/github/codeql-cli-binaries/releases

解压文件夹,复制codeql文件夹到CodeQL(新建的)文件夹下)

image-20240507102231604

这里codeql.exe则是已经编译好的二进制文件,可以添加进环境变量中。

CodeQL标准库

安装地址:CodeQL标准库

codeQL标准库与上面的解析引擎放在同一目录下即可。

image-20240507102659828

VSCode中安装CodeQL插件,将其扩展的路径改成解析引擎的exe文件路径

image-20240507102800143

编译CodeQL数据库

根据不同的语言,在源码的目录下创建不同的数据库,根据不同的项目语言,创建的语句有所不同,但都大同小异,例如如下:

#java项目
codeql database create demo -l java

#maven项目
codeql database create demo --language="java" --command="mvn clean install --file pom.xml" --source-root=XXX

#gradle项目
codeql database create demo --language=java --command="gradle.bat" --overwrite
codeql database create demo --source-root=XXX --language=java --command="gradle clean build -x test --no-daemon -Dfile.encoding=UTF-8"

#python
codeql database create my_project_db --language="python" --command="python setup.py install" --source-root=xxxx

测试例子

下面以一个简单的JAVA项目为例子

首先创建对应的Maven数据库,它会对项目进行编译,当最后出现success说明编译成功了。

随手在项目中创建一个qlpack.yml文件,文件的内容如下:

name: example #QL包的名称,需要唯一
version: 0.0.0 #QL包的版本号
libraryPathDependencies: codeql-java #这个是必填项,codeql-java表示需要Java语言的QL标准库依赖

完成后可以在项目中创建ql文件自定义语法对代码语句进行查询等

ac1ec8455b1be38150249a9ce1467b8

CodeQL的语法其实是比较高深的,需要不断的查看文档进行一定的学习才能掌握,以上只是一个十分简单的示例。

语法参考文档:codeql官方语法文档

总结

以上仅是简单的记录下codeQL的安装过程,事实上codeQL的语法使它非常强大,可以通过AST语法树进行分析发现漏洞的所在点,也有许多的类与库使用再加上自身定义的代码语法完成漏洞的快速寻找。

~  ~  The   End  ~  ~


 赏 
承蒙厚爱,倍感珍贵,我会继续努力哒!
logo图像
tips
文章二维码 分类标签:Web安全Web安全
文章标题:CodeQL初识
文章链接:https://aiwin.fun/index.php/archives/4403/
最后编辑:2024 年 5 月 7 日 15:06 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 2 + 6 =
快来做第一个评论的人吧~