漏洞发现:代码分析引擎 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:结果文件输出路径
相关文章
|
2月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
84 2
|
5月前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
|
6月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
5月前
|
SQL 安全 Java
Java中的代码审计与漏洞检测实践指南
Java中的代码审计与漏洞检测实践指南
|
安全 Java 持续交付
1分钟代码漏洞自动检测
基于云效Codeup,1分钟左右即可自动检测出代码里的源码漏洞、依赖包漏洞、敏感信息等安全风险,并为你自动修复。
|
安全 API 开发工具
恶意代码分析系列-几种常用技术(1)
恶意代码分析系列-几种常用技术(1)
|
安全 API 数据库
恶意代码分析系列-几种常用技术(3)
恶意代码分析系列-几种常用技术(3)
|
安全 API Windows
恶意代码分析系列-几种常用技术(2)
恶意代码分析系列-几种常用技术(2)
|
Java
[恶意代码分析]恶意代码种类以及分析环境介绍
[恶意代码分析]恶意代码种类以及分析环境介绍
412 1
[恶意代码分析]恶意代码种类以及分析环境介绍
|
缓存 安全 测试技术
thinkphp 漏洞修复方案之<6.X版本的代码漏洞案例分析
大年初五,根据我们SINE安全的网站安全监测平台发现,thinkphp官方6.0版本被爆出高危的网站代码漏洞,该漏洞可导致网站被植入网站木马后门文件也叫webshell,具体产生的原因是session ID参数值这里并未对其做详细的安全过滤与校验,导致可以远程修改POST数据包将session的值改为恶意的后门代码,发送到服务器后端并生成PHP文件直接生成,可导致网站被攻击,服务器被入侵,关于该thinkphp漏洞的详情,我们SINE安全来跟大家分析一下。
529 0
thinkphp 漏洞修复方案之<6.X版本的代码漏洞案例分析