漏洞发现:代码分析引擎 CodeQL

简介: codeql 是一门类似 SQL 的查询语言,通过对源码(C/C++、C#、golang、java、JavaScript、typescript、python)进行完整编译,并在此过程中把源码文件的所有相关信息(调用关系、语法语义、语法树)存在数据库中,然后编写代码查询该数据库来发现安全漏洞(硬编码 / XSS 等)。

codeql 是一门类似 SQL 的查询语言,通过对源码(C/C++、C#、golang、java、JavaScript、typescript、python)进行完整编译,并在此过程中把源码文件的所有相关信息(调用关系、语法语义、语法树)存在数据库中,然后编写代码查询该数据库来发现安全漏洞(硬编码 / XSS 等)。


CodeQL 本身包含两部分解析引擎 +SDK


  • 解析引擎用来解析我们编写的规则,虽然不开源,但是可以直接在官网下载二进制文件直接使用


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


1. 安装 CodeQL CLI


CodeQL CLI 是一个可执行的命令行工具,可以使用 CodeQL CLI运行 CodeQL 分析、创造 CodeQL 数据库、开发和测试自定义 CodeQL 查询。


https://github.com/github/codeql-cli-binaries/releases


微信图片_20220504115341.png


下载时,根据具体操作系统下载不同版本的CodeQL CLI。下载下来是一个 zip 压缩包,这里解压到如下目录


C:\jenkins\codeql-win64


CodeQL CLI 的安装路径到添加到 PATH 环境变量中,方便调用 codeql 命令。


PATH=%PATH%;C:\jenkins\codeql-win64


验证安装成功


C:\Users\2230>codeql version
CodeQL command-line toolchain release 2.8.2.
Copyright (C) 2019-2022 GitHub, Inc.
Unpacked in: C:\jenkins\codeql-win64
  Analysis results depend critically on separately distributed query and
  extractor modules. To list modules that are visible to the toolchain,
  use 'codeql resolve qlpacks' and 'codeql resolve languages'.


2. 下载标准的扫描规则 CodeQL libraries and queries


以下仓库包含了标准的 CodeQL 库和查询语句


https://github.com/github/codeql


下载后是一个 zip 压缩包,解压到如下目录


C:\jenkins\codeql-main


3. 安装 VSCode CodeQL 插件


VSCode 的安装也是非常简单的,直接下载下来也是一个 zip 压缩包;直接解压即可。下面在 VSCode 上安装 CodeQL 的插件。


微信图片_20220504115346.png


安装成功后


微信图片_20220504115350.png


配置安装的codeql 引擎路径


微信图片_20220504115353.png

 

微信图片_20220504115357.png

 

设置 CodeQL CLI 可执行文件 codeql.exe 的安装路径


微信图片_20220504115400.png


4. 进行项目漏洞扫描


  • 下载项目源码


比如现在要对xxl-job这个项目进行漏洞扫描


git clone https://gitee.com/xuxueli0323/xxl-job


  • 创建数据库


进入目标代码目录,这里进入


D:\xxl-job


创建源码数据库


codeql database create xxljob --language=java --command="mvn clean install"

--language要根据具体项目的编译语言指定;另外--command参数如果不指定,会使用默认的编译命令和参数。language 对应关系如下


Language Identity
C/C++ cpp
C# csharp
Go go
Java java
javascript/Typescript javascript
Python python


微信图片_20220504115406.png


微信图片_20220504115410.png


  • 在 VSCode 打开扫描规则 CodeQL libraries and queries


微信图片_20220504115414.png


  • 在 VSCode 添加数据库


微信图片_20220504115418.png


添加之后


微信图片_20220504115422.png


  • 执行规则扫描


选择具体语言的规则进行扫描,例如:java语言的规则。ql后缀的文件是规则扫描文件


C:\jenkins\codeql-main\java\ql\src\Security\CWE


微信图片_20220504115427.png


执行扫描


微信图片_20220504115431.png


可以一次选择一条或者多条规则就行扫描;但是一次性不能超过 20 条规则。点击CodeQL:Run Queries in Selected Files后,弹出一个对话框,选择Yes;即可执行扫描操作。


5. 附


使用 VSCode 图形化工具发现还不如直接使用命令快捷、方便


  • 创建数据库


codeql database create databaseName --source-root=D:/xxljob --language=java


  • 更新数据库


codeql database upgrade databaseName


  • 执行扫描规则


codeql database analyze databasePath codeql-repo/java --format=csv --output=result.csv
codeql-repo/java :java 扫描规则
--format:结果输出格式
--output:结果文件输出路径
相关文章
|
人工智能 安全 数据库
AiCodeAudit-基于Ai大模型的自动代码审计工具
本文介绍了基于OpenAI大模型的自动化代码安全审计工具AiCodeAudit,通过图结构构建项目依赖关系,提高代码审计准确性。文章涵盖概要、整体架构流程、技术名词解释及效果演示,详细说明了工具的工作原理和使用方法。未来,AI大模型有望成为代码审计的重要工具,助力软件安全。项目地址:[GitHub](https://github.com/xy200303/AiCodeAudit)。
5119 9
|
监控 数据可视化 项目管理
板栗看板是什么软件?如何使用板栗看板提升团队协作效率?
随着数字化办公的发展,企业和团队急需高效工具来提升协作效率。板栗看板应运而生,它是一款基于“看板管理法”的可视化管理软件,提供任务规划、跟踪和团队协作功能。其核心功能包括看板视图、任务管理、团队协作、项目管理和分析报告,帮助团队简化沟通、明确责任分工、优化工作流程。板栗看板适用于个人和企业,特别是企业版在数据安全、权限管理和跨团队协作方面进行了深度优化,助力大型团队提升管理效率。
585 0
|
Linux Go 网络安全
goland 远程调试 remote debug
goland 远程调试 remote debug
757 0
|
SQL
Typecho——Argument 1 passed to Typecho\Router::get() must be of the type string
Typecho——Argument 1 passed to Typecho\Router::get() must be of the type string
255 0
|
开发工具 git
git 报错 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
git 报错 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
2419 0
git 报错 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
868 1
|
缓存 监控 安全
在Linux中,如何排查系统崩溃问题?
在Linux中,如何排查系统崩溃问题?
|
程序员 Android开发
Android亮度调节的几种实现方法
Android亮度调节的几种实现方法
1084 0
|
存储 区块链 Python
以太坊中如何获取另外一个智能合约部署的合约地址?
如何获取另外一个智能合约部署的合约地址? 我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。
2549 0

热门文章

最新文章