freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

白盒代码审计:关于VsCode中CodeQL的应用
2024-06-05 12:52:04

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

1717562212_665feb641609ab1bbe5a6.png!small?1717562213318

(2)下载后,将文件解压到名为CodeQl的文件夹下,配置codeql路径到环境变量内:

1717562220_665feb6c9a16af25cd4dd.png!small?1717562224352

命令行输入:codeql,验证是否安装成功:

1717562229_665feb7591ebc13a1339b.png!small?1717562230706


2、SDK( 标准的扫描规则CodeQL libraries and queries):

完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。

官方下载地址https://github.com/github/codeql

下载后 也解压到CodeQL文件夹内,即可:

1717562240_665feb80873811fa6450c.png!small?1717562242373

在此路径下打开cmd命令行窗口,执行命令codeql pack ls可以看到当前SDK中默认支持的规则集。

1717562254_665feb8e2a9c786d4f2a5.png!small?1717562255750

二、VSCode内使用CodeQL:

1、安装codeql插件,并配置引擎路径

通过Visual Studio Code来使用codeql,需要在VSCode上面安装CodeQL的插件。

安装好Visual Studio Code后,在它的扩展里面搜索codeql, 点击安装。

1717562273_665feba14a7cc0a685f91.png!small?1717562274704
然后配置一下我们安装的codeql引擎路径

1717562285_665febadc1b9ce3e9c157.png!small?1717562286987

1717562301_665febbd69ecf5335728e.png!small?1717562302938

以上完成后,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 验证安装成功:

1717562416_665fec30ca792fb96d278.png!small?1717562418224

重新运行生成数据库的命令,正确执行,build-stdout窗口信息如下:

1717562427_665fec3b508b4f8c0a100.png!small

等待几分钟.... 数据库创建成功,信息如下

1717562447_665fec4fef5f348bd66c2.png!small?1717562449673

3、Vscode添加数据库db-ql选择db-ql文件夹

1717562461_665fec5d63548e2b5eee8.png!small?1717562463015


4、在 VSCode 打开扫描规则 CodeQL libraries and queries,也就是sdk的解压后的包

1717562491_665fec7b97bbef826089d.png!small?1717562494423


  • 5、执行规则扫描

选择具体语言的规则进行扫描,例如:java语言的规则。

ql后缀的文件是规则扫描文件

比如:\codeql-main\java\ql\src\Security\CWE

执行扫描

1717562607_665fecef046783227644c.png!small?1717562608533


可以一次选择一条或者多条规则就行扫描;但是一次性不能超过 20 条规则。

点击CodeQL:Run Queries in Selected Files后,弹出一个对话框,选择Yes;即可执行扫描操作。(将codeql标准库,即文件夹 db-ql,也就是生成的数据库文件夹,添加到工作区,)


运行后,右侧可看到扫描结果

1717562627_665fed038351807403d87.png!small?1717562628819


命令行方式

使用 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文件夹内即生成的数据库内容。

内容如下:

1717562670_665fed2e13e6eb0765469.png!small?1717562673854

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:结果文件输出路径

# 代码审计 # 开源安全工具 # 白盒安全审计 # CodeQL # vscode
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录