freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

什么?听说你还不知道CodeQL(中)
2022-09-19 14:20:22

0x01前言

上一篇文章,介绍了如何在本地安装使用CodeQL.并使用CodeQL对现成的库进行扫描!本篇文章将介绍一些进阶的玩法:面对一个复杂的项目如何创建本地库以及如何使用所有官方提供的规则脚本!

0x02创建扫描数据库

  • 普通项目创建

针对普通项目创建,可以参考官方文档直接在命令行中进入源代码之中,然后使用以下命令创建即可,

codeql database create <database> --language=<language-identifier>

下面以java项目为例,来创建一个普通的Java maven项目的数据库

jdk11_0_13  &&/Users/tools/scanner/codeql-v2.10.0/codeql database create javatest --language=java --overwrite

1663557171_6327de336b2c7683715ac.png!small?1663557171933

接下来我简单介绍一下这些命令的含义:

jdk11_0_13:指定jdk的运行版本,我这边使用了alias,所以jdk11_0_13与jdk的绝对路径地址

/Library/Java/JavaVirtualMachines/jdk11.0.13.jdk/Contents/Home/bin/java效果是一样的

codeql:这个是codeql的二进制文件的绝对路径地址

--language=java:这是制定项目语言类型

  • 复杂项目创建

前面我们介绍了简单项目如何创建扫描数据库,可是现实情况是我们大多数情况下遇到的项目直接使用官方的推荐命令是无法进行创建的

1663557526_6327df96c2970419aa53d.png!small?1663557527196

1663557533_6327df9d908b042475d31.png!small?1663557534220

针对复杂项目可以简单总结一下他们的启动特点

  1. 需要指定特定的JVM参数

  2. 需要指定特定maven配置

针对这些特点,我们看看,codeql里面是否有对应的参数可以指定并满足我们的要求

使用命令查看创建数据库的所有帮助信息

/Users/tools/scanner/codeql-v2.10.0/codeql database create -help -vv

全局搜索,找到了,两个参数可以满足设定复杂项目的启动参数

-J=<opt>                   [Advanced] Give option to the JVM running the command.

-c, --command=<command>    For compiled languages, build commands that will cause the compiler to be invoked on the source code to analyze. These commands will be executed under an instrumentation environment that allows analysis of generated code and (in some cases) standard libraries.

所以我们使用以下命令基本可以创建所有需要启动参数的Java项目

jdk11_0_13  &&/Users/tools/scanner/codeql-v2.10.0/codeql database create javatest --language=java   --command='mvn  -gs  /Users/xxxx/develop/settings-new.xml   clean install'     --overwrite   -J="-Denv=dev -Dproject.name=polaris -Dapp.id=polaris"

我来简单介绍一下这些命令的含义

--command:指定项目启动时需要的maven启动的setting文件

-J:指定项目启动时需要的jvm参数

指定完这些参数之后,我们发现,此时就可以用codeQL创建扫描数据库了

0x03开始查询

我们数据库创建成功之后,下一步就是导入数据库,具体操作流程如下所示

  • 导入数据库

如何导入,操作流程如下截图所示


  • 使用官方现成的脚本
    下载codeQL官方仓库文件夹,并使用vs code打开如下图所示
    1663566522_632802ba165beb48534e0.png!small?1663566522692../codeql/java/ql/src/Security/CWE该文件夹下面是所有官方已经写好的脚本,我们是可以直接使用的
    1663566980_63280484955623a786628.png!small?1663566981879我们直接找到对应的文件,然后鼠标右键即可执行该脚本

1663567722_6328076a23b8932bbb46f.png!small?1663567723138

在现实中,我们为了节省时间,可能需要同时执行多个检测脚本,此时又该如何处理呢?其实也很简单,首先我们要多选文件,然后再执行即可,具体操作如下图所示

1663567863_632807f718f7765eacfc9.png!small?1663567864281

0x04后记

至此,我们已经能够比较熟练地创建几乎所有我们能遇到的项目并且使用所有官方现有的规则脚本检测我们的项目了!

本文作者:, 转载请注明来自FreeBuf.COM

# 渗透测试 # 安全 # 代码审计 # 安全工具正版 # CodeQL
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
评论 按热度排序

登录/注册后在FreeBuf发布内容哦

相关推荐
\
  • 0 文章数
  • 0 评论数
  • 0 关注者
文章目录
登录 / 注册后在FreeBuf发布内容哦