CodeQL教程

CodeQL教程


0x00 前言

近期在学习静态代码审计的部分内容,找到了一个强大的神器CodeQL,但是中文的学习资源和手册都不是很完善,所以在这里吧个人的学习进行记录和分享,同时汇总一些大师傅们的分析文章及资源。

0x01 CodeQL简介

CodeQL是一款帮助开发者自动化安全检查的分析引擎,同时也能够帮助安全研究人员进行变种函数分析。

在CodeQL的世界,所有的代码都被视作数据来处理。安全漏洞、bugs、以及其他错误都可以生成查询模型来针对性的从代码提取出的数据库进行查询。

借助CodeQL,我们可以通过:定义sink、source来构建风险模型、CodeQL污点跟踪,来快速通过目前已知的基础漏洞来发现一些0day。

根据Lenny师傅的博客(https://lenny233.github.io/)描述和见解,CodeQL可以视作两大模块:

CodeQL-CLI

CLI可以理解为是扫描的主引擎,所有的分析功能都被集成于这个二进制工程内且并不开源。

QL

该项目是QL语言的具体实现,可以理解为是定义好的扫描规则,QL为CodeQL的使用者提供了封装好的常用方法、对象、模块等。

0x02 CodeQL-CLI

官方提供的CLI是封装好的二进制文件,直接从github上下载即可。

同时Vscode也提供了一个CodeQL的插件,方便开发者边便捷使用。

具体的安装方式就不再做过多赘述,已经有很多大师傅把这里写的很详细了。

具体的使用方式同样也不再多加描述,详细用法去读取CodeQL手册,这里记录几个最常用的命令:

创建QL数据库:
CodeQL database create -s <CodePath> <DatabasePath> --language=<Language> --command='xxx'

进行分析:
CodeQL database analyze <database> <queries> --format=<format> --output=<output>

对于Cpp、Java这类需要编译的语言,CodeQL同样需要编译后才可以创建数据库,所以对应的环境依赖需要配置好(gcc/java/mvn…)

0x03 QL

由于CLI并不是开源的,所以我们也没有办法去关注整个代码审计的数据库具体的AST生成过程等流程。因此在CodeQL中,起到关键作用的就是QL规则文件了。

以java-sqlinject为例,看官方的QL库是如何写的:

import java
import semmle.code.java.dataflow.FlowSources
import SqlInjectionLib
import DataFlow::PathGraph

from DataFlow::Node query, DataFlow::PathNode source, DataFlow::PathNode sink
where queryTaintedBy(query, source, sink)
select query, source, sink, "Query might include code from $@.", source.getNode(), "this user input"

from用来声明变量,where来编写限制表达式,最后select用于输出。

已有资源分析

每次在学习一个新鲜的东西,第一时间都是去找各位师傅的博客和分享。所以第一部分先把国内各位大师傅的博文都撸一遍,站在巨人的肩膀上再去啃官方手册文档。

先知社区
先知上共有四篇文章:

  1. 入门教程:https://xz.aliyun.com/t/7657 包含了安装和基础使用。
  2. 官方习题:https://xz.aliyun.com/t/7979 学习官方题目解题思路。
  3. 实战利用:https://xz.aliyun.com/t/7482 fastjson利用链路实战。
  4. 追求细节:https://xz.aliyun.com/t/7789 CodeQL污点分析。

然后总结一下几篇文章内的学习到的感悟:

入门教程没有什么好说的,这个也是大多数博文重复的内容。简单的描述了安装、语法、以python-django项目为例的查询。

官方习题师傅只写了第四题,看了一下前三题都是C的js的…所以先跟着师傅学习一下java的这题,师傅把https://securitylab.github.com/ctf/codeql-and-chill 的官方解题流程翻译的比较容易理解了一些。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值