CodeQL初识
前言
昨天一个审计仔
朋友问我有没有弄过CodeQL
,我的回复是之前玩过CodeQLPy
来辅助进行代码审计,但是具体怎么安装的我也忘记了,我说确实挺强,然后他就问我具体是怎么安装的。他没看懂,于是就有了以下的文章。首先可以确定的是CodeQL
逐渐爆火成为了主流,作为一种辅助代码审计的工具为什么爆火?我虽然并非是主干代码审计
的,但是却是有比较深刻的印象就是当一个企业级的项目摆在面前需要进行审计,几百万行
甚至千万行
的代码总是很耗时,而且代码量的庞大容易让人头晕,因此会漏掉很多很容易能发现的漏洞。CodeQL
之所以强大,它与一些代码审计工具不同的地方在于它针对的是代码本身,使用者可以通过CodeQL 规则
自定义寻找自己所需要的代码规则。
安装
首先CodeQL
包含两部分,一部分是解析引擎,一部分则是SDK
,解析引擎应该是用于解析用户编写的ql
文件(也就是用户编写的规则),SDK
则应该是用于构建和运行代码分析的,因此需要安装这两部分。
引擎安装
安装地址:[CodeQL解析引擎](https://github.com/github/codeql-cli-binaries/releases
解压文件夹,复制codeql文件夹到CodeQL(新建的)文件夹下)
这里codeql.exe
则是已经编译好的二进制文件,可以添加进环境变量中。
CodeQL标准库
安装地址:CodeQL标准库
将codeQL
标准库与上面的解析引擎放在同一目录下即可。
从VSCode
中安装CodeQL
插件,将其扩展的路径改成解析引擎的exe
文件路径
编译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
文件自定义语法对代码语句进行查询等
CodeQL
的语法其实是比较高深的,需要不断的查看文档进行一定的学习才能掌握,以上只是一个十分简单的示例。
语法参考文档:codeql官方语法文档
总结
以上仅是简单的记录下codeQL
的安装过程,事实上codeQL
的语法使它非常强大,可以通过AST
语法树进行分析发现漏洞的所在点,也有许多的类与库使用再加上自身定义的代码语法完成漏洞的快速寻找。
文章标题:CodeQL初识
文章链接:https://aiwin.fun/index.php/archives/4403/
最后编辑:2024 年 5 月 7 日 15:06 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)