CodeQL 简介
通常认为,CodeQL 是一个开源的代码分析平台或者说漏洞扫描工具,其通过介入代码编译过程(编译型语言)或者进行静态程序分析(解释型语言)来获取程序代码的语义信息(Extractor),并且生成数据库(CodeQL Database),最后使用专用语言(QL language)编写查询语句来发现漏洞风险。
一、CodeQL安装:
CodeQL本身包含两部分 解析引擎 + SDK
1、解析引擎:
(CodeQL CLI 是一个可执行的命令行工具,可以使用 CodeQL CLI运行 CodeQL 分析、创造 CodeQL 数据库、开发和测试自定义 CodeQL 查询。)
不开源,解析我们编写的规则,但是可以直接在官网下载二进制文件直接使用。
(1)官方下载地址: https://github.com/github/codeql-cli-binaries/releases
(2)下载后,将文件解压到名为CodeQl的文件夹下,配置codeql路径到环境变量内:
命令行输入:codeql,验证是否安装成功:
2、SDK( 标准的扫描规则库CodeQL libraries and queries):
完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。
官方下载地址https://github.com/github/codeql
下载后 也解压到CodeQL文件夹内,即可:
在此路径下打开cmd命令行窗口,执行命令codeql pack ls可以看到当前SDK中默认支持的规则集。
二、VSCode内使用CodeQL:
1、安装codeql插件,并配置引擎路径
通过Visual Studio Code来使用codeql,需要在VSCode上面安装CodeQL的插件。
安装好Visual Studio Code后,在它的扩展里面搜索codeql, 点击安装。
然后配置一下我们安装的codeql引擎路径
以上完成后,codeql的开发环境就配置好了。
2、生成数据库
CodeQL像查询数据一样查询代码安全缺陷及漏洞,在 CodeQL 中,代码被视为数据。 安全漏洞、bug 和其他错误建模为可针对从代码中提取的数据库执行的查询。
如下,我们参考其他文章中的开源靶场案例进行验证codeql的使用:本次使用开源靶场项目java-sec-cod(https://github.com/JoyChou93/java-sec-code)。
(1)下载靶场源代码到本地,创建数据库。Java语言需要编译,db-ql为数据库名称。
执行命令,将项目代码生成数据库形式:
codeql database create db-ql --language=java --command=“mvn clean install”
主要参数:
- –command 参数如果不指定,会使用默认的编译命令和参数
- –source-root 源码路径
- –overwrite 表示 create 的目标 database 对已有的 database 做覆盖
- –language 要根据具体项目的编译语言指定
Language对应关系如下:
Language |
Identity |
C/C++ |
cpp |
C# |
csharp |
Go |
go |
Java |
java |
javascript/Typescript |
javascript |
Python |
python |
(2)命令执行后,若出现如下报错,不要慌:
A fatal error occurred: Exit status 1 from command: [D:\workspace\CodeQL\codeql\tools\win64\runner.exe, cmd.exe, /C, type, NUL, &&, mvn, clean, install]
分析报错,意思是找不到 mvn 命令,安装maven即可
(3)安装maven后,命令行 mvn -v 验证安装成功:
重新运行生成数据库的命令,正确执行,build-stdout窗口信息如下:
等待几分钟.... 数据库创建成功,信息如下
3、Vscode添加数据库db-ql,选择db-ql文件夹
4、在 VSCode 打开扫描规则 CodeQL libraries and queries,也就是sdk的解压后的包
- 5、执行规则扫描
选择具体语言的规则进行扫描,例如:java语言的规则。
ql后缀的文件是规则扫描文件
比如:\codeql-main\java\ql\src\Security\CWE
执行扫描
可以一次选择一条或者多条规则就行扫描;但是一次性不能超过 20 条规则。
点击CodeQL:Run Queries in Selected Files后,弹出一个对话框,选择Yes;即可执行扫描操作。(将codeql标准库,即文件夹 db-ql,也就是生成的数据库文件夹,添加到工作区,)
运行后,右侧可看到扫描结果
命令行方式
使用 VSCode 图形化工具如上,也可也直接使用命令,快捷、方便
- 创建数据库
codeql database create databaseName --source-root=D:/xxljob --language=java
举例:
codeql database create /Users/zangcc/Desktop/CodeQL/databases/codeql_demo --language="java" --command="mvn clean install -DskipTests --file pom.xml" --source-root=/Users/zangcc/Desktop/CodeQL/micro_service_seclab
databaseName命名数据库名称
Databasecreate:创建数据库。
在/Users/zangcc/Desktop/CodeQL/databases/目录下新建一个codeql_demo文件夹,codeql_demo文件夹内即生成的数据库内容。
内容如下:
language:语言,因为靶场是springboot的,所以是java。
command:命令,用mvn,clean,install来编译代码。
source-root:需要代码审计的源代码根目录。
- 更新数据库
codeql database upgrade databaseName
- 执行扫描规则
codeql database analyze databasePath codeql-repo/java --format=csv --output=result.csv
databasePath 数据库路径
codeql-repo/java :java 扫描规则
--format:结果输出格式
--output:结果文件输出路径
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)