市面上知名的静态软件分析工具
工具名称 | 是否开源 | 二次开发能力 | 规则编写难度 | 是否支持AST | 是否支持跨文件分析 |
---|---|---|---|---|---|
CodeQL | 半开源(引擎闭源,SDK开源) | 高 | 相对简单 | 支持 | 支持 |
Coverity | 否 | 低,依赖于厂商 | 相对困难 | 支持 | 支持 |
Fortify | 否 | 低,依赖于厂商 | 相对困难 | 支持 | 支持 |
SounarCube | 开源 | 高 | 相对简单 | 不支持 | 不支持 |
CodeQL
安装网址:https://github.com/github/codeql-action/releases
下载解压后,将主目录添加到系统的环境变量中
验证是否安装成功,在命令行输入codeql,如下即可
同时配合vscode使用,我们在vscode中下载codeql插件,出现图标表示安装成功
创建数据库
CodeQL本身包含两部分解析引擎+SDK。codeql开源的是其sdk,主要作用是将源码编译为其独创的抽象语法树数据库,我们可以使用ql语言对该数据库查询,找到我们需要的各类信息。
首先我们要对即将分析的源码进行编译,下面我以java源码为实例演示:
codeql database create
<database-name>
:要创建的数据库的名称。
--language=java
:指定语言为 Java。
<source-directory>
:Java 源码的根目录。
--command="mvn clean compile"
:这是构建 Java 项目的命令,假设项目使用 Maven 构建。你可以根据实际构建工具(如 Gradle)更改此命令。
我们也可以直接在源码目录进行编译
出现BUILD SUCCESS即为成功,同时它也在源码目录生成了我们命名的数据库文件(mall)。
vscode中使用codeql
打开vscode的codeql插件在DATABASES中选择我们刚才编译生成的数据库文件mall
点击QUERIES里的Create one to get start,选择分析的语言java
系统自动生成hello world的ql语言示例,同时点击右边运行按键,就可得到查询结果,可以看到该源码中所有包含hello world语句的地方
以上是结合vscode的简单使用,同时现在已有多个打包好的检测各类漏洞的包,可以拿来使用。但我们最终的目标是使用codeql二次开发,分析我们自己所关心且要找寻的程序漏洞,该语言的使用仍需学习。
0 条评论